diff --git a/.travis.yml b/.travis.yml index 326c22d01..2245157e7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,7 +14,7 @@ services: # Package installation install: - python setup.py install - - pip install psycopg2 elasticsearch wand embedly + - pip install psycopg2 elasticsearch wand embedly mock python-dateutil - pip install coveralls # Pre-test configuration before_script: diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 39740ef55..803ad742d 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,9 +1,26 @@ Changelog ========= -0.5 (xx.xx.20xx) +0.6 (xx.xx.20xx) ~~~~~~~~~~~~~~~~ + * Added {% routablepageurl %} template tag (@timheap) + * Added RoutablePageMixin (@timheap) + * Fix: Page URL generation now returns correct URLs for sites that have the main 'serve' view rooted somewhere other than '/' + +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) ~~~~~~~~~~~~~~~~~~ diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index df81741c9..b69fdb539 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -30,6 +30,7 @@ Contributors * Jeffrey Hearn * Robert Clark * Tim Heap +* Nathan Brizendine Translators =========== diff --git a/README.rst b/README.rst index 5fa7f47f9..f06776221 100644 --- a/README.rst +++ b/README.rst @@ -24,8 +24,8 @@ Wagtail is a Django content management system built originally for the `Royal Co * Support for tree-based content organisation * Optional preview->submit->approve workflow * Fast out of the box. `Varnish `_-friendly if you need it -* A simple `form builder `_ -* Optional `static site generation `_ +* A simple `form builder `_ +* Optional `static site generation `_ * Excellent `test coverage `_ Find out more at `wagtail.io `_. diff --git a/docs/images/bad_horizontal_rule.png b/docs/_static/images/bad_horizontal_rule.png similarity index 100% rename from docs/images/bad_horizontal_rule.png rename to docs/_static/images/bad_horizontal_rule.png diff --git a/docs/images/bold_test.png b/docs/_static/images/bold_test.png similarity index 100% rename from docs/images/bold_test.png rename to docs/_static/images/bold_test.png diff --git a/docs/images/screen01_login.png b/docs/_static/images/screen01_login.png similarity index 100% rename from docs/images/screen01_login.png rename to docs/_static/images/screen01_login.png diff --git a/docs/_static/images/screen02_dashboard_editor.png b/docs/_static/images/screen02_dashboard_editor.png new file mode 100644 index 000000000..f0e68e561 Binary files /dev/null and b/docs/_static/images/screen02_dashboard_editor.png differ diff --git a/docs/_static/images/screen03_explorer_menu.png b/docs/_static/images/screen03_explorer_menu.png new file mode 100644 index 000000000..766908810 Binary files /dev/null and b/docs/_static/images/screen03_explorer_menu.png differ diff --git a/docs/_static/images/screen04_search_screen.png b/docs/_static/images/screen04_search_screen.png new file mode 100644 index 000000000..321ee9334 Binary files /dev/null and b/docs/_static/images/screen04_search_screen.png differ diff --git a/docs/_static/images/screen05_explorer_page.png b/docs/_static/images/screen05_explorer_page.png new file mode 100644 index 000000000..fcafe7d33 Binary files /dev/null and b/docs/_static/images/screen05_explorer_page.png differ diff --git a/docs/_static/images/screen06_explorer_page_arrow.png b/docs/_static/images/screen06_explorer_page_arrow.png new file mode 100644 index 000000000..9c4745d84 Binary files /dev/null and b/docs/_static/images/screen06_explorer_page_arrow.png differ diff --git a/docs/_static/images/screen07_explorer_page_breadcrumb.png b/docs/_static/images/screen07_explorer_page_breadcrumb.png new file mode 100644 index 000000000..46cd21249 Binary files /dev/null and b/docs/_static/images/screen07_explorer_page_breadcrumb.png differ diff --git a/docs/_static/images/screen08.5_reorder_page_handles.png b/docs/_static/images/screen08.5_reorder_page_handles.png new file mode 100644 index 000000000..a9a0f1e56 Binary files /dev/null and b/docs/_static/images/screen08.5_reorder_page_handles.png differ diff --git a/docs/_static/images/screen08_add_page_button.png b/docs/_static/images/screen08_add_page_button.png new file mode 100644 index 000000000..b9813e780 Binary files /dev/null and b/docs/_static/images/screen08_add_page_button.png differ diff --git a/docs/_static/images/screen09_page_type_selection.png b/docs/_static/images/screen09_page_type_selection.png new file mode 100644 index 000000000..1afe19537 Binary files /dev/null and b/docs/_static/images/screen09_page_type_selection.png differ diff --git a/docs/_static/images/screen10_blank_page_edit_screen.png b/docs/_static/images/screen10_blank_page_edit_screen.png new file mode 100644 index 000000000..888392aeb Binary files /dev/null and b/docs/_static/images/screen10_blank_page_edit_screen.png differ diff --git a/docs/images/screen11.1_bold_italic.png b/docs/_static/images/screen11.1_bold_italic.png similarity index 100% rename from docs/images/screen11.1_bold_italic.png rename to docs/_static/images/screen11.1_bold_italic.png diff --git a/docs/images/screen11.2_formatting_options.png b/docs/_static/images/screen11.2_formatting_options.png similarity index 100% rename from docs/images/screen11.2_formatting_options.png rename to docs/_static/images/screen11.2_formatting_options.png diff --git a/docs/images/screen11.3_lists.png b/docs/_static/images/screen11.3_lists.png similarity index 100% rename from docs/images/screen11.3_lists.png rename to docs/_static/images/screen11.3_lists.png diff --git a/docs/images/screen11.4_horizontal_rule.png b/docs/_static/images/screen11.4_horizontal_rule.png similarity index 100% rename from docs/images/screen11.4_horizontal_rule.png rename to docs/_static/images/screen11.4_horizontal_rule.png diff --git a/docs/images/screen11.5_undo_redo.png b/docs/_static/images/screen11.5_undo_redo.png similarity index 100% rename from docs/images/screen11.5_undo_redo.png rename to docs/_static/images/screen11.5_undo_redo.png diff --git a/docs/images/screen11.6_images_videos.png b/docs/_static/images/screen11.6_images_videos.png similarity index 100% rename from docs/images/screen11.6_images_videos.png rename to docs/_static/images/screen11.6_images_videos.png diff --git a/docs/images/screen11.7_links_docs.png b/docs/_static/images/screen11.7_links_docs.png similarity index 100% rename from docs/images/screen11.7_links_docs.png rename to docs/_static/images/screen11.7_links_docs.png diff --git a/docs/_static/images/screen11_rich_text_field.png b/docs/_static/images/screen11_rich_text_field.png new file mode 100644 index 000000000..8757d6ba5 Binary files /dev/null and b/docs/_static/images/screen11_rich_text_field.png differ diff --git a/docs/_static/images/screen12_edit_screen_overview.png b/docs/_static/images/screen12_edit_screen_overview.png new file mode 100644 index 000000000..7819b4f07 Binary files /dev/null and b/docs/_static/images/screen12_edit_screen_overview.png differ diff --git a/docs/_static/images/screen13_publish_menu.png b/docs/_static/images/screen13_publish_menu.png new file mode 100644 index 000000000..0732ab316 Binary files /dev/null and b/docs/_static/images/screen13_publish_menu.png differ diff --git a/docs/_static/images/screen14_add_carousel_button.png b/docs/_static/images/screen14_add_carousel_button.png new file mode 100644 index 000000000..0f1aec3a8 Binary files /dev/null and b/docs/_static/images/screen14_add_carousel_button.png differ diff --git a/docs/_static/images/screen15_carousel_form.png b/docs/_static/images/screen15_carousel_form.png new file mode 100644 index 000000000..b5720f898 Binary files /dev/null and b/docs/_static/images/screen15_carousel_form.png differ diff --git a/docs/_static/images/screen16_selecting_image_from_library.png b/docs/_static/images/screen16_selecting_image_from_library.png new file mode 100644 index 000000000..386ad5e9b Binary files /dev/null and b/docs/_static/images/screen16_selecting_image_from_library.png differ diff --git a/docs/images/screen17_upload_image.png b/docs/_static/images/screen17_upload_image.png similarity index 100% rename from docs/images/screen17_upload_image.png rename to docs/_static/images/screen17_upload_image.png diff --git a/docs/images/screen18_image_alignment.png b/docs/_static/images/screen18_image_alignment.png similarity index 100% rename from docs/images/screen18_image_alignment.png rename to docs/_static/images/screen18_image_alignment.png diff --git a/docs/_static/images/screen19_link_form.png b/docs/_static/images/screen19_link_form.png new file mode 100644 index 000000000..1dabeb97d Binary files /dev/null and b/docs/_static/images/screen19_link_form.png differ diff --git a/docs/images/screen20_insert_video_form.png b/docs/_static/images/screen20_insert_video_form.png similarity index 100% rename from docs/images/screen20_insert_video_form.png rename to docs/_static/images/screen20_insert_video_form.png diff --git a/docs/_static/images/screen21_video_in_editor.png b/docs/_static/images/screen21_video_in_editor.png new file mode 100644 index 000000000..4b4bfb36b Binary files /dev/null and b/docs/_static/images/screen21_video_in_editor.png differ diff --git a/docs/_static/images/screen22_required_field.png b/docs/_static/images/screen22_required_field.png new file mode 100644 index 000000000..056f1ae6e Binary files /dev/null and b/docs/_static/images/screen22_required_field.png differ diff --git a/docs/_static/images/screen23_validation_error.png b/docs/_static/images/screen23_validation_error.png new file mode 100644 index 000000000..f1e00b1ac Binary files /dev/null and b/docs/_static/images/screen23_validation_error.png differ diff --git a/docs/_static/images/screen24_multiple_items_closed.png b/docs/_static/images/screen24_multiple_items_closed.png new file mode 100644 index 000000000..23ad40164 Binary files /dev/null and b/docs/_static/images/screen24_multiple_items_closed.png differ diff --git a/docs/_static/images/screen25_multiple_items_open.png b/docs/_static/images/screen25_multiple_items_open.png new file mode 100644 index 000000000..95b8b3dfa Binary files /dev/null and b/docs/_static/images/screen25_multiple_items_open.png differ diff --git a/docs/_static/images/screen26_reordering_multiple_items.png b/docs/_static/images/screen26_reordering_multiple_items.png new file mode 100644 index 000000000..a7a5af5c7 Binary files /dev/null and b/docs/_static/images/screen26_reordering_multiple_items.png differ diff --git a/docs/images/screen27_docs_icon.png b/docs/_static/images/screen27_docs_icon.png similarity index 100% rename from docs/images/screen27_docs_icon.png rename to docs/_static/images/screen27_docs_icon.png diff --git a/docs/_static/images/screen28_docs_form.png b/docs/_static/images/screen28_docs_form.png new file mode 100644 index 000000000..2b85babc0 Binary files /dev/null and b/docs/_static/images/screen28_docs_form.png differ diff --git a/docs/_static/images/screen29_documents_page.png b/docs/_static/images/screen29_documents_page.png new file mode 100644 index 000000000..34ba6230d Binary files /dev/null and b/docs/_static/images/screen29_documents_page.png differ diff --git a/docs/_static/images/screen30_documents_edit_page.png b/docs/_static/images/screen30_documents_edit_page.png new file mode 100644 index 000000000..b6544acb6 Binary files /dev/null and b/docs/_static/images/screen30_documents_edit_page.png differ diff --git a/docs/images/screen31_images_page.png b/docs/_static/images/screen31_images_page.png similarity index 100% rename from docs/images/screen31_images_page.png rename to docs/_static/images/screen31_images_page.png diff --git a/docs/images/screen32_image_edit_page.png b/docs/_static/images/screen32_image_edit_page.png similarity index 100% rename from docs/images/screen32_image_edit_page.png rename to docs/_static/images/screen32_image_edit_page.png diff --git a/docs/images/screen_wagtail_redirects.png b/docs/_static/images/screen_wagtail_redirects.png similarity index 100% rename from docs/images/screen_wagtail_redirects.png rename to docs/_static/images/screen_wagtail_redirects.png diff --git a/docs/advanced_topics.rst b/docs/advanced_topics.rst deleted file mode 100644 index 7e23d8442..000000000 --- a/docs/advanced_topics.rst +++ /dev/null @@ -1,17 +0,0 @@ -Advanced Topics -~~~~~~~~~~~~~~~~ - -.. note:: - This documentation is currently being written. - -replacing image processing backend - -custom image processing tags? - -wagtail user bar custom CSS option? - -extending hallo editor plugins with editor_js() - -injecting any JS into page edit with editor_js() - -Custom content module (same level as docs or images) diff --git a/docs/building_your_site/djangodevelopers.rst b/docs/building_your_site/djangodevelopers.rst deleted file mode 100644 index d1b69dcf3..000000000 --- a/docs/building_your_site/djangodevelopers.rst +++ /dev/null @@ -1,428 +0,0 @@ -For Django developers -===================== - -.. contents:: Contents - :local: - -.. note:: - This documentation is currently being written. - -Overview -~~~~~~~~ - -Wagtail requires a little careful setup to define the types of content that you want to present through your website. The basic unit of content in Wagtail is the ``Page``, and all of your page-level content will inherit basic webpage-related properties from it. But for the most part, you will be defining content yourself, through the construction of Django models using Wagtail's ``Page`` as a base. - -Wagtail organizes content created from your models in a tree, which can have any structure and combination of model objects in it. Wagtail doesn't prescribe ways to organize and interrelate your content, but here we've sketched out some strategies for organizing your models. - -The presentation of your content, the actual webpages, includes the normal use of the Django template system. We'll cover additional functionality that Wagtail provides at the template level later on. - -But first, we'll take a look at the ``Page`` class and model definitions. - - -The Page Class -~~~~~~~~~~~~~~ - -``Page`` uses Django's model interface, so you can include any field type and field options that Django allows. Wagtail provides some fields and editing handlers that simplify data entry in the Wagtail admin interface, so you may want to keep those in mind when deciding what properties to add to your models in addition to those already provided by ``Page``. - - -Built-in Properties of the Page Class -------------------------------------- - -Wagtail provides some properties in the ``Page`` class which are common to most webpages. Since you'll be subclassing ``Page``, you don't have to worry about implementing them. - -Public Properties -````````````````` - - ``title`` (string, required) - Human-readable title for the content - - ``slug`` (string, required) - Machine-readable URL component for this piece of content. The name of the page as it will appear in URLs e.g ``http://domain.com/blog/[my-slug]/`` - - ``seo_title`` (string) - Alternate SEO-crafted title which overrides the normal title for use in the ```` of a page - - ``search_description`` (string) - A SEO-crafted description of the content, used in both internal search indexing and for the meta description read by search engines - -The ``Page`` class actually has alot more to it, but these are probably the only built-in properties you'll need to worry about when creating templates for your models. - - -Anatomy of a Wagtail Model -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -So what does a Wagtail model definition look like? Here's a model representing a typical blog post: - -.. code-block:: python - - from django.db import models - - from wagtail.wagtailcore.models import Page - from wagtail.wagtailcore.fields import RichTextField - from wagtail.wagtailadmin.edit_handlers import FieldPanel - from wagtail.wagtailimages.edit_handlers import ImageChooserPanel - from wagtail.wagtailimages.models import Image - - class BlogPage(Page): - body = RichTextField() - date = models.DateField("Post date") - feed_image = models.ForeignKey( - 'wagtailimages.Image', - null=True, - blank=True, - on_delete=models.SET_NULL, - related_name='+' - ) - - BlogPage.content_panels = [ - FieldPanel('title', classname="full title"), - FieldPanel('date'), - FieldPanel('body', classname="full"), - ] - - BlogPage.promote_panels = [ - FieldPanel('slug'), - FieldPanel('seo_title'), - FieldPanel('show_in_menus'), - FieldPanel('search_description'), - ImageChooserPanel('feed_image'), - ] - -To keep track of your ``Page``-derived models, it might be helpful to include "Page" as the last part of your class name. ``BlogPage`` defines three properties: ``body``, ``date``, and ``feed_image``. These are a mix of basic Django models (``DateField``), Wagtail fields (``RichTextField``), and a pointer to a Wagtail model (``Image``). - -Next, the ``content_panels`` and ``promote_panels`` lists define the capabilities and layout of the Wagtail admin page edit interface. The lists are filled with "panels" and "choosers", which will provide a fine-grain interface for inputting the model's content. The ``ImageChooserPanel``, for instance, lets one browse the image library, upload new images, and input image metadata. The ``RichTextField`` is the basic field for creating web-ready website rich text, including text formatting and embedded media like images and video. The Wagtail admin offers other choices for fields, Panels, and Choosers, with the option of creating your own to precisely fit your content without workarounds or other compromises. - -Your models may be even more complex, with methods overriding the built-in functionality of the ``Page`` to achieve webdev magic. Or, you can keep your models simple and let Wagtail's built-in functionality do the work. - -Now that we have a basic idea of how our content is defined, lets look at relationships between pieces of content. - - -Introduction to Trees -~~~~~~~~~~~~~~~~~~~~~ - -If you're unfamiliar with trees as an abstract data type, you might want to `review the concepts involved. `_ - -As a web developer, though, you probably already have a good understanding of trees as filesystem directories or paths. Wagtail pages can create the same structure, as each page in the tree has its own URL path, like so:: - - / - people/ - nien-nunb/ - laura-roslin/ - events/ - captain-picard-day/ - winter-wrap-up/ - -The Wagtail admin interface uses the tree to organize content for editing, letting you navigate up and down levels in the tree through its Explorer menu. This method of organization is a good place to start in thinking about your own Wagtail models. - - -Nodes and Leaves ----------------- - -It might be handy to think of the ``Page``-derived models you want to create as being one of two node types: parents and leaves. Wagtail isn't prescriptive in this approach, but it's a good place to start if you're not experienced in structuring your own content types. - - -Nodes -````` -Parent nodes on the Wagtail tree probably want to organize and display a browse-able index of their descendants. A blog, for instance, needs a way to show a list of individual posts. - -A Parent node could provide its own function returning its descendant objects. - -.. code-block:: python - - class EventPageIndex(Page): - # ... - def events(self): - # Get list of live event pages that are descendants of this page - events = EventPage.objects.live().descendant_of(self) - - # Filter events list to get ones that are either - # running now or start in the future - events = events.filter(date_from__gte=date.today()) - - # Order by date - events = events.order_by('date_from') - - return events - -This example makes sure to limit the returned objects to pieces of content which make sense, specifically ones which have been published through Wagtail's admin interface (``live()``) and are children of this node (``descendant_of(self)``). By setting a ``subpage_types`` class property in your model, you can specify which models are allowed to be set as children, but Wagtail will allow any ``Page``-derived model by default. Regardless, it's smart for a parent model to provide an index filtered to make sense. - - -Leaves -`````` -Leaves are the pieces of content itself, a page which is consumable, and might just consist of a bunch of properties. A blog page leaf might have some body text and an image. A person page leaf might have a photo, a name, and an address. - -It might be helpful for a leaf to provide a way to back up along the tree to a parent, such as in the case of breadcrumbs navigation. The tree might also be deep enough that a leaf's parent won't be included in general site navigation. - -The model for the leaf could provide a function that traverses the tree in the opposite direction and returns an appropriate ancestor: - -.. code-block:: python - - class EventPage(Page): - # ... - def event_index(self): - # Find closest ancestor which is an event index - return self.get_ancestors().type(EventIndexPage).last() - -If defined, ``subpage_types`` will also limit the parent models allowed to contain a leaf. If not, Wagtail will allow any combination of parents and leafs to be associated in the Wagtail tree. Like with index pages, it's a good idea to make sure that the index is actually of the expected model to contain the leaf. - - -Other Relationships -``````````````````` -Your ``Page``-derived models might have other interrelationships which extend the basic Wagtail tree or depart from it entirely. You could provide functions to navigate between siblings, such as a "Next Post" link on a blog page (``post->post->post``). It might make sense for subtrees to interrelate, such as in a discussion forum (``forum->post->replies``) Skipping across the hierarchy might make sense, too, as all objects of a certain model class might interrelate regardless of their ancestors (``events = EventPage.objects.all``). It's largely up to the models to define their interrelations, the possibilities are really endless. - - -.. _anatomy_of_a_wagtail_request: - -Anatomy of a Wagtail Request -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -For going beyond the basics of model definition and interrelation, it might help to know how Wagtail handles requests and constructs responses. In short, it goes something like: - - #. Django gets a request and routes through Wagtail's URL dispatcher definitions - #. Wagtail checks the hostname of the request to determine which ``Site`` record will handle this request. - #. Starting from the root page of that site, Wagtail traverses the page tree, calling the ``route()`` method and letting each page model decide whether it will handle the request itself or pass it on to a child page. - #. The page responsible for handling the request returns a ``RouteResult`` object from ``route()``, which identifies the page along with any additional args/kwargs to be passed to ``serve()``. - #. Wagtail calls ``serve()``, which constructs a context using ``get_context()`` - #. ``serve()`` finds a template to pass it to using ``get_template()`` - #. A response object is returned by ``serve()`` and Django responds to the requester. - -You can apply custom behavior to this process by overriding ``Page`` class methods such as ``route()`` and ``serve()`` in your own models. For examples, see :ref:`model_recipes`. - - -Page Properties and Methods Reference -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -In addition to the model fields provided, ``Page`` has many properties and methods that you may wish to reference, use, or override in creating your own models. Those listed here are relatively straightforward to use, but consult the Wagtail source code for a full view of what's possible. - -.. automodule:: wagtail.wagtailcore.models -.. autoclass:: Page - - .. autoattribute:: specific - - .. autoattribute:: specific_class - - .. autoattribute:: url - - .. autoattribute:: full_url - - .. automethod:: relative_url - - .. automethod:: is_navigable - - .. automethod:: route - - .. automethod:: serve - - .. automethod:: get_context - - .. automethod:: get_template - - .. autoattribute:: preview_modes - - .. automethod:: serve_preview - - .. automethod:: get_ancestors - - .. automethod:: get_descendants - - .. automethod:: get_siblings - - .. automethod:: search - - -Page Queryset Reference -~~~~~~~~~~~~~~~~~~~~~~~ - -All models that inherit from ``Page`` are given some extra Queryset methods accessible from their ``.objects`` attribute. - -Examples: - - - Selecting only live pages - - .. code-block:: python - - live_pages = Page.objects.live() - - - Selecting published EventPages that are descendants of events_index - - .. code-block:: python - - events = EventPage.objects.live().descendant_of(events_index) - - - Getting a list of menu items - - .. code-block:: python - - # This gets a queryset of live children of the homepage with ``show_in_menus`` set - menu_items = homepage.get_children().live().in_menu() - - -.. automodule:: wagtail.wagtailcore.query -.. autoclass:: PageQuerySet - - .. automethod:: live - - Example: - - .. code-block:: python - - published_pages = Page.objects.live() - - .. automethod:: not_live - - Example: - - .. code-block:: python - - unpublished_pages = Page.objects.not_live() - - .. automethod:: in_menu - - Example: - - .. code-block:: python - - # Build a menu from live pages that are children of the homepage - menu_items = homepage.get_children().live().in_menu() - - - .. note:: - - To put your page in menus, set the show_in_menus flag to true: - - .. code-block:: python - - # Add 'my_page' to the menu - my_page.show_in_menus = True - - .. automethod:: page - - Example: - - .. code-block:: python - - # Append an extra page to a queryset - new_queryset = old_queryset | Page.objects.page(page_to_add) - - .. automethod:: not_page - - Example: - - .. code-block:: python - - # Remove a page from a queryset - new_queryset = old_queryset & Page.objects.not_page(page_to_remove) - - .. automethod:: descendant_of - - Example: - - .. code-block:: python - - # Get EventPages that are under the special_events Page - special_events = EventPage.objects.descendant_of(special_events_index) - - # Alternative way - special_events = special_events_index.get_descendants() - - .. automethod:: not_descendant_of - - Example: - - .. code-block:: python - - # Get EventPages that are not under the archived_events Page - non_archived_events = EventPage.objects.not_descendant_of(archived_events_index) - - .. automethod:: child_of - - Example: - - .. code-block:: python - - # Get a list of sections - sections = Page.objects.child_of(homepage) - - # Alternative way - sections = homepage.get_children() - - .. automethod:: ancestor_of - - Example: - - .. code-block:: python - - # Get the current section - current_section = Page.objects.ancestor_of(current_page).child_of(homepage).first() - - # Alternative way - current_section = current_page.get_ancestors().child_of(homepage).first() - - .. automethod:: not_ancestor_of - - Example: - - .. code-block:: python - - # Get the other sections - other_sections = Page.objects.not_ancestor_of(current_page).child_of(homepage) - - .. automethod:: sibling_of - - Example: - - .. code-block:: python - - # Get list of siblings - siblings = Page.objects.sibling_of(current_page) - - # Alternative way - siblings = current_page.get_siblings() - - .. automethod:: public - - See: :ref:`private_pages` - - .. note:: - - This doesn't filter out unpublished pages. If you want to only have published public pages, use ``.live().public()`` - - Example: - - .. code-block:: python - - # Find all the pages that are viewable by the public - all_pages = Page.objects.live().public() - - .. automethod:: search - - See: :ref:`wagtailsearch_for_python_developers` - - Example: - - .. code-block:: python - - # Search future events - results = EventPage.objects.live().filter(date__gt=timezone.now()).search("Hello") - - -.. _wagtail_site_admin: - -Site -~~~~ - -Django's built-in admin interface provides the way to map a "site" (hostname or domain) to any node in the wagtail tree, using that node as the site's root. - -Access this by going to ``/django-admin/`` and then "Home › Wagtailcore › Sites." To try out a development site, add a single site with the hostname ``localhost`` at port ``8000`` and map it to one of the pieces of content you have created. - -Wagtail's developers plan to move the site settings into the Wagtail admin interface. - - -.. _redirects: - -Redirects -~~~~~~~~~ - -Wagtail provides a simple interface for creating arbitrary redirects to and from any URL. - -.. image:: ../images/screen_wagtail_redirects.png diff --git a/docs/building_your_site/index.rst b/docs/building_your_site/index.rst deleted file mode 100644 index da5cf4f2d..000000000 --- a/docs/building_your_site/index.rst +++ /dev/null @@ -1,11 +0,0 @@ -Building your site -================== - -.. note:: - This documentation is currently incomplete. - -.. toctree:: - :maxdepth: 3 - - djangodevelopers - frontenddevelopers diff --git a/docs/conf.py b/docs/conf.py index e0931da3b..64f4ab934 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -70,9 +70,9 @@ copyright = u'2014, Torchbox' # built documents. # # The short X.Y version. -version = '0.4' +version = '0.5' # The full version, including alpha/beta/rc tags. -release = '0.4' +release = '0.5' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/docs/frontend_cache_purging.rst b/docs/contrib_components/frontend_cache_purging.rst similarity index 99% rename from docs/frontend_cache_purging.rst rename to docs/contrib_components/frontend_cache_purging.rst index 5f9f12ab3..7ae74a36f 100644 --- a/docs/frontend_cache_purging.rst +++ b/docs/contrib_components/frontend_cache_purging.rst @@ -42,8 +42,8 @@ Finally, make sure you have configured your frontend cache to accept PURGE reque - `Squid `_ -Advanced useage -~~~~~~~~~~~~~~~ +Advanced usage +~~~~~~~~~~~~~~ Purging more than one URL per page ---------------------------------- diff --git a/docs/contrib_components/index.rst b/docs/contrib_components/index.rst new file mode 100644 index 000000000..4b508330d --- /dev/null +++ b/docs/contrib_components/index.rst @@ -0,0 +1,11 @@ +Contrib components +================== + + +.. toctree:: + :maxdepth: 2 + + static_site_generation + sitemap_generation + frontend_cache_purging + diff --git a/docs/sitemap_generation.rst b/docs/contrib_components/sitemap_generation.rst similarity index 100% rename from docs/sitemap_generation.rst rename to docs/contrib_components/sitemap_generation.rst diff --git a/docs/static_site_generation.rst b/docs/contrib_components/static_site_generation.rst similarity index 100% rename from docs/static_site_generation.rst rename to docs/contrib_components/static_site_generation.rst diff --git a/docs/form_builder.rst b/docs/core_components/form_builder.rst similarity index 100% rename from docs/form_builder.rst rename to docs/core_components/form_builder.rst diff --git a/docs/core_components/images/feature_detection.rst b/docs/core_components/images/feature_detection.rst new file mode 100644 index 000000000..0b3d03873 --- /dev/null +++ b/docs/core_components/images/feature_detection.rst @@ -0,0 +1,88 @@ +.. _image_feature_detection: + +================= +Feature Detection +================= + +Wagtail has the ability to automatically detect faces and features inside your images and crop the images to those features. + +Feature detection uses OpenCV to detect faces/features in an image when the image is uploaded. The detected features stored internally as a focal point in the ``focal_point_{x, y, width, height}`` fields on the ``Image`` model. These fields are used by the ``fill`` image filter when an image is rendered in a template to crop the image. + + +Setup +===== + +Feature detection requires OpenCV which can be a bit tricky to install as it's not currently pip-installable. + + +Installing OpenCV on Debian/Ubuntu +---------------------------------- + +Debian and ubuntu provide an apt-get package called ``python-opencv``: + + .. code-block:: bash + + sudo apt-get install python-opencv python-numpy + +This will install PyOpenCV into your site packages. If you are using a virtual environment, you need to make sure site packages are enabled or Wagtail will not be able to import PyOpenCV. + + +Enabling site packages in the virtual environment +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +If you are not using a virtual envionment, you can skip this step. + +Enabling site packages is different depending on whether you are using pyvenv (Python 3.3+ only) or virtualenv to manage your virtual environment. + + +pyvenv +`````` + +Go into your pyvenv directory and open the ``pyvenv.cfg`` file then set ``include-system-site-packages`` to ``true``. + + +virtualenv +`````````` + +Go into your virtualenv directory and delete a file called ``lib/python-x.x/no-global-site-packages.txt``. + + +Testing the OpenCV installation +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +You can test that OpenCV can be seen by Wagtail by opening up a python shell (with your virtual environment active) and typing: + + .. code-block:: python + + import cv + +If you don't see an ``ImportError``, it worked. (If you see the error ``libdc1394 error: Failed to initialize libdc1394``, this is harmless and can be ignored.) + + +Switching on feature detection in Wagtail +----------------------------------------- + +Once OpenCV is installed, you need to set the ``WAGTAILIMAGES_FEATURE_DETECTION_ENABLED`` setting to ``True``: + + .. code-block:: python + + # settings.py + + WAGTAILIMAGES_FEATURE_DETECTION_ENABLED = True + + +Manually running feature detection +---------------------------------- + +Feature detection runs when new images are uploaded in to Wagtail. If you already have images in your Wagtail site and would like to run feature detection on them, you will have to run it manually. + +You can manually run feature detection on all images by running the following code in the python shell: + + .. code-block:: python + + from wagtail.wagtailimages.models import Image + + for image in Image.objects.all(): + if image.focal_point is None: + image.focal_point = image.get_suggested_focal_point() + image.save() diff --git a/docs/core_components/images/index.rst b/docs/core_components/images/index.rst new file mode 100644 index 000000000..fcae2d837 --- /dev/null +++ b/docs/core_components/images/index.rst @@ -0,0 +1,9 @@ +Images +====== + +.. toctree:: + :maxdepth: 2 + + using_images_outside_wagtail + feature_detection + diff --git a/docs/core_components/images/using_images_outside_wagtail.rst b/docs/core_components/images/using_images_outside_wagtail.rst new file mode 100644 index 000000000..d3b63126b --- /dev/null +++ b/docs/core_components/images/using_images_outside_wagtail.rst @@ -0,0 +1,82 @@ +.. _using_images_outside_wagtail: + +============================ +Using images outside Wagtail +============================ + +Wagtail provides a way for you to generate external URLs for images in your image library which you can use to display your images on external sites. + + +Setup +===== + +Add an entry in your URLs configuration for ``wagtail.wagtailimages.urls``: + + .. code-block:: python + + from wagtail.wagtailimages import urls as wagtailimages_urls + + + urlpatterns = patterns('', + ... + + url(r'^images/', include(wagtailimages_urls)), + + ... + ) + + +Generating URLs for images +========================== + +Once the above setup is done, a button should appear under the image preview on the image edit page. Clicking this button will take you to an interface where you can specify the size you want the image to be, and it will generate a URL and a preview of what the image is going to look like. + +The filter box lets you choose how you would like the image to be resized: + + +.. glossary:: + ``Original`` + + Leaves the image at its original size - no resizing is performed. + + ``Resize to max`` + + Fit **within** the given dimensions. + + The longest edge will be reduced to the equivalent dimension size defined. e.g A portrait image of width 1000, height 2000, treated with the ``max`` dimensions ``1000x500`` (landscape) would result in the image shrunk so the *height* was 500 pixels and the width 250. + + ``Resize to min`` + + **Cover** the given dimensions. + + This may result in an image slightly **larger** than the dimensions you specify. e.g A square image of width 2000, height 2000, treated with the ``min`` dimensions ``500x200`` (landscape) would have it's height and width changed to 500, i.e matching the width required, but greater than the height. + + ``Resize to width`` + + Reduces the width of the image to the dimension specified. + + ``Resize to height`` + + Resize the height of the image to the dimension specified.. + + ``Resize to fill`` + + Resize and **crop** to fill the **exact** dimensions. + + This can be particularly useful for websites requiring square thumbnails of arbitrary images. For example, a landscape image of width 2000, height 1000, treated with ``fill`` dimensions ``200x200`` would have its height reduced to 200, then its width (ordinarily 400) cropped to 200. + + +Using the URLs on your website or blog +====================================== + +Once you have generated a URL, you can put it straight into the ``src`` attribute of an ```` tag: + + .. code-block:: html + + + + +Performance +=========== + +Currently, Wagtail will regenerate the image every time it is requested. For high volume sites, it is recommended to use a frontend cache to reduce load on the backend servers. diff --git a/docs/core_components/index.rst b/docs/core_components/index.rst new file mode 100644 index 000000000..a28ddf1b7 --- /dev/null +++ b/docs/core_components/index.rst @@ -0,0 +1,13 @@ +Core components +=============== + +.. toctree:: + :maxdepth: 2 + + sites + pages/index + images/index + snippets + search/index + form_builder + diff --git a/docs/private_pages.rst b/docs/core_components/pages/advanced_topics/private_pages.rst similarity index 100% rename from docs/private_pages.rst rename to docs/core_components/pages/advanced_topics/private_pages.rst diff --git a/docs/core_components/pages/advanced_topics/queryset_methods.rst b/docs/core_components/pages/advanced_topics/queryset_methods.rst new file mode 100644 index 000000000..2c221b883 --- /dev/null +++ b/docs/core_components/pages/advanced_topics/queryset_methods.rst @@ -0,0 +1,180 @@ +===================== +Page Queryset Methods +===================== + +All models that inherit from ``Page`` are given some extra Queryset methods accessible from their ``.objects`` attribute. + + +Examples +======== + + - Selecting only live pages + + .. code-block:: python + + live_pages = Page.objects.live() + + - Selecting published EventPages that are descendants of events_index + + .. code-block:: python + + events = EventPage.objects.live().descendant_of(events_index) + + - Getting a list of menu items + + .. code-block:: python + + # This gets a queryset of live children of the homepage with ``show_in_menus`` set + menu_items = homepage.get_children().live().in_menu() + + +Reference +========= + +.. automodule:: wagtail.wagtailcore.query +.. autoclass:: PageQuerySet + + .. automethod:: live + + Example: + + .. code-block:: python + + published_pages = Page.objects.live() + + .. automethod:: not_live + + Example: + + .. code-block:: python + + unpublished_pages = Page.objects.not_live() + + .. automethod:: in_menu + + Example: + + .. code-block:: python + + # Build a menu from live pages that are children of the homepage + menu_items = homepage.get_children().live().in_menu() + + + .. note:: + + To put your page in menus, set the show_in_menus flag to true: + + .. code-block:: python + + # Add 'my_page' to the menu + my_page.show_in_menus = True + + .. automethod:: page + + Example: + + .. code-block:: python + + # Append an extra page to a queryset + new_queryset = old_queryset | Page.objects.page(page_to_add) + + .. automethod:: not_page + + Example: + + .. code-block:: python + + # Remove a page from a queryset + new_queryset = old_queryset & Page.objects.not_page(page_to_remove) + + .. automethod:: descendant_of + + Example: + + .. code-block:: python + + # Get EventPages that are under the special_events Page + special_events = EventPage.objects.descendant_of(special_events_index) + + # Alternative way + special_events = special_events_index.get_descendants() + + .. automethod:: not_descendant_of + + Example: + + .. code-block:: python + + # Get EventPages that are not under the archived_events Page + non_archived_events = EventPage.objects.not_descendant_of(archived_events_index) + + .. automethod:: child_of + + Example: + + .. code-block:: python + + # Get a list of sections + sections = Page.objects.child_of(homepage) + + # Alternative way + sections = homepage.get_children() + + .. automethod:: ancestor_of + + Example: + + .. code-block:: python + + # Get the current section + current_section = Page.objects.ancestor_of(current_page).child_of(homepage).first() + + # Alternative way + current_section = current_page.get_ancestors().child_of(homepage).first() + + .. automethod:: not_ancestor_of + + Example: + + .. code-block:: python + + # Get the other sections + other_sections = Page.objects.not_ancestor_of(current_page).child_of(homepage) + + .. automethod:: sibling_of + + Example: + + .. code-block:: python + + # Get list of siblings + siblings = Page.objects.sibling_of(current_page) + + # Alternative way + siblings = current_page.get_siblings() + + .. automethod:: public + + See: :ref:`private_pages` + + .. note:: + + This doesn't filter out unpublished pages. If you want to only have published public pages, use ``.live().public()`` + + Example: + + .. code-block:: python + + # Find all the pages that are viewable by the public + all_pages = Page.objects.live().public() + + .. automethod:: search + + See: :ref:`wagtailsearch_for_python_developers` + + Example: + + .. code-block:: python + + # Search future events + results = EventPage.objects.live().filter(date__gt=timezone.now()).search("Hello") diff --git a/docs/core_components/pages/advanced_topics/routable_page_mixin.rst b/docs/core_components/pages/advanced_topics/routable_page_mixin.rst new file mode 100644 index 000000000..36ca024c3 --- /dev/null +++ b/docs/core_components/pages/advanced_topics/routable_page_mixin.rst @@ -0,0 +1,119 @@ +.. _routable_page_mixin: + +==================================== +Embedding URL configuration in Pages +==================================== + +.. versionadded:: 0.5 + +The ``RoutablePageMixin`` mixin provides a convenient way for a page to respond on multiple sub-URLs with different views. For example, a blog section on a site might provide several different types of index page at URLs like ``/blog/2013/06/``, ``/blog/authors/bob/``, ``/blog/tagged/python/``, all served by the same ``BlogIndex`` page. + +A ``Page`` using ``RoutablePageMixin`` exists within the page tree like any other page, but URL paths underneath it are checked against a list of patterns, using Django's urlconf scheme. If none of the patterns match, control is passed to subpages as usual (or failing that, a 404 error is thrown). + + +The basics +========== + +To use ``RoutablePageMixin``, you need to make your class inherit from both :class:`wagtail.contrib.wagtailroutablepage.models.RoutablePageMixin` and :class:`wagtail.wagtailcore.models.Page`, and configure the ``subpage_urls`` attribute with your URL configuration. + +Here's an example of an ``EventPage`` with three views: + +.. code-block:: python + + from django.conf.urls import url + + from wagtail.contrib.wagtailroutablepage.models import RoutablePageMixin + from wagtail.wagtailcore.models import Page + + + class EventPage(RoutablePageMixin, Page): + subpage_urls = ( + url(r'^$', 'current_events', name='current_events'), + url(r'^past/$', 'past_events', name='past_events'), + url(r'^year/(\d+)/$', 'events_for_year', name='events_for_year'), + ) + + def current_events(self, request): + """ + View function for the current events page + """ + ... + + def past_events(self, request): + """ + View function for the past events page + """ + ... + + def events_for_year(self, request): + """ + View function for the events for year page + """ + ... + + +The ``RoutablePageMixin`` class +=============================== + +.. automodule:: wagtail.contrib.wagtailroutablepage.models +.. autoclass:: RoutablePageMixin + + .. autoattribute:: subpage_urls + + Example: + + .. code-block:: python + + from django.conf.urls import url + + from wagtail.wagtailcore.models import Page + + class MyPage(RoutablePageMixin, Page): + subpage_urls = ( + url(r'^$', 'serve', name='main'), + url(r'^archive/$', 'archive', name='archive'), + ) + + def serve(self, request): + ... + + def archive(self, request): + ... + + .. automethod:: resolve_subpage + + Example: + + .. code-block:: python + + view, args, kwargs = page.resolve_subpage('/past/') + response = view(request, *args, **kwargs) + + .. automethod:: reverse_subpage + + Example: + + .. code-block:: python + + url = page.url + page.reverse_subpage('events_for_year', args=('2014', )) + + + .. _routablepageurl_template_tag: + +The ``routablepageurl`` template tag +==================================== + +.. versionadded:: 0.6 + +.. currentmodule:: wagtail.contrib.wagtailroutablepage.templatetags.wagtailroutablepage_tags +.. autofunction:: routablepageurl + + Example: + + .. code-block:: html+django + + {% load wagtailroutablepage_tags %} + + {% routablepageurl self "feed" %} + {% routablepageurl self "archive" 2014 08 14 %} + {% routablepageurl self "food" foo="bar" baz="quux" %} diff --git a/docs/core_components/pages/creating_pages.rst b/docs/core_components/pages/creating_pages.rst new file mode 100644 index 000000000..e6fb9a14b --- /dev/null +++ b/docs/core_components/pages/creating_pages.rst @@ -0,0 +1,149 @@ +==================== +Creating page models +==================== + +Wagtail provides a ``Page`` class to represent types of page (a.k.a Content types). Developers should subclass ``Page`` for their own page models. + +``Page`` uses Django's model interface, so you can include any field type and field options that Django allows. Wagtail provides some field types of its own which simplify data entry in the Wagtail admin interface. Wagtail also wraps Django's field types and widgets with its own concept of "Edit Handlers" and "Panels". These further improve the data entry experience. + + +An example Wagtail Page Model +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This example represents a typical blog post: + +.. code-block:: python + + from django.db import models + + from wagtail.wagtailcore.models import Page + from wagtail.wagtailcore.fields import RichTextField + from wagtail.wagtailadmin.edit_handlers import FieldPanel + from wagtail.wagtailimages.edit_handlers import ImageChooserPanel + from wagtail.wagtailimages.models import Image + + class BlogPage(Page): + body = RichTextField() + date = models.DateField("Post date") + feed_image = models.ForeignKey( + 'wagtailimages.Image', + null=True, + blank=True, + on_delete=models.SET_NULL, + related_name='+' + ) + + + + BlogPage.content_panels = [ + FieldPanel('title', classname="full title"), + FieldPanel('date'), + FieldPanel('body', classname="full"), + ] + + BlogPage.promote_panels = [ + FieldPanel('slug'), + FieldPanel('seo_title'), + FieldPanel('show_in_menus'), + FieldPanel('search_description'), + ImageChooserPanel('feed_image'), + ] + +.. tip:: + To keep track of ``Page`` models and avoid class name clashes, it can be helpful to suffix model class names with "Page" e.g BlogPage, ListingIndexPage. + +In the example above the ``BlogPage`` class defines three properties: ``body``, ``date``, and ``feed_image``. These are a mix of basic Django models (``DateField``), Wagtail fields (``RichTextField``), and a pointer to a Wagtail model (``Image``). + +Below that the ``content_panels`` and ``promote_panels`` lists define the capabilities and layout of the page editing interface in the Wagtail admin. The lists are filled with "panels" and "choosers", which will provide a fine-grain interface for inputting the model's content. The ``ImageChooserPanel``, for instance, lets one browse the image library, upload new images and input image metadata. The ``RichTextField`` is the basic field for creating web-ready website rich text, including text formatting and embedded media like images and video. The Wagtail admin offers other choices for fields, Panels, and Choosers, with the option of creating your own to precisely fit your content without workarounds or other compromises. + +Your models may be even more complex, with methods overriding the built-in functionality of the ``Page`` to achieve webdev magic. Or, you can keep your models simple and let Wagtail's built-in functionality do the work. + + +``Page`` Class Reference +~~~~~~~~~~~~~~~~~~~~~~~~ + +Default fields +-------------- + +Wagtail provides some fields for the ``Page`` class by default, which will be common to all your pages. You don't need to add these fields to your own page models however you do need to allocate them to ``content_panels``, ``promote_panels`` or ``settings_panels``. See above example and for further information on the panels see :ref:`editing-api`. + + ``title`` (string, required) + Human-readable title of the page - what you'd probably use as your ``

`` tag. + + ``slug`` (string, required) + Machine-readable URL component for this page. The name of the page as it will appear in URLs e.g ``http://domain.com/blog/[my-slug]/`` + + ``seo_title`` (string) + Alternate SEO-crafted title, mainly for use in the page ```` tag. + + ``search_description`` (string) + SEO-crafted description of the content, used for internal search indexing, suitable for your page's ``<meta name="description">`` tag. + + ``show_in_menus`` (boolean) + Toggles whether the page should be considered for inclusion in any site-wide menus you create. + + ``go_live_at`` (datetime) + A datetime on which the page should be automatically made published (made publicly accessible) + + ``expire_at`` (datetime) + A datetime on which the page should be unpublished, rendering it inaccessible to the public. + + +Page Attributes, Properties and Methods Reference +------------------------------------------------- + +In addition to the model fields provided, ``Page`` has many properties and methods that you may wish to reference, use, or override in creating your own models. Those listed here are relatively straightforward to use, but consult the Wagtail source code for a full view of what's possible. + +.. automodule:: wagtail.wagtailcore.models +.. autoclass:: Page + + .. autoattribute:: specific + + .. autoattribute:: specific_class + + .. autoattribute:: url + + .. autoattribute:: full_url + + .. automethod:: relative_url + + .. automethod:: is_navigable + + .. automethod:: route + + .. automethod:: serve + + .. automethod:: get_context + + .. automethod:: get_template + + .. autoattribute:: preview_modes + + .. automethod:: serve_preview + + .. automethod:: get_ancestors + + .. automethod:: get_descendants + + .. automethod:: get_siblings + + .. automethod:: search + + .. attribute:: search_fields + + A list of fields to be indexed by the search engine. See Search docs :ref:`wagtailsearch_for_python_developers` + + .. attribute:: subpage_types + + A whitelist of page models which can be created as children of this page type e.g a ``BlogIndex`` page might allow ``BlogPage``, but not ``JobPage`` e.g + + .. code-block:: python + + class BlogIndex(Page): + subpage_types = ['mysite.BlogPage', 'mysite.BlogArchivePage'] + + .. attribute:: password_required_template + + Defines which template file should be used to render the login form for Protected pages using this model. This overrides the default, defined using ``PASSWORD_REQUIRED_TEMPLATE`` in your settings. See :ref:`private_pages` + + diff --git a/docs/editing_api.rst b/docs/core_components/pages/editing_api.rst similarity index 99% rename from docs/editing_api.rst rename to docs/core_components/pages/editing_api.rst index 4d346a815..f1025cbcb 100644 --- a/docs/editing_api.rst +++ b/docs/core_components/pages/editing_api.rst @@ -1,3 +1,4 @@ +.. _editing-api: Defining models with the Editing API ==================================== diff --git a/docs/core_components/pages/index.rst b/docs/core_components/pages/index.rst new file mode 100644 index 000000000..70d20d116 --- /dev/null +++ b/docs/core_components/pages/index.rst @@ -0,0 +1,24 @@ +Pages +===== + +.. note:: + This documentation is currently being written. + +Wagtail requires a little careful setup to define the types of content that you want to present through your website. The basic unit of content in Wagtail is the ``Page``, and all of your page-level content will inherit basic webpage-related properties from it. But for the most part, you will be defining content yourself, through the construction of Django models using Wagtail's ``Page`` as a base. + +Wagtail organizes content created from your models in a tree, which can have any structure and combination of model objects in it. Wagtail doesn't prescribe ways to organize and interrelate your content, but here we've sketched out some strategies for organizing your models. + +The presentation of your content, the actual webpages, includes the normal use of the Django template system. We'll cover additional functionality that Wagtail provides at the template level later on. + + +.. toctree:: + :maxdepth: 2 + + theory + creating_pages + writing_templates + model_recipes + editing_api + advanced_topics/queryset_methods + advanced_topics/private_pages + advanced_topics/routable_page_mixin diff --git a/docs/model_recipes.rst b/docs/core_components/pages/model_recipes.rst similarity index 99% rename from docs/model_recipes.rst rename to docs/core_components/pages/model_recipes.rst index b8f006f99..4b0574ba2 100644 --- a/docs/model_recipes.rst +++ b/docs/core_components/pages/model_recipes.rst @@ -1,8 +1,8 @@ .. _model_recipes: -Model Recipes -============= +Recipes +======= Overriding the serve() Method ----------------------------- diff --git a/docs/core_components/pages/theory.rst b/docs/core_components/pages/theory.rst new file mode 100644 index 000000000..bcea079bb --- /dev/null +++ b/docs/core_components/pages/theory.rst @@ -0,0 +1,97 @@ +.. _pages-theory: + +====== +Theory +====== + + +Introduction to Trees +~~~~~~~~~~~~~~~~~~~~~ + +If you're unfamiliar with trees as an abstract data type, you might want to `review the concepts involved. <http://en.wikipedia.org/wiki/Tree_(data_structure)>`_ + +As a web developer, though, you probably already have a good understanding of trees as filesystem directories or paths. Wagtail pages can create the same structure, as each page in the tree has its own URL path, like so:: + + / + people/ + nien-nunb/ + laura-roslin/ + events/ + captain-picard-day/ + winter-wrap-up/ + +The Wagtail admin interface uses the tree to organize content for editing, letting you navigate up and down levels in the tree through its Explorer menu. This method of organization is a good place to start in thinking about your own Wagtail models. + + +Nodes and Leaves +---------------- + +It might be handy to think of the ``Page``-derived models you want to create as being one of two node types: parents and leaves. Wagtail isn't prescriptive in this approach, but it's a good place to start if you're not experienced in structuring your own content types. + + +Nodes +````` +Parent nodes on the Wagtail tree probably want to organize and display a browse-able index of their descendants. A blog, for instance, needs a way to show a list of individual posts. + +A Parent node could provide its own function returning its descendant objects. + +.. code-block:: python + + class EventPageIndex(Page): + # ... + def events(self): + # Get list of live event pages that are descendants of this page + events = EventPage.objects.live().descendant_of(self) + + # Filter events list to get ones that are either + # running now or start in the future + events = events.filter(date_from__gte=date.today()) + + # Order by date + events = events.order_by('date_from') + + return events + +This example makes sure to limit the returned objects to pieces of content which make sense, specifically ones which have been published through Wagtail's admin interface (``live()``) and are children of this node (``descendant_of(self)``). By setting a ``subpage_types`` class property in your model, you can specify which models are allowed to be set as children, but Wagtail will allow any ``Page``-derived model by default. Regardless, it's smart for a parent model to provide an index filtered to make sense. + + +Leaves +`````` +Leaves are the pieces of content itself, a page which is consumable, and might just consist of a bunch of properties. A blog page leaf might have some body text and an image. A person page leaf might have a photo, a name, and an address. + +It might be helpful for a leaf to provide a way to back up along the tree to a parent, such as in the case of breadcrumbs navigation. The tree might also be deep enough that a leaf's parent won't be included in general site navigation. + +The model for the leaf could provide a function that traverses the tree in the opposite direction and returns an appropriate ancestor: + +.. code-block:: python + + class EventPage(Page): + # ... + def event_index(self): + # Find closest ancestor which is an event index + return self.get_ancestors().type(EventIndexPage).last() + +If defined, ``subpage_types`` will also limit the parent models allowed to contain a leaf. If not, Wagtail will allow any combination of parents and leafs to be associated in the Wagtail tree. Like with index pages, it's a good idea to make sure that the index is actually of the expected model to contain the leaf. + + +Other Relationships +``````````````````` +Your ``Page``-derived models might have other interrelationships which extend the basic Wagtail tree or depart from it entirely. You could provide functions to navigate between siblings, such as a "Next Post" link on a blog page (``post->post->post``). It might make sense for subtrees to interrelate, such as in a discussion forum (``forum->post->replies``) Skipping across the hierarchy might make sense, too, as all objects of a certain model class might interrelate regardless of their ancestors (``events = EventPage.objects.all``). It's largely up to the models to define their interrelations, the possibilities are really endless. + + +.. _anatomy_of_a_wagtail_request: + +Anatomy of a Wagtail Request +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +For going beyond the basics of model definition and interrelation, it might help to know how Wagtail handles requests and constructs responses. In short, it goes something like: + + #. Django gets a request and routes through Wagtail's URL dispatcher definitions + #. Wagtail checks the hostname of the request to determine which ``Site`` record will handle this request. + #. Starting from the root page of that site, Wagtail traverses the page tree, calling the ``route()`` method and letting each page model decide whether it will handle the request itself or pass it on to a child page. + #. The page responsible for handling the request returns a ``RouteResult`` object from ``route()``, which identifies the page along with any additional args/kwargs to be passed to ``serve()``. + #. Wagtail calls ``serve()``, which constructs a context using ``get_context()`` + #. ``serve()`` finds a template to pass it to using ``get_template()`` + #. A response object is returned by ``serve()`` and Django responds to the requester. + +You can apply custom behavior to this process by overriding ``Page`` class methods such as ``route()`` and ``serve()`` in your own models. For examples, see :ref:`model_recipes`. diff --git a/docs/building_your_site/frontenddevelopers.rst b/docs/core_components/pages/writing_templates.rst similarity index 99% rename from docs/building_your_site/frontenddevelopers.rst rename to docs/core_components/pages/writing_templates.rst index a5120af19..9374cca32 100644 --- a/docs/building_your_site/frontenddevelopers.rst +++ b/docs/core_components/pages/writing_templates.rst @@ -181,6 +181,7 @@ The available resizing methods are: Leaves the image at its original size - no resizing is performed. + .. Note:: Wagtail does not allow deforming or stretching images. Image dimension ratios will always be kept. Wagtail also *does not support upscaling*. Small images forced to appear at larger sizes will "max out" at their their native dimensions. diff --git a/docs/search/backends.rst b/docs/core_components/search/backends.rst similarity index 100% rename from docs/search/backends.rst rename to docs/core_components/search/backends.rst diff --git a/docs/search/editors_picks.rst b/docs/core_components/search/editors_picks.rst similarity index 100% rename from docs/search/editors_picks.rst rename to docs/core_components/search/editors_picks.rst diff --git a/docs/search/for_python_developers.rst b/docs/core_components/search/for_python_developers.rst similarity index 98% rename from docs/search/for_python_developers.rst rename to docs/core_components/search/for_python_developers.rst index 67f732894..b99795e7b 100644 --- a/docs/search/for_python_developers.rst +++ b/docs/core_components/search/for_python_developers.rst @@ -36,6 +36,11 @@ Indexing extra fields The ``indexed_fields`` configuration format was replaced with ``search_fields`` +.. note:: + + Searching on extra fields with the database backend is not currently supported. + + Fields need to be explicitly added to the search configuration in order for you to be able to search/filter on them. You can add new fields to the search index by overriding the ``search_fields`` property and appending a list of extra ``SearchField``/``FilterField`` objects to it. diff --git a/docs/search/frontend_views.rst b/docs/core_components/search/frontend_views.rst similarity index 100% rename from docs/search/frontend_views.rst rename to docs/core_components/search/frontend_views.rst diff --git a/docs/search/index.rst b/docs/core_components/search/index.rst similarity index 100% rename from docs/search/index.rst rename to docs/core_components/search/index.rst diff --git a/docs/core_components/sites.rst b/docs/core_components/sites.rst new file mode 100644 index 000000000..89c490b65 --- /dev/null +++ b/docs/core_components/sites.rst @@ -0,0 +1,10 @@ +.. _wagtail_site_admin: + +Sites +===== + +Django's built-in admin interface provides the way to map a "site" (hostname or domain) to any node in the wagtail tree, using that node as the site's root. See :ref:`pages-theory`. + +Access this by going to ``/django-admin/`` and then "Home › Wagtailcore › Sites." To try out a development site, add a single site with the hostname ``localhost`` at port ``8000`` and map it to one of the pieces of content you have created. + +Wagtail's developers plan to move the site settings into the Wagtail admin interface. diff --git a/docs/snippets.rst b/docs/core_components/snippets.rst similarity index 69% rename from docs/snippets.rst rename to docs/core_components/snippets.rst index a40b57d94..8b2a2d557 100644 --- a/docs/snippets.rst +++ b/docs/core_components/snippets.rst @@ -92,26 +92,49 @@ Then in your own page templates, you can include your snippet template tag with: {% endblock %} + Binding Pages to Snippets ------------------------- -An alternate strategy for including snippets might involve explicitly binding a specific page object to a specific snippet object. Lets add another snippet class to see how that might work: +In the above example, the list of adverts is a fixed list, displayed as part of the template independently of the page content. This might be what you want for a common panel in a sidebar, say - but in other scenarios you may wish to refer to a snippet within page content. This can be done by defining a foreign key to the snippet model within your page model, and adding a ``SnippetChooserPanel`` to the page's ``content_panels`` definitions. For example, if you wanted to be able to specify an advert to appear on ``BookPage``: + +.. code-block:: python + + from wagtail.wagtailsnippets.edit_handlers import SnippetChooserPanel + # ... + class BookPage(Page): + advert = models.ForeignKey( + 'demo.Advert', + null=True, + blank=True, + on_delete=models.SET_NULL, + related_name='+' + ) + + BookPage.content_panels = [ + SnippetChooserPanel('advert', Advert), + # ... + ] + + +The snippet could then be accessed within your template as ``self.advert``. + +To attach multiple adverts to a page, the ``SnippetChooserPanel`` can be placed on an inline child object of ``BookPage``, rather than on ``BookPage`` itself. Here this child model is named ``BookPageAdvertPlacement`` (so called because there is one such object for each time that an advert is placed on a BookPage): + .. code-block:: python from django.db import models from wagtail.wagtailcore.models import Page - from wagtail.wagtailadmin.edit_handlers import PageChooserPanel - from wagtail.wagtailsnippets.models import register_snippet from wagtail.wagtailsnippets.edit_handlers import SnippetChooserPanel from modelcluster.fields import ParentalKey ... - class AdvertPlacement(models.Model): - page = ParentalKey('wagtailcore.Page', related_name='advert_placements') + class BookPageAdvertPlacement(Orderable, models.Model): + page = ParentalKey('demo.BookPage', related_name='advert_placements') advert = models.ForeignKey('demo.Advert', related_name='+') class Meta: @@ -119,25 +142,27 @@ An alternate strategy for including snippets might involve explicitly binding a verbose_name_plural = "Advert Placements" panels = [ - PageChooserPanel('page'), SnippetChooserPanel('advert', Advert), ] def __unicode__(self): return self.page.title + " -> " + self.advert.text - register_snippet(AdvertPlacement) + class BookPage(Page): + ... -The class ``AdvertPlacement`` has two properties, ``page`` and ``advert``, which point to other models. Wagtail provides a ``PageChooserPanel`` and ``SnippetChooserPanel`` to let us make painless selection of those properties in the Wagtail admin. Note also the ``Meta`` class, which you can stock with the ``verbose_name`` and ``verbose_name_plural`` properties to override the snippet labels in the Wagtail admin. The text representation of the class has also gotten fancy, using both properties to construct a compound label showing the relationship it forms between a page and an Advert. + BookPage.content_panels = [ + InlinePanel(BookPage, 'advert_placements', label="Adverts"), + # ... + ] -With this snippet in place, we can use the reverse ``related_name`` lookup label ``advert_placements`` to iterate over any placements within our template files. In the template for a ``Page``-derived model, we could include the following: + +These child objects are now accessible through the page's ``advert_placements`` property, and from there we can access the linked Advert snippet as ``advert``. In the template for ``BookPage``, we could include the following: .. code-block:: django - {% if self.advert_placements %} - {% for advert_placement in self.advert_placements.all %} - <p><a href="{{ advert_placement.advert.url }}">{{ advert_placement.advert.text }}</a></p> - {% endfor %} - {% endif %} + {% for advert_placement in self.advert_placements.all %} + <p><a href="{{ advert_placement.advert.url }}">{{ advert_placement.advert.text }}</a></p> + {% endfor %} diff --git a/docs/editor_manual/documents_images_snippets/documents.rst b/docs/editor_manual/documents_images_snippets/documents.rst index 8983e8b5f..21af7ab52 100644 --- a/docs/editor_manual/documents_images_snippets/documents.rst +++ b/docs/editor_manual/documents_images_snippets/documents.rst @@ -3,14 +3,14 @@ Documents Documents such as PDFs can be managed from the Documents interface, available in the left-hand menu. This interface allows you to add documents to and remove documents from the CMS. -.. image:: ../../images/screen29_documents_page.png +.. image:: ../../_static/images/screen29_documents_page.png * Add documents by clicking the *Add document* button in the top-right. * Search for documents in the CMS by entering your search term in the search bar. The results will be automatically updated as you type. * You can also filter the results by *Popular tags*. Click on a tag to update the search results listing. * Edit the details of a document by clicking the document title. -.. image:: ../../images/screen30_documents_edit_page.png +.. image:: ../../_static/images/screen30_documents_edit_page.png * When editing a document you can replace the file associated with that document record. This means you can update documents without having to update the pages on which they are placed. Changing the file will change it on all pages that use the document. * Add or remove tags using the Tags field. diff --git a/docs/editor_manual/documents_images_snippets/images.rst b/docs/editor_manual/documents_images_snippets/images.rst index 13cdf71a2..008a1f330 100644 --- a/docs/editor_manual/documents_images_snippets/images.rst +++ b/docs/editor_manual/documents_images_snippets/images.rst @@ -3,11 +3,11 @@ Images If you want to edit, add or remove images from the CMS outside of the individual pages you can do so from the Images interface. This is accessed from the left-hand menu. -.. image:: ../../images/screen31_images_page.png +.. image:: ../../_static/images/screen31_images_page.png * Clicking an image will allow you to edit the data associated with it. This includes the Alt text, the photographers credit, the medium of the subject matter and much more. **NOTE:** changing the alt text here will alter it for all occurrences of the image in carousels, but not in inline images, where the alt text can be set separately. -.. image:: ../../images/screen32_image_edit_page.png +.. image:: ../../_static/images/screen32_image_edit_page.png * When editing an image you can replace the file associated with that image record. This means you can update images without having to update the pages on which they are placed. Changing the file will change it on all pages that use the image. diff --git a/docs/editor_manual/editing_existing_pages.rst b/docs/editor_manual/editing_existing_pages.rst index b80e6cd89..566e90db6 100644 --- a/docs/editor_manual/editing_existing_pages.rst +++ b/docs/editor_manual/editing_existing_pages.rst @@ -6,7 +6,7 @@ There are two ways that you can access the edit screen of an existing page: * Clicking the title of the page in an `Explorer page <the_explorer_page.html>`_ or in `search results <using_search.html>`_. * Clicking the *Edit* link below the title in either of the situations above. -.. image:: ../images/screen12_edit_screen_overview.png +.. image:: ../_static/images/screen12_edit_screen_overview.png * When editing an existing page the title of the page being edited is displayed at the top of the page. * The current status of the page is displayed in the top-right. diff --git a/docs/editor_manual/finding_your_way_around/the_dashboard.rst b/docs/editor_manual/finding_your_way_around/the_dashboard.rst index dc16479d3..8fa832e89 100644 --- a/docs/editor_manual/finding_your_way_around/the_dashboard.rst +++ b/docs/editor_manual/finding_your_way_around/the_dashboard.rst @@ -11,7 +11,7 @@ The Dashboard provides information on: You can return to the Dashboard at any time by clicking the Wagtail log in the top-left of the screen. -.. image:: ../../images/screen02_dashboard_editor.png +.. image:: ../../_static/images/screen02_dashboard_editor.png - Clicking the logo returns you to your Dashboard. - Thes stats at the top of the page describe the total amount of content on the CMS (just for fun!). diff --git a/docs/editor_manual/finding_your_way_around/the_explorer_menu.rst b/docs/editor_manual/finding_your_way_around/the_explorer_menu.rst index 325b5b328..923d598a0 100644 --- a/docs/editor_manual/finding_your_way_around/the_explorer_menu.rst +++ b/docs/editor_manual/finding_your_way_around/the_explorer_menu.rst @@ -1,7 +1,7 @@ The Explorer menu ~~~~~~~~~~~~~~~~~ -.. image:: ../../images/screen03_explorer_menu.png +.. image:: ../../_static/images/screen03_explorer_menu.png * Click the Explorer button in the sidebar to open the site explorer. This allows you to navigate through the tree-structure of the site. * Clicking the name of a page will take you to the Explorer page for that section (see below). NOTE: The site explorer only displays pages which themselves have child pages. To see and edit the child pages you should click the name of the parent page in the site explorer. diff --git a/docs/editor_manual/finding_your_way_around/the_explorer_page.rst b/docs/editor_manual/finding_your_way_around/the_explorer_page.rst index c67b24c59..51a4aa2db 100644 --- a/docs/editor_manual/finding_your_way_around/the_explorer_page.rst +++ b/docs/editor_manual/finding_your_way_around/the_explorer_page.rst @@ -4,20 +4,20 @@ The Explorer page The Explorer page allows you to view the a page's children and perform actions on them. From here you can publish/unpublish pages, move pages to other sections, drill down further into the content tree, or reorder pages under the parent for the purposes of display in menus. -.. image:: ../../images/screen05_explorer_page.png +.. image:: ../../_static/images/screen05_explorer_page.png * The name of the section you are looking at is displayed below the breadcrumb (the row of page names beginning with the home icon). Each section is also itself a page (in this case the homepage). Clicking the title of the section takes you to the Edit screen for the section page. * As the heading suggests, below are the child pages of the section. Clicking the titles of each child page will take you to its Edit screen. -.. image:: ../../images/screen06_explorer_page_arrow.png +.. image:: ../../_static/images/screen06_explorer_page_arrow.png * Clicking the arrows will display a further level of child pages. -.. image:: ../../images/screen07_explorer_page_breadcrumb.png +.. image:: ../../_static/images/screen07_explorer_page_breadcrumb.png * As you drill down through the site the breadcrumb (the row of pages beginning with the home icon) will display the path you have taken. Clicking on the page titles in the breadcrumb will take you to the Explorer screen for that page. -.. image:: ../../images/screen08_add_page_button.png +.. image:: ../../_static/images/screen08_add_page_button.png * To add further child pages press the Add child page button below the parent page title. You can view the parent page on the live site by pressing the View live button. The Move button will take you to the Move page screen where you can reposition the page and all its child pages in the site structure. * Similar buttons are available for each child page. These are made visible on hover. @@ -25,7 +25,7 @@ The Explorer page allows you to view the a page's children and perform actions o Reordering pages ________________ -.. image:: ../../images/screen08.5_reorder_page_handles.png +.. image:: ../../_static/images/screen08.5_reorder_page_handles.png * Clicking the icon to the far left of the child pages table will enable the reordering handles. This allows you to reorder the way that content displays in the main menu of your website. * Reorder by dragging the pages by the handles on the far left (the icon made up of 8 dots). diff --git a/docs/editor_manual/finding_your_way_around/using_search.rst b/docs/editor_manual/finding_your_way_around/using_search.rst index 24a0fc4db..0cd001db8 100644 --- a/docs/editor_manual/finding_your_way_around/using_search.rst +++ b/docs/editor_manual/finding_your_way_around/using_search.rst @@ -1,7 +1,7 @@ Using search ~~~~~~~~~~~~ -.. image:: ../../images/screen04_search_screen.png +.. image:: ../../_static/images/screen04_search_screen.png * A very easy way to find the page that you want is to use the main search feature, accessible from the left-hand menu. * Simply type in part or all of the name of the page you are looking for, and the results below will automatically update as you type. diff --git a/docs/editor_manual/getting_started.rst b/docs/editor_manual/getting_started.rst index 64969aa0a..e935b039e 100644 --- a/docs/editor_manual/getting_started.rst +++ b/docs/editor_manual/getting_started.rst @@ -15,4 +15,4 @@ __________ * Access this by adding **/admin** onto the end of your root URL (e.g. www.example.com/admin). * Enter your username and password and click **Sign in**. -.. image:: ../images/screen01_login.png \ No newline at end of file +.. image:: ../_static/images/screen01_login.png \ No newline at end of file diff --git a/docs/editor_manual/new_pages/adding_multiple_items.rst b/docs/editor_manual/new_pages/adding_multiple_items.rst index 447574588..f173995dd 100644 --- a/docs/editor_manual/new_pages/adding_multiple_items.rst +++ b/docs/editor_manual/new_pages/adding_multiple_items.rst @@ -3,15 +3,15 @@ Adding multiple items A common feature of Wagtail is the ability to add more than one of a particular type of field or item. For example, you can add as many carousel items or related links as you wish. -.. image:: ../../images/screen24_multiple_items_closed.png +.. image:: ../../_static/images/screen24_multiple_items_closed.png * Whenever you see the white cross in the green circle illustrated here it means you can add multiple objects or items to a page. Clicking the icon will display the fields required for that piece of content. The image below demonstrates this with a *Related link* item. -.. image:: ../../images/screen25_multiple_items_open.png +.. image:: ../../_static/images/screen25_multiple_items_open.png * You can delete an individual item by pressing the trash can in the top-right. * You can add more items by clicking the link with the white cross again. -.. image:: ../../images/screen26_reordering_multiple_items.png +.. image:: ../../_static/images/screen26_reordering_multiple_items.png 4. You can reorder your multiple items using the up and down arrows. Doing this will affect the order in which they are display on the live page. \ No newline at end of file diff --git a/docs/editor_manual/new_pages/creating_body_content.rst b/docs/editor_manual/new_pages/creating_body_content.rst index 0a87a6ef5..1e3c2b21b 100644 --- a/docs/editor_manual/new_pages/creating_body_content.rst +++ b/docs/editor_manual/new_pages/creating_body_content.rst @@ -7,34 +7,34 @@ There are two types of text entry fields you will see when creating a page. Some So, when you click into certain fields, for example the *Body* field, you will be presented with a set of tools which allow you to format and style your text. These tools also allow you to insert links, images, videos clips and links to documents. -.. image:: ../../images/screen11_rich_text_field.png +.. image:: ../../_static/images/screen11_rich_text_field.png Below is a summary of what the different buttons represent: -.. image:: ../../images/screen11.1_bold_italic.png +.. image:: ../../_static/images/screen11.1_bold_italic.png **Bold / Italic:** Either click then type for bold or italic, or highlight and select to convert existing text to bold or italic. -.. image:: ../../images/screen11.2_formatting_options.png +.. image:: ../../_static/images/screen11.2_formatting_options.png **Paragraph / heading levels:** Clicking into a paragraph and selecting one of these options will change the level of the text. H1 is not included as this is reserved for the page title. -.. image:: ../../images/screen11.3_lists.png +.. image:: ../../_static/images/screen11.3_lists.png **Bulleted and numbered lists** -.. image:: ../../images/screen11.4_horizontal_rule.png +.. image:: ../../_static/images/screen11.4_horizontal_rule.png **Horizontal rule:** Creates a horizontal line at the position of the cursor. If inserted inside a paragraph it will split the paragraph into two seperate paragraphs. -.. image:: ../../images/screen11.5_undo_redo.png +.. image:: ../../_static/images/screen11.5_undo_redo.png **Undo / redo:** As expected will undo or redo the latest actions. Never use the your browser's back button when attempting to undo changes as this could lead to errors. Either use this undo button, or the usual keyboard shortcut, CTRL+Z. -.. image:: ../../images/screen11.6_images_videos.png +.. image:: ../../_static/images/screen11.6_images_videos.png -**Insert image / video:** Allows you to insert an image or video into the rich text field. See Inserting images and videos section for more details. .. insert links for images and videos here>> +**Insert image / video:** Allows you to insert an image or video into the rich text field. See Inserting images and videos section for more details. See `Inserting images <inserting_images.html>` and `Inserting videos <inserting_videos.html>` sections. -.. image:: ../../images/screen11.7_links_docs.png +.. image:: ../../_static/images/screen11.7_links_docs.png -**Insert link / document:** Allows you to insert a link or a document into the rich text field. See Inserting links and Inserting documents for more details. .. insert links to Links and documents sections>> \ No newline at end of file +**Insert link / document:** Allows you to insert a link or a document into the rich text field. See Inserting links and Inserting documents for more details. See `Inserting links section <inserting_links.html>`. \ No newline at end of file diff --git a/docs/editor_manual/new_pages/index.rst b/docs/editor_manual/new_pages/index.rst index c3695970d..904b94600 100644 --- a/docs/editor_manual/new_pages/index.rst +++ b/docs/editor_manual/new_pages/index.rst @@ -1,7 +1,7 @@ Creating new pages ~~~~~~~~~~~~~~~~~~ -.. image:: ../../images/screen08_add_page_button.png +.. image:: ../../_static/images/screen08_add_page_button.png Create new pages by clicking the Add child page. This creates a child page of the section you are currently in. In this case a child page of the Homepage. diff --git a/docs/editor_manual/new_pages/inserting_documents.rst b/docs/editor_manual/new_pages/inserting_documents.rst index 6cc2208fe..f6b6c9407 100644 --- a/docs/editor_manual/new_pages/inserting_documents.rst +++ b/docs/editor_manual/new_pages/inserting_documents.rst @@ -1,10 +1,10 @@ Inserting links to documents into body text ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -.. image:: ../../images/screen27_docs_icon.png +.. image:: ../../_static/images/screen27_docs_icon.png It is possible to insert links to documents held in the CMS into the body text of a web page by clicking the button above in the Body field. The process for doing this is the same as when inserting an image. You are given the choice of either choosing a document from the CMS, or uploading a new document. -.. image:: ../../images/screen28_docs_form.png \ No newline at end of file +.. image:: ../../_static/images/screen28_docs_form.png \ No newline at end of file diff --git a/docs/editor_manual/new_pages/inserting_images.rst b/docs/editor_manual/new_pages/inserting_images.rst index 3ad57f101..b00c85eaa 100644 --- a/docs/editor_manual/new_pages/inserting_images.rst +++ b/docs/editor_manual/new_pages/inserting_images.rst @@ -11,11 +11,11 @@ __________________________________ The carousel is where the main, featured images and videos associated with a page should be displayed. -.. image:: ../../images/screen14_add_carousel_button.png +.. image:: ../../_static/images/screen14_add_carousel_button.png * To insert a carousel item click the Add carousel content link in the Carousel content section. -.. image:: ../../images/screen15_carousel_form.png +.. image:: ../../_static/images/screen15_carousel_form.png * You can then insert an image by clicking the *Choose an image* button. * It is also possible to add videos to a carousel. Simply copy and paste the web address for the video (either YouTube or Vimeo) into the *Embed URL* field and click Insert. A poster image for the video can also be uploaded or selected from the CMS. This is the image displayed before a user has clicked play on the video. @@ -38,7 +38,7 @@ When you click the *Choose an image* button you will be presented with a pop-up The image below demonstrates finding and inserting an image that is already present in the CMS image library. -.. image:: ../../images/screen16_selecting_image_from_library.png +.. image:: ../../_static/images/screen16_selecting_image_from_library.png #. Typing into the search box will automatically display the results below. #. Clicking one of the Popular tags will filter the search results by that tag. @@ -46,7 +46,7 @@ The image below demonstrates finding and inserting an image that is already pre **Uploading a new image to the CMS** -.. image:: ../../images/screen17_upload_image.png +.. image:: ../../_static/images/screen17_upload_image.png #. You must include an image title for your uploaded image #. Click the *Choose file* button to choose an image from your computer. @@ -60,12 +60,12 @@ Images can also be inserted into the body text of a page. When editing the Body In addition, the Wagtail Demo site allows you to chose an aligmnent for you image. -.. image:: ../../images/screen18_image_alignment.png +.. image:: ../../_static/images/screen18_image_alignment.png #. You can select how the image is displayed by selecting one of the format options. #. In the Wagtail Demo site, images inserted into the body text do not have embeded captions (these should be added as regular body text). However you must still provide specific alt text for your image. -The aligmnents available are described below: +The alignments available are described below: * **Full width:** Image will be inserted using the full width of the text area. * **Half-width left/right aligned:** Inserts the image at half the width of the text area. If inserted in a block of text the text will wrap around the image. If two half-width images are inserted together they will display next to each other. diff --git a/docs/editor_manual/new_pages/inserting_links.rst b/docs/editor_manual/new_pages/inserting_links.rst index a74e0a824..030b93bc2 100644 --- a/docs/editor_manual/new_pages/inserting_links.rst +++ b/docs/editor_manual/new_pages/inserting_links.rst @@ -5,7 +5,7 @@ Similar to images, there are a variety of points at which you will want to add l Whichever way you insert a link, you will be presented with the form displayed below. -.. image:: ../../images/screen19_link_form.png +.. image:: ../../_static/images/screen19_link_form.png * Search for an existing page to link to using the search bar at the top of the pop-up. * Below the search bar you can select the type of link you want to insert. The following types are available: diff --git a/docs/editor_manual/new_pages/inserting_videos.rst b/docs/editor_manual/new_pages/inserting_videos.rst index 1b32c0d1c..fe986592b 100644 --- a/docs/editor_manual/new_pages/inserting_videos.rst +++ b/docs/editor_manual/new_pages/inserting_videos.rst @@ -6,10 +6,10 @@ Inserting videos into body content As well as inserting videos into a carousel, Wagtail's rich text fields allow you to add videos into the body of a page by clicking the *Add video* button in the toolbar. -.. image:: ../../images/screen20_insert_video_form.png +.. image:: ../../_static/images/screen20_insert_video_form.png * Copy and paste the web address for the video (either YouTube or Vimeo) into the URL field and click Insert. -.. image:: ../../images/screen21_video_in_editor.png +.. image:: ../../_static/images/screen21_video_in_editor.png * A placeholder with the name of the video and a screenshot will be inserted into the text area. Clicking the X in the top corner will remove the video. diff --git a/docs/editor_manual/new_pages/previewing_and_submitting_for_moderation.rst b/docs/editor_manual/new_pages/previewing_and_submitting_for_moderation.rst index 0daab3774..49411c5c5 100644 --- a/docs/editor_manual/new_pages/previewing_and_submitting_for_moderation.rst +++ b/docs/editor_manual/new_pages/previewing_and_submitting_for_moderation.rst @@ -9,4 +9,4 @@ The Save/Preview/Submit for moderation menu is always present at the bottom of t * **Publish/Unpublish:** Clicking either the *Publish* or *Unpublish* buttons will take you to a confirmation screen asking you to confirm that you wish to publish or unpublish this page. If a page is published it will be accessible from its specific URL and will also be displayed in site search results. (moderators and administrators only) * **Delete:** Clicking this button will take you to a confirmation screen asking you to confirm that you wish to delete the current page. Be sure that this is actually what you want to do, as deleted pages are not recoverable. In many situations simply unpublishing the page will be enough. (moderators and administrators only) -.. image:: ../../images/screen13_publish_menu.png +.. image:: ../../_static/images/screen13_publish_menu.png diff --git a/docs/editor_manual/new_pages/required_fields.rst b/docs/editor_manual/new_pages/required_fields.rst index 315636c6b..62b3af461 100644 --- a/docs/editor_manual/new_pages/required_fields.rst +++ b/docs/editor_manual/new_pages/required_fields.rst @@ -3,9 +3,9 @@ Required fields * Fields marked with an asterisk are required. You will not be able to save a draft or submit the page for moderation without these fields being completed. -.. image:: ../../images/screen22_required_field.png +.. image:: ../../_static/images/screen22_required_field.png * If you try to save/submit the page with some required fields not filled out, you will see the error displayed here. * The number of validation errors for each of the *Promote* and *Content* tabs will appear in a red circle, and the text, 'This field is required', will appear below each field that must be completed. -.. image:: ../../images/screen23_validation_error.png +.. image:: ../../_static/images/screen23_validation_error.png diff --git a/docs/editor_manual/new_pages/selecting_a_page_type.rst b/docs/editor_manual/new_pages/selecting_a_page_type.rst index e3a4001d5..99ec8eebf 100644 --- a/docs/editor_manual/new_pages/selecting_a_page_type.rst +++ b/docs/editor_manual/new_pages/selecting_a_page_type.rst @@ -1,12 +1,12 @@ Selecting a page type ~~~~~~~~~~~~~~~~~~~~~ -.. image:: ../../images/screen09_page_type_selection.png +.. image:: ../../_static/images/screen09_page_type_selection.png * On the left of the page chooser screen are listed all the types of pages that you can create. Clicking the page type name will take you to the Create new page screen for that page type (see below). * Clicking the *View all … pages* links on the right will display all the pages that exist on the website of this type. This is to help you judge what type of page you will need to complete your task. -.. image:: ../../images/screen10_blank_page_edit_screen.png +.. image:: ../../_static/images/screen10_blank_page_edit_screen.png * Once you’ve selected a page type you will be presented with a blank New page screen. * Click into the areas below each field's heading to start entering content. \ No newline at end of file diff --git a/docs/contributing.rst b/docs/howto/contributing.rst similarity index 100% rename from docs/contributing.rst rename to docs/howto/contributing.rst diff --git a/docs/deploying.rst b/docs/howto/deploying.rst similarity index 79% rename from docs/deploying.rst rename to docs/howto/deploying.rst index 5ca7c67df..9acf54976 100644 --- a/docs/deploying.rst +++ b/docs/howto/deploying.rst @@ -4,7 +4,7 @@ Deploying Wagtail On your server ~~~~~~~~~~~~~~ -Wagtail is straightforward to deploy on modern Linux-based distributions, but see the section on :doc:`performance </performance>` for the non-Python services we recommend. If you are running Debian or Ubuntu, this installation script for our Vagrant box may be useful: +Wagtail is straightforward to deploy on modern Linux-based distributions, but see the section on :doc:`performance </howto/performance>` for the non-Python services we recommend. If you are running Debian or Ubuntu, this installation script for our Vagrant box may be useful: `github.com/torchbox/wagtaildemo/blob/master/etc/install/install.sh <https://github.com/torchbox/wagtaildemo/blob/master/etc/install/install.sh>`_ @@ -18,4 +18,4 @@ On Gondor On other PAASs and IAASs ~~~~~~~~~~~~~~~~~~~~~~~~ -We know of Wagtail sites running on `Heroku <http://spapas.github.io/2014/02/13/wagtail-tutorial/>`_, Digital Ocean and elsewhere. If you have successfully installed Wagtail on your platform or infrastructure, please :doc:`contribute </contributing>` your notes to this documentation! \ No newline at end of file +We know of Wagtail sites running on `Heroku <http://spapas.github.io/2014/02/13/wagtail-tutorial/>`_, Digital Ocean and elsewhere. If you have successfully installed Wagtail on your platform or infrastructure, please :doc:`contribute </howto/contributing>` your notes to this documentation! diff --git a/docs/howto/index.rst b/docs/howto/index.rst new file mode 100644 index 000000000..01ce20d13 --- /dev/null +++ b/docs/howto/index.rst @@ -0,0 +1,11 @@ +How to +====== + + +.. toctree:: + :maxdepth: 2 + + settings + deploying + performance + contributing diff --git a/docs/performance.rst b/docs/howto/performance.rst similarity index 100% rename from docs/performance.rst rename to docs/howto/performance.rst diff --git a/docs/settings.rst b/docs/howto/settings.rst similarity index 99% rename from docs/settings.rst rename to docs/howto/settings.rst index 898fb3cb3..59faa6a29 100644 --- a/docs/settings.rst +++ b/docs/howto/settings.rst @@ -141,7 +141,7 @@ Wagtail Apps Search framework for Page content. See :ref:`search`. ``wagtailredirects`` - Admin interface for creating arbitrary redirects on your site. See :ref:`redirects`. + Admin interface for creating arbitrary redirects on your site. ``wagtailforms`` Models for creating forms on your pages and viewing submissions. See :ref:`form_builder`. diff --git a/docs/images/screen02_dashboard_editor.png b/docs/images/screen02_dashboard_editor.png deleted file mode 100644 index 6d85bc824..000000000 Binary files a/docs/images/screen02_dashboard_editor.png and /dev/null differ diff --git a/docs/images/screen03_explorer_menu.png b/docs/images/screen03_explorer_menu.png deleted file mode 100644 index 23588e097..000000000 Binary files a/docs/images/screen03_explorer_menu.png and /dev/null differ diff --git a/docs/images/screen04_search_screen.png b/docs/images/screen04_search_screen.png deleted file mode 100644 index 0f37aa81d..000000000 Binary files a/docs/images/screen04_search_screen.png and /dev/null differ diff --git a/docs/images/screen05_explorer_page.png b/docs/images/screen05_explorer_page.png deleted file mode 100644 index 0a371c5f3..000000000 Binary files a/docs/images/screen05_explorer_page.png and /dev/null differ diff --git a/docs/images/screen06_explorer_page_arrow.png b/docs/images/screen06_explorer_page_arrow.png deleted file mode 100644 index 3f1294939..000000000 Binary files a/docs/images/screen06_explorer_page_arrow.png and /dev/null differ diff --git a/docs/images/screen07_explorer_page_breadcrumb.png b/docs/images/screen07_explorer_page_breadcrumb.png deleted file mode 100644 index 7ddca5607..000000000 Binary files a/docs/images/screen07_explorer_page_breadcrumb.png and /dev/null differ diff --git a/docs/images/screen08.5_reorder_page_handles.png b/docs/images/screen08.5_reorder_page_handles.png deleted file mode 100644 index 6ab53c0cc..000000000 Binary files a/docs/images/screen08.5_reorder_page_handles.png and /dev/null differ diff --git a/docs/images/screen08_add_page_button.png b/docs/images/screen08_add_page_button.png deleted file mode 100644 index f5f5c43d6..000000000 Binary files a/docs/images/screen08_add_page_button.png and /dev/null differ diff --git a/docs/images/screen09_page_type_selection.png b/docs/images/screen09_page_type_selection.png deleted file mode 100644 index 23152c3a9..000000000 Binary files a/docs/images/screen09_page_type_selection.png and /dev/null differ diff --git a/docs/images/screen10_blank_page_edit_screen.png b/docs/images/screen10_blank_page_edit_screen.png deleted file mode 100644 index d2b5a477c..000000000 Binary files a/docs/images/screen10_blank_page_edit_screen.png and /dev/null differ diff --git a/docs/images/screen11_rich_text_field.png b/docs/images/screen11_rich_text_field.png deleted file mode 100644 index a5840d01f..000000000 Binary files a/docs/images/screen11_rich_text_field.png and /dev/null differ diff --git a/docs/images/screen12_edit_screen_overview.png b/docs/images/screen12_edit_screen_overview.png deleted file mode 100644 index e4b55ebaf..000000000 Binary files a/docs/images/screen12_edit_screen_overview.png and /dev/null differ diff --git a/docs/images/screen13_publish_menu.png b/docs/images/screen13_publish_menu.png deleted file mode 100644 index 28715b5e4..000000000 Binary files a/docs/images/screen13_publish_menu.png and /dev/null differ diff --git a/docs/images/screen14_add_carousel_button.png b/docs/images/screen14_add_carousel_button.png deleted file mode 100644 index ab8f3df22..000000000 Binary files a/docs/images/screen14_add_carousel_button.png and /dev/null differ diff --git a/docs/images/screen15_carousel_form.png b/docs/images/screen15_carousel_form.png deleted file mode 100644 index c0f6070dc..000000000 Binary files a/docs/images/screen15_carousel_form.png and /dev/null differ diff --git a/docs/images/screen16_selecting_image_from_library.png b/docs/images/screen16_selecting_image_from_library.png deleted file mode 100644 index 2b4473c89..000000000 Binary files a/docs/images/screen16_selecting_image_from_library.png and /dev/null differ diff --git a/docs/images/screen19_link_form.png b/docs/images/screen19_link_form.png deleted file mode 100644 index 3e3f3aaf3..000000000 Binary files a/docs/images/screen19_link_form.png and /dev/null differ diff --git a/docs/images/screen21_video_in_editor.png b/docs/images/screen21_video_in_editor.png deleted file mode 100644 index d69c38d8f..000000000 Binary files a/docs/images/screen21_video_in_editor.png and /dev/null differ diff --git a/docs/images/screen22_required_field.png b/docs/images/screen22_required_field.png deleted file mode 100644 index 793cec8ca..000000000 Binary files a/docs/images/screen22_required_field.png and /dev/null differ diff --git a/docs/images/screen23_validation_error.png b/docs/images/screen23_validation_error.png deleted file mode 100644 index 0cb85223d..000000000 Binary files a/docs/images/screen23_validation_error.png and /dev/null differ diff --git a/docs/images/screen24_multiple_items_closed.png b/docs/images/screen24_multiple_items_closed.png deleted file mode 100644 index d2fb2f9cb..000000000 Binary files a/docs/images/screen24_multiple_items_closed.png and /dev/null differ diff --git a/docs/images/screen25_multiple_items_open.png b/docs/images/screen25_multiple_items_open.png deleted file mode 100644 index f586b8e39..000000000 Binary files a/docs/images/screen25_multiple_items_open.png and /dev/null differ diff --git a/docs/images/screen26_reordering_multiple_items.png b/docs/images/screen26_reordering_multiple_items.png deleted file mode 100644 index 61ae8a543..000000000 Binary files a/docs/images/screen26_reordering_multiple_items.png and /dev/null differ diff --git a/docs/images/screen28_docs_form.png b/docs/images/screen28_docs_form.png deleted file mode 100644 index c6c6693ca..000000000 Binary files a/docs/images/screen28_docs_form.png and /dev/null differ diff --git a/docs/images/screen29_documents_page.png b/docs/images/screen29_documents_page.png deleted file mode 100644 index 0f3d10e85..000000000 Binary files a/docs/images/screen29_documents_page.png and /dev/null differ diff --git a/docs/images/screen30_documents_edit_page.png b/docs/images/screen30_documents_edit_page.png deleted file mode 100644 index 1c66f1672..000000000 Binary files a/docs/images/screen30_documents_edit_page.png and /dev/null differ diff --git a/docs/index.rst b/docs/index.rst index 2ab429eb6..0ce7b02fa 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -9,23 +9,10 @@ It supports Django 1.6.2+ on Python 2.6, 2.7, 3.2, 3.3 and 3.4. Django 1.7 suppo :maxdepth: 3 gettingstarted - settings - building_your_site/index - editing_api - snippets - search/index - form_builder - model_recipes - advanced_topics - deploying - performance - private_pages - static_site_generation - frontend_cache_purging - sitemap_generation - management_commands - contributing + core_components/index + contrib_components/index + howto/index + reference/index support - roadmap editor_manual/index releases/index diff --git a/docs/reference/index.rst b/docs/reference/index.rst new file mode 100644 index 000000000..c144fc6b1 --- /dev/null +++ b/docs/reference/index.rst @@ -0,0 +1,8 @@ +========= +Reference +========= + +.. toctree:: + :maxdepth: 2 + + management_commands diff --git a/docs/management_commands.rst b/docs/reference/management_commands.rst similarity index 100% rename from docs/management_commands.rst rename to docs/reference/management_commands.rst diff --git a/docs/releases/0.5.rst b/docs/releases/0.5.rst index d17816cec..6f4912de5 100644 --- a/docs/releases/0.5.rst +++ b/docs/releases/0.5.rst @@ -1,14 +1,57 @@ -========================================== -Wagtail 0.5 release notes - IN DEVELOPMENT -========================================== +========================= +Wagtail 0.5 release notes +========================= .. contents:: :local: :depth: 1 -Whats new -========= +What's new +========== + +Multiple image uploader +~~~~~~~~~~~~~~~~~~~~~~~ + +The image uploader UI has been improved to allow multiple images to be uploaded at once. + + +Image feature detection +~~~~~~~~~~~~~~~~~~~~~~~ + +Wagtail can now apply face and feature detection on images using `OpenCV <http://opencv.org/>`_, and use this to intelligently crop images. + +:ref:`image_feature_detection` + + +Using images outside Wagtail +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +In normal use, Wagtail will generate resized versions of images at the point that they are referenced on a template, which means that those images are not easily accessible for use outside of Wagtail, such as displaying them on external sites. Wagtail now provides a way to obtain URLs to your images, at any size. + +:ref:`using_images_outside_wagtail` + + +RoutablePage +~~~~~~~~~~~~ + +A ``RoutablePage`` model has been added to allow embedding Django-style URL routing within a page. + +:ref:`routable_page_mixin` + + +Usage stats for images, documents and snippets +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +It's now easier to find where a particular image, document or snippet is being used on your site. + +Set the ``WAGTAIL_USAGE_COUNT_ENABLED`` setting to ``True`` and an icon will appear on the edit page showing you which pages they have been used on. + + +Copy Page action +~~~~~~~~~~~~~~~~ + +The explorer interface now offers the ability to copy pages, with or without subpages. Minor features @@ -27,14 +70,63 @@ Core MenuItem('Kittens!', '/kittens/', classnames='icon icon-folder-inverse', order=1000) ) + * The lxml library (used for whitelisting and rewriting of rich text fields) has been replaced with the pure-python html5lib library, to simplify installation. + * A ``page_unpublished`` signal has been added. + + +Admin +----- + + * Explorer nav now rendered separately and fetched with AJAX when needed. + + This improves the general performance of the admin interface for large sites. + Bug fixes ~~~~~~~~~ - -Backwards incompatible changes -============================== + * Updates to tag fields are now properly committed to the database when publishing directly from the page edit interface. -Deprecated features -=================== +Upgrade considerations +====================== + +Urlconf entries for ``/admin/images/``, ``/admin/embeds/`` etc need to be removed +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +If you created a Wagtail project prior to the release of Wagtail 0.3, it is likely to contain the following entries in its ``urls.py``: + + .. code-block:: python + + # TODO: some way of getting wagtailimages to register itself within wagtailadmin so that we + # don't have to define it separately here + url(r'^admin/images/', include(wagtailimages_urls)), + url(r'^admin/embeds/', include(wagtailembeds_urls)), + url(r'^admin/documents/', include(wagtaildocs_admin_urls)), + url(r'^admin/snippets/', include(wagtailsnippets_urls)), + url(r'^admin/search/', include(wagtailsearch_admin_urls)), + url(r'^admin/users/', include(wagtailusers_urls)), + url(r'^admin/redirects/', include(wagtailredirects_urls)), + + +These entries (and the corresponding ``from wagtail.wagtail* import ...`` lines) need to be removed from ``urls.py``. (The entry for ``/admin/`` should be left in, however.) + +Since Wagtail 0.3, the wagtailadmin module automatically takes care of registering these URL subpaths, so these entries are redundant, and these urlconf modules are not guaranteed to remain stable and backwards-compatible in future. Leaving these entries in place will now cause an ``ImproperlyConfigured`` exception to be thrown. + + +New fields on Image and Rendition models +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Several new fields have been added to the Image and Rendition models to support :ref:`image_feature_detection`. These will be added to the database when you run ``./manage.py migrate``. If you have defined a custom image model (by extending the ``wagtailimages.AbstractImage`` and ``wagtailimages.AbstractRendition`` classes and specifying ``WAGTAILIMAGES_IMAGE_MODEL`` in settings), the change needs to be applied to that model's database table too. Running the command:: + + ./manage.py schemamigration myapp --auto add_image_focal_point_fields + +(with 'myapp' replaced with your app name) will generate the necessary migration file. + + +South upgraded to 1.0 +~~~~~~~~~~~~~~~~~~~~~ + +In preparation for Django 1.7 support in a future release, Wagtail now depends on South 1.0, and its migration files have been moved from ``migrations`` to ``south_migrations``. Older versions of South will fail to find the migrations in the new location. + +If your project's requirements file (most commonly requirements.txt or requirements/base.txt) references a specific older version of South, this must be updated to South 1.0. diff --git a/docs/releases/0.6.rst b/docs/releases/0.6.rst new file mode 100644 index 000000000..321c43730 --- /dev/null +++ b/docs/releases/0.6.rst @@ -0,0 +1,24 @@ +========================================== +Wagtail 0.6 release notes - IN DEVELOPMENT +========================================== + +.. contents:: + :local: + :depth: 1 + + +What's new +========== + +Minor features +~~~~~~~~~~~~~~ + * A new template tag has been added for reversing URLs inside routable pages. See :ref:`routablepageurl_template_tag`. + * RoutablePage can now be used as a mixin. See :class:`wagtail.contrib.wagtailroutablepage.models.RoutablePageMixin`. + +Bug fixes +~~~~~~~~~ + + * Page URL generation now returns correct URLs for sites that have the main 'serve' view rooted somewhere other than '/'. + +Upgrade considerations +====================== diff --git a/docs/releases/index.rst b/docs/releases/index.rst index 039b5d60e..a9760c239 100644 --- a/docs/releases/index.rst +++ b/docs/releases/index.rst @@ -4,6 +4,8 @@ Release notes .. toctree:: :maxdepth: 1 + roadmap + 0.6 0.5 0.4.1 0.4 diff --git a/docs/roadmap.rst b/docs/releases/roadmap.rst similarity index 100% rename from docs/roadmap.rst rename to docs/releases/roadmap.rst diff --git a/requirements-dev.txt b/requirements-dev.txt index b69c5d4e0..6bc561b0c 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -2,3 +2,4 @@ coverage==3.7.1 flake8==2.2.1 mock==1.0.1 +python-dateutil==2.2 diff --git a/runtests.py b/runtests.py index ed8f99d45..3a7399233 100755 --- a/runtests.py +++ b/runtests.py @@ -3,7 +3,6 @@ import sys import os import shutil -from django.conf import settings from django.core.management import execute_from_command_line from wagtail.tests.settings import STATIC_ROOT, MEDIA_ROOT diff --git a/scripts/install/debian.sh b/scripts/install/debian.sh index 63830dc15..9c16894bf 100644 --- a/scripts/install/debian.sh +++ b/scripts/install/debian.sh @@ -36,7 +36,7 @@ SERVER_IP=`ifconfig eth0 |grep "inet addr" | cut -d: -f2 | cut -d" " -f1` aptitude update aptitude -y install git python-pip nginx postgresql redis-server -aptitude -y install postgresql-server-dev-all python-dev libxml2-dev libxslt-dev libjpeg62-dev +aptitude -y install postgresql-server-dev-all python-dev libjpeg62-dev perl -pi -e "s/^(local\s+all\s+postgres\s+)peer$/\1trust/" /etc/postgresql/9.1/main/pg_hba.conf service postgresql reload @@ -111,7 +111,7 @@ EOF mkdir -p /etc/uwsgi/vassals/ ln -s $PROJECT_ROOT/$PROJECT/uwsgi_conf.ini /etc/uwsgi/vassals/ -curl -o /etc/init.d/uwsgi https://raw.github.com/torchbox/wagtail/master/scripts/install/uwsgi-init.d +curl -o /etc/init.d/uwsgi https://raw.githubusercontent.com/torchbox/wagtail/master/scripts/install/uwsgi-init.d mkdir /var/log/uwsgi chmod 755 /etc/init.d/uwsgi update-rc.d uwsgi defaults diff --git a/scripts/install/ubuntu.sh b/scripts/install/ubuntu.sh index 303fe0355..45adaa5f2 100644 --- a/scripts/install/ubuntu.sh +++ b/scripts/install/ubuntu.sh @@ -34,7 +34,7 @@ SERVER_IP=`ifconfig eth0 |grep "inet addr" | cut -d: -f2 | cut -d" " -f1` aptitude update aptitude -y install git python-pip nginx postgresql redis-server -aptitude -y install postgresql-server-dev-all python-dev libxml2-dev libxslt-dev libjpeg62-dev +aptitude -y install postgresql-server-dev-all python-dev libjpeg62-dev perl -pi -e "s/^(local\s+all\s+postgres\s+)peer$/\1trust/" /etc/postgresql/9.1/main/pg_hba.conf service postgresql reload diff --git a/setup.py b/setup.py index 129a48468..4d22021ed 100644 --- a/setup.py +++ b/setup.py @@ -24,15 +24,15 @@ PY3 = sys.version_info[0] == 3 install_requires = [ "Django>=1.6.2,<1.7", - "South>=0.8.4", + "South==1.0.0", "django-compressor>=1.4", "django-libsass>=0.2", "django-modelcluster>=0.3", - "django-taggit==0.11.2", + "django-taggit==0.12.0", "django-treebeard==2.0", "Pillow>=2.3.0", "beautifulsoup4>=4.3.2", - "lxml>=3.3.0", + "html5lib==0.999", "Unidecode>=0.04.14", "six==1.7.3", 'requests==2.3.0', @@ -47,7 +47,7 @@ if not PY3: setup( name='wagtail', - version='0.4', + version='0.5', description='A Django content management system focused on flexibility and user experience', author='Matthew Westcott', author_email='matthew.westcott@torchbox.com', diff --git a/tox.ini b/tox.ini index 2b17c65ba..5e68ac99a 100644 --- a/tox.ini +++ b/tox.ini @@ -3,6 +3,7 @@ dj16= Django>=1.6,<1.7 elasticsearch==1.1.0 mock==1.0.1 + python-dateutil==2.2 [tox] envlist = diff --git a/wagtail/contrib/wagtailfrontendcache/signal_handlers.py b/wagtail/contrib/wagtailfrontendcache/signal_handlers.py index 0fc92d46e..29a153896 100644 --- a/wagtail/contrib/wagtailfrontendcache/signal_handlers.py +++ b/wagtail/contrib/wagtailfrontendcache/signal_handlers.py @@ -1,8 +1,7 @@ from django.db import models -from django.db.models.signals import post_delete from wagtail.wagtailcore.models import Page -from wagtail.wagtailcore.signals import page_published +from wagtail.wagtailcore.signals import page_published, page_unpublished from wagtail.contrib.wagtailfrontendcache.utils import purge_page_from_cache @@ -11,7 +10,7 @@ def page_published_signal_handler(instance, **kwargs): purge_page_from_cache(instance) -def post_delete_signal_handler(instance, **kwargs): +def page_unpublished_signal_handler(instance, **kwargs): purge_page_from_cache(instance) @@ -22,4 +21,4 @@ def register_signal_handlers(): # Loop through list and register signal handlers for each one for model in indexed_models: page_published.connect(page_published_signal_handler, sender=model) - post_delete.connect(post_delete_signal_handler, sender=model) + page_unpublished.connect(page_unpublished_signal_handler, sender=model) diff --git a/wagtail/wagtailadmin/migrations/__init__.py b/wagtail/contrib/wagtailroutablepage/__init__.py similarity index 100% rename from wagtail/wagtailadmin/migrations/__init__.py rename to wagtail/contrib/wagtailroutablepage/__init__.py diff --git a/wagtail/contrib/wagtailroutablepage/models.py b/wagtail/contrib/wagtailroutablepage/models.py new file mode 100644 index 000000000..88379b37a --- /dev/null +++ b/wagtail/contrib/wagtailroutablepage/models.py @@ -0,0 +1,82 @@ +from six import string_types + +from django.http import Http404 +from django.core.urlresolvers import get_resolver +from django.core.exceptions import ImproperlyConfigured + +from wagtail.wagtailcore.models import Page +from wagtail.wagtailcore.url_routing import RouteResult + + +class RoutablePageMixin(object): + """ + This class can be mixed in to a Page subclass to allow urlconfs to be + embedded inside pages. + """ + #: Set this to a tuple of ``django.conf.urls.url`` objects. + subpage_urls = None + + def reverse_subpage(self, name, args=None, kwargs=None): + """ + This method does the same job as Djangos' built in "urlresolvers.reverse()" function for subpage urlconfs. + """ + args = args or [] + kwargs = kwargs or {} + + if self.subpage_urls is None: + raise ImproperlyConfigured("You must set 'subpage_urls' on " + type(self).__name__) + + resolver = get_resolver(self.subpage_urls) + return resolver.reverse(name, *args, **kwargs) + + def resolve_subpage(self, path): + """ + This finds a view method/function from a URL path. + """ + if self.subpage_urls is None: + raise ImproperlyConfigured("You must set 'subpage_urls' on " + type(self).__name__) + + resolver = get_resolver(self.subpage_urls) + view, args, kwargs = resolver.resolve(path) + + # If view is a string, find it as an attribute of self + if isinstance(view, string_types): + view = getattr(self, view) + + return view, args, kwargs + + def route(self, request, path_components): + """ + This hooks the subpage urls into Wagtails routing. + """ + if self.live: + try: + path = '/' + if path_components: + path += '/'.join(path_components) + '/' + + view, args, kwargs = self.resolve_subpage(path) + return RouteResult(self, args=(view, args, kwargs)) + except Http404: + pass + + return super(RoutablePageMixin, self).route(request, path_components) + + def serve(self, request, view, args, kwargs): + return view(request, *args, **kwargs) + + def serve_preview(self, request, mode_name): + view, args, kwargs = self.resolve_subpage('/') + return view(*args, **kwargs) + + +class RoutablePage(RoutablePageMixin, Page): + """ + This class extends Page by adding methods to allow urlconfs + to be embedded inside pages + """ + + is_abstract = True + + class Meta: + abstract = True diff --git a/wagtail/wagtailcore/migrations/__init__.py b/wagtail/contrib/wagtailroutablepage/templatetags/__init__.py similarity index 100% rename from wagtail/wagtailcore/migrations/__init__.py rename to wagtail/contrib/wagtailroutablepage/templatetags/__init__.py diff --git a/wagtail/contrib/wagtailroutablepage/templatetags/wagtailroutablepage_tags.py b/wagtail/contrib/wagtailroutablepage/templatetags/wagtailroutablepage_tags.py new file mode 100644 index 000000000..6af38c245 --- /dev/null +++ b/wagtail/contrib/wagtailroutablepage/templatetags/wagtailroutablepage_tags.py @@ -0,0 +1,24 @@ +from django import template + + +register = template.Library() + + +@register.simple_tag(takes_context=True) +def routablepageurl(context, page, url_name, *args, **kwargs): + """ + ``routablepageurl`` is similar to ``pageurl``, but works with + ``RoutablePage``\s. It behaves like a hybrid between the built-in + ``reverse``, and ``pageurl`` from Wagtail. + + ``page`` is the RoutablePage that URLs will be generated from. + + ``url_name`` is a URL name defined in ``page.subpage_urls``. + + Positional arguments and keyword arguments should be passed as normal + positional arguments and keyword arguments. + """ + request = context['request'] + base_url = page.relative_url(request.site) + routed_url = page.reverse_subpage(url_name, args=args, kwargs=kwargs) + return base_url + routed_url diff --git a/wagtail/contrib/wagtailroutablepage/tests.py b/wagtail/contrib/wagtailroutablepage/tests.py new file mode 100644 index 000000000..1aa8f53d1 --- /dev/null +++ b/wagtail/contrib/wagtailroutablepage/tests.py @@ -0,0 +1,115 @@ +from django.test import TestCase, RequestFactory + +from wagtail.wagtailcore.models import Page, Site +from wagtail.tests.models import RoutablePageTest, routable_page_external_view +from wagtail.contrib.wagtailroutablepage.templatetags.wagtailroutablepage_tags import routablepageurl + + +class TestRoutablePage(TestCase): + def setUp(self): + self.home_page = Page.objects.get(id=2) + self.routable_page = self.home_page.add_child(instance=RoutablePageTest( + title="Routable Page", + slug='routable-page', + live=True, + )) + + def test_resolve_main_view(self): + view, args, kwargs = self.routable_page.resolve_subpage('/') + + self.assertEqual(view, self.routable_page.main) + self.assertEqual(args, ()) + self.assertEqual(kwargs, {}) + + def test_resolve_archive_by_year_view(self): + view, args, kwargs = self.routable_page.resolve_subpage('/archive/year/2014/') + + self.assertEqual(view, self.routable_page.archive_by_year) + self.assertEqual(args, ('2014', )) + self.assertEqual(kwargs, {}) + + def test_resolve_archive_by_author_view(self): + view, args, kwargs = self.routable_page.resolve_subpage('/archive/author/joe-bloggs/') + + self.assertEqual(view, self.routable_page.archive_by_author) + self.assertEqual(args, ()) + self.assertEqual(kwargs, {'author_slug': 'joe-bloggs'}) + + def test_resolve_external_view(self): + view, args, kwargs = self.routable_page.resolve_subpage('/external/joe-bloggs/') + + self.assertEqual(view, routable_page_external_view) + self.assertEqual(args, ('joe-bloggs', )) + self.assertEqual(kwargs, {}) + + def test_reverse_main_view(self): + url = self.routable_page.reverse_subpage('main') + + self.assertEqual(url, '') + + def test_reverse_archive_by_year_view(self): + url = self.routable_page.reverse_subpage('archive_by_year', args=('2014', )) + + self.assertEqual(url, 'archive/year/2014/') + + def test_reverse_archive_by_author_view(self): + url = self.routable_page.reverse_subpage('archive_by_author', kwargs={'author_slug': 'joe-bloggs'}) + + self.assertEqual(url, 'archive/author/joe-bloggs/') + + def test_reverse_external_view(self): + url = self.routable_page.reverse_subpage('external_view', args=('joe-bloggs', )) + + self.assertEqual(url, 'external/joe-bloggs/') + + def test_get_main_view(self): + response = self.client.get(self.routable_page.url) + + self.assertContains(response, "MAIN VIEW") + + def test_get_archive_by_year_view(self): + response = self.client.get(self.routable_page.url + 'archive/year/2014/') + + self.assertContains(response, "ARCHIVE BY YEAR: 2014") + + def test_get_archive_by_author_view(self): + response = self.client.get(self.routable_page.url + 'archive/author/joe-bloggs/') + + self.assertContains(response, "ARCHIVE BY AUTHOR: joe-bloggs") + + def test_get_external_view(self): + response = self.client.get(self.routable_page.url + 'external/joe-bloggs/') + + self.assertContains(response, "EXTERNAL VIEW: joe-bloggs") + + +class TestRoutablePageTemplateTag(TestRoutablePage): + def setUp(self): + super(TestRoutablePageTemplateTag, self).setUp() + self.rf = RequestFactory() + self.request = self.rf.get(self.routable_page.url) + self.request.site = Site.find_for_request(self.request) + self.context = {'request': self.request} + + def test_templatetag_reverse_main_view(self): + url = routablepageurl(self.context, self.routable_page, + 'main') + self.assertEqual(url, self.routable_page.url) + + def test_templatetag_reverse_archive_by_year_view(self): + url = routablepageurl(self.context, self.routable_page, + 'archive_by_year', '2014') + + self.assertEqual(url, self.routable_page.url + 'archive/year/2014/') + + def test_templatetag_reverse_archive_by_author_view(self): + url = routablepageurl(self.context, self.routable_page, + 'archive_by_author', author_slug='joe-bloggs') + + self.assertEqual(url, self.routable_page.url + 'archive/author/joe-bloggs/') + + def test_templatetag_reverse_external_view(self): + url = routablepageurl(self.context, self.routable_page, + 'external_view', 'joe-bloggs') + + self.assertEqual(url, self.routable_page.url + 'external/joe-bloggs/') diff --git a/wagtail/contrib/wagtailstyleguide/locale/en/LC_MESSAGES/django.po b/wagtail/contrib/wagtailstyleguide/locale/en/LC_MESSAGES/django.po index 9e52f6985..661d514a3 100644 --- a/wagtail/contrib/wagtailstyleguide/locale/en/LC_MESSAGES/django.po +++ b/wagtail/contrib/wagtailstyleguide/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:57+0000\n" +"POT-Creation-Date: 2014-08-01 16:40+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -33,15 +33,15 @@ msgstr "" msgid "Error message" msgstr "" -#: wagtail_hooks.py:20 templates/wagtailstyleguide/base.html:12 -#: templates/wagtailstyleguide/base.html:16 +#: wagtail_hooks.py:21 templates/wagtailstyleguide/base.html:10 +#: templates/wagtailstyleguide/base.html:14 msgid "Styleguide" msgstr "" -#: templates/wagtailstyleguide/base.html:282 +#: templates/wagtailstyleguide/base.html:354 msgid "Save" msgstr "" -#: templates/wagtailstyleguide/base.html:282 +#: templates/wagtailstyleguide/base.html:354 msgid "Delete image" msgstr "" diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/layouts/styleguide.scss b/wagtail/contrib/wagtailstyleguide/static/wagtailstyleguide/scss/styleguide.scss similarity index 90% rename from wagtail/wagtailadmin/static/wagtailadmin/scss/layouts/styleguide.scss rename to wagtail/contrib/wagtailstyleguide/static/wagtailstyleguide/scss/styleguide.scss index 09cb627ed..8eedb1d44 100644 --- a/wagtail/wagtailadmin/static/wagtailadmin/scss/layouts/styleguide.scss +++ b/wagtail/contrib/wagtailstyleguide/static/wagtailstyleguide/scss/styleguide.scss @@ -1,6 +1,6 @@ -@import "../variables.scss"; -@import "../mixins.scss"; -@import "../grid.scss"; +@import "wagtailadmin/scss/variables.scss"; +@import "wagtailadmin/scss/mixins.scss"; +@import "wagtailadmin/scss/grid.scss"; section{ border-top:1px solid $color-grey-3; @@ -50,6 +50,9 @@ section{ .color-green{ background-color:$color-green; } + .color-blue{ + background-color:$color-blue; + } .color-grey-1{ background-color:$color-grey-1; } diff --git a/wagtail/contrib/wagtailstyleguide/templates/wagtailstyleguide/base.html b/wagtail/contrib/wagtailstyleguide/templates/wagtailstyleguide/base.html index bc3036d65..a9d265117 100644 --- a/wagtail/contrib/wagtailstyleguide/templates/wagtailstyleguide/base.html +++ b/wagtail/contrib/wagtailstyleguide/templates/wagtailstyleguide/base.html @@ -1,11 +1,9 @@ {% extends "wagtailadmin/base.html" %} -{% load wagtailadmin_tags %} -{% load compress i18n %} -{% load gravatar %} +{% load wagtailadmin_tags compress i18n static gravatar %} {% block extra_css %} {% compress css %} - <link rel="stylesheet" href="{{ STATIC_URL }}wagtailadmin/scss/layouts/styleguide.scss" type="text/x-scss" /> + <link rel="stylesheet" href="{{ STATIC_URL }}wagtailstyleguide/scss/styleguide.scss" type="text/x-scss" /> {% endcompress %} {% endblock %} @@ -22,7 +20,9 @@ <ul class="unlist"> <li><a href="#palette">Colour palette</a></li> <li><a href="#typography">Typography</a></li> + <li><a href="#help">Help text</a></li> <li><a href="#listings">Listings</a></li> + <li><a href="#pagination">Pagination</a></li> <li><a href="#buttons">Buttons</a></li> <li><a href="#dropdowns">Dropdown buttons</a></li> <li><a href="#header">Header</a></li> @@ -32,6 +32,7 @@ <li><a href="#breadcrumbs">Breadcrumbs</a></li> <li><a href="#misc">Misc formatters</a></li> <li><a href="#icons">Icons</a></li> + <li><a href="#ie9">IE9 debugging</a></li> </ul> </nav> @@ -59,6 +60,7 @@ <li class="color-red">color-red</li> <li class="color-orange">color-orange</li> <li class="color-green">color-green</li> + <li class="color-blue">color-blue</li> </ul> </section> @@ -88,6 +90,26 @@ </section> + <section id="help"> + <h2>Help text</h2> + + <p>Help text is not to be confused with the messages that appear in a banner drop down from the top of the screen. Help text are permanent instructions, visible on every page view, that explain or warn about something. + + <div class="help-block help-info"> + <p>This is help text that might be just for information, explaining what happens next, or drawing the user's attention to something they're about to do</p> + <p>It could be multiple lines</p> + </div> + + <p class="help-block help-warning"> + A warning message might be output in cases where a user's action could have serious consequences + </p> + + <div class="help-block help-critical"> + A critical message would probably be rare, in cases where a particularly brittle or dangerously destructive action could be performed and needs to be warned about. + </div> + + </section> + <section id="listings"> <h2>Listings</h2> @@ -103,14 +125,21 @@ <tbody> <tr> <td class="title"> - <h2>TD with title class</h2> + <h2><a href="">TD with title class</a></h2> + </td> + <td>Regular listing TD</td> + <td>Regular listing TD</td> + </tr> + <tr class="unpublished"> + <td class="title"> + <h2><a href="">Unpublished TD with title class</a></h2> </td> <td>Regular listing TD</td> <td>Regular listing TD</td> </tr> <tr> <td class="title"> - <h2>TD with title class</h2> + <h2><a href="">TD with title class</a></h2> </td> <td>Regular listing TD</td> <td>Regular listing TD</td> @@ -120,9 +149,41 @@ <h3><code>ul</code> listing</h3> <ul class="listing"> - <li>List item</li> - <li>List item</li> - <li>List item</li> + <li><div class="title"><h2><a href="">List item</a></h2></div></li> + <li><div class="title"><h2><a href="">List item</a></h2></div></li> + <li><div class="title"><h2><a href="">List item</a></h2></div></li> + </ul> + + + <h3><code>ul</code> listings with multiple columns</h3> + <ul class="listing"> + <li> + <div class="row row-flush"> + <div class="col6 title"> + <h2><a href="">Something here</a></h2> + </div> + + <small class="col6" style="text-align:right">Something else</small> + </div> + </li> + <li> + <div class="row row-flush"> + <div class="col6"> + <a href="">Something here</a> + </div> + + <small class="col6" style="text-align:right">Something else</small> + </div> + </li> + <li> + <div class="row row-flush"> + <div class="col6"> + <a href="">Something here</a> + </div> + + <small class="col6" style="text-align:right">Something else</small> + </div> + </li> </ul> <h3>Listings used for choosing a list item</h3> @@ -135,16 +196,23 @@ </tr> </thead> <tbody> - <tr class="can-choose"> + <tr> <td class="title"> <h2><a href="#">TD with title class</a></h2> </td> <td>Regular listing TD</td> <td>Regular listing TD</td> </li> - <tr class="can-choose"> + <tr class="disabled"> <td class="title"> - <h2>TD with title class</h2> + <h2>Disabled TD with title class</h2> + </td> + <td>Regular listing TD</td> + <td>Regular listing TD</td> + </li> + <tr > + <td class="title"> + <h2><a href="">TD with title class</a></h2> </td> <td>Regular listing TD</td> <td>Regular listing TD</td> @@ -153,6 +221,11 @@ </table> </section> + <section id="pagination"> + <h2>Pagination</h2> + {% include "wagtailadmin/shared/pagination_nav.html" with items=fake_pagination linkurl="wagtailadmin_explore" %} + </section> + <section id="buttons"> <h2>Buttons</h2> @@ -345,6 +418,13 @@ <div class="status-tag primary">Primary tag</div> <div class="status-tag">Secondary tag</div> + + <h3>Loading mask</h3> + <p>Add the following <code>div</code> around any items you wish to display with a spinner overlay and fading out</p> + <p>Remove the "loading" class to disable the effect</p> + <div class="loading-mask loading" style="width:200px"> + <img src="{% static 'wagtailadmin/images/wagtail-logo.svg' %}" width="200" /> + </div> </section> <section id="icons"> @@ -420,6 +500,15 @@ </ul> </section> + + <section id="ie9"> + <h2>IE9 debugging</h2> + + <p>Internet Explorer 9 has two critical limitations in its CSS support: a maximum of 31 stylesheets per page and a maximum of 4096 selectors per stylesheet. The latter is particularly problematic when CSS is concatenated.</p> + + <div id="ie9-debug"></div> + + </section> </div> {% endblock %} @@ -427,7 +516,29 @@ {% block extra_js %} <script> $(function(){ - + var styleSheets = document.styleSheets, totalStyleSheets = styleSheets.length; + + for (var j = 0; j < totalStyleSheets; j++) { + var styleSheet = styleSheets[j], rules = styleSheet.cssRules, totalSelectorsInStylesheet = 0, style = ""; + + var totalRulesInStylesheet = rules ? rules.length : 0; + + for (var i = 0; i < totalRulesInStylesheet; i++) { + if (rules[i].selectorText) { + try { + totalSelectorsInStylesheet += rules[i].selectorText.split(',').length; + } + catch (err) { + console.log(err); + } + } + } + + if(totalSelectorsInStylesheet > 4095){ + style = 'color:red'; + } + $('#ie9-debug').append("<h3>" + styleSheet.href + "</h3>" + "<p>Total rules: <strong>" + totalRulesInStylesheet + "</strong>. " + "Total selectors: <strong style='" + style + "'>" + totalSelectorsInStylesheet + "</strong></p>"); + } }) </script> {% endblock %} \ No newline at end of file diff --git a/wagtail/contrib/wagtailstyleguide/views.py b/wagtail/contrib/wagtailstyleguide/views.py index 9683289d2..927a17442 100644 --- a/wagtail/contrib/wagtailstyleguide/views.py +++ b/wagtail/contrib/wagtailstyleguide/views.py @@ -32,7 +32,20 @@ def index(request): messages.warning(request, _("Warning message")) messages.error(request, _("Error message")) + fake_pagination = { + 'number': 1, + 'previous_page_number': 1, + 'next_page_number': 2, + 'has_previous': True, + 'has_next': True, + 'paginator': { + 'num_pages': 10, + }, + } + + return render(request, 'wagtailstyleguide/base.html', { 'search_form': form, 'example_form': example_form, + 'fake_pagination': fake_pagination, }) diff --git a/wagtail/tests/fixtures/test.json b/wagtail/tests/fixtures/test.json index f31610279..00e621f48 100644 --- a/wagtail/tests/fixtures/test.json +++ b/wagtail/tests/fixtures/test.json @@ -438,7 +438,7 @@ { "pk": 1, - "model": "auth.user", + "model": "tests.customuser", "fields": { "username": "superuser", "first_name": "", @@ -455,7 +455,7 @@ }, { "pk": 2, - "model": "auth.user", + "model": "tests.customuser", "fields": { "username": "eventeditor", "first_name": "", @@ -473,7 +473,7 @@ }, { "pk": 3, - "model": "auth.user", + "model": "tests.customuser", "fields": { "username": "eventmoderator", "first_name": "", @@ -491,7 +491,7 @@ }, { "pk": 4, - "model": "auth.user", + "model": "tests.customuser", "fields": { "username": "inactiveuser", "first_name": "", @@ -509,7 +509,7 @@ }, { "pk": 5, - "model": "auth.user", + "model": "tests.customuser", "fields": { "username": "siteeditor", "first_name": "", @@ -527,7 +527,7 @@ }, { "pk": 6, - "model": "auth.user", + "model": "tests.customuser", "fields": { "username": "admin_only_user", "first_name": "", @@ -562,6 +562,14 @@ "submit_time": "2014-01-01T12:00:00.000Z" } }, +{ + "pk": 1, + "model": "tests.AdvertPlacement", + "fields": { + "page": 2, + "advert": 1 + } +}, { "pk": 1, "model": "tests.advert", @@ -578,17 +586,6 @@ "created_at": "2014-01-01T12:00:00.000Z" } }, -{ - "pk": 1, - "model": "wagtailimages.Image", - "fields": { - "title": "test image", - "created_at": "2014-01-01T12:00:00.000Z", - "width": 0, - "height": 0 - } -}, - { "pk": 1, "model": "wagtailcore.pageviewrestriction", diff --git a/wagtail/tests/models.py b/wagtail/tests/models.py index 2f151c465..a38d889bd 100644 --- a/wagtail/tests/models.py +++ b/wagtail/tests/models.py @@ -1,8 +1,14 @@ from django.db import models from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger +from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, BaseUserManager from django.utils.encoding import python_2_unicode_compatible +from django.conf.urls import url +from django.http import HttpResponse + +from taggit.models import TaggedItemBase from modelcluster.fields import ParentalKey +from modelcluster.tags import ClusterTaggableManager from wagtail.wagtailcore.models import Page, Orderable from wagtail.wagtailcore.fields import RichTextField @@ -12,6 +18,7 @@ from wagtail.wagtaildocs.edit_handlers import DocumentChooserPanel from wagtail.wagtailforms.models import AbstractEmailForm, AbstractFormField from wagtail.wagtailsnippets.models import register_snippet from wagtail.wagtailsearch import indexed +from wagtail.contrib.wagtailroutablepage.models import RoutablePage EVENT_AUDIENCE_CHOICES = ( @@ -28,6 +35,50 @@ COMMON_PANELS = ( ) +class CustomUserManager(BaseUserManager): + def _create_user(self, username, email, password, + is_staff, is_superuser, **extra_fields): + """ + Creates and saves a User with the given username, email and password. + """ + if not username: + raise ValueError('The given username must be set') + email = self.normalize_email(email) + user = self.model(username=username, email=email, + is_staff=is_staff, is_active=True, + is_superuser=is_superuser, **extra_fields) + user.set_password(password) + user.save(using=self._db) + return user + + def create_user(self, username, email=None, password=None, **extra_fields): + return self._create_user(username, email, password, False, False, + **extra_fields) + + def create_superuser(self, username, email, password, **extra_fields): + return self._create_user(username, email, password, True, True, + **extra_fields) + + +class CustomUser(AbstractBaseUser, PermissionsMixin): + username = models.CharField(max_length=100, unique=True) + email = models.EmailField(max_length=255, blank=True) + is_staff = models.BooleanField(default=True) + is_active = models.BooleanField(default=True) + first_name = models.CharField(max_length=50, blank=True) + last_name = models.CharField(max_length=50, blank=True) + + USERNAME_FIELD = 'username' + + objects = CustomUserManager() + + def get_full_name(self): + return self.first_name + ' ' + self.last_name + + def get_short_name(self): + return self.first_name + + # Link fields class LinkFields(models.Model): @@ -274,9 +325,11 @@ FormPage.content_panels = [ ] -# Snippets # Snippets +class AdvertPlacement(models.Model): + page = ParentalKey('wagtailcore.Page', related_name='advert_placements') + advert = models.ForeignKey('tests.Advert', related_name='+') @python_2_unicode_compatible class Advert(models.Model): @@ -383,9 +436,39 @@ class SearchTestOldConfig(models.Model, indexed.Indexed): }, } + class SearchTestOldConfigList(models.Model, indexed.Indexed): """ This tests that the Indexed class can correctly handle models that use the old "indexed_fields" configuration format using a list. """ indexed_fields = ['title', 'content'] + + +def routable_page_external_view(request, arg): + return HttpResponse("EXTERNAL VIEW: " + arg) + +class RoutablePageTest(RoutablePage): + subpage_urls = ( + url(r'^$', 'main', name='main'), + url(r'^archive/year/(\d+)/$', 'archive_by_year', name='archive_by_year'), + url(r'^archive/author/(?P<author_slug>.+)/$', 'archive_by_author', name='archive_by_author'), + url(r'^external/(.+)/$', routable_page_external_view, name='external_view') + ) + + def archive_by_year(self, request, year): + return HttpResponse("ARCHIVE BY YEAR: " + str(year)) + + def archive_by_author(self, request, author_slug): + return HttpResponse("ARCHIVE BY AUTHOR: " + author_slug) + + def main(self, request): + return HttpResponse("MAIN VIEW") + + +class TaggedPageTag(TaggedItemBase): + content_object = ParentalKey('tests.TaggedPage', related_name='tagged_items') + + +class TaggedPage(Page): + tags = ClusterTaggableManager(through=TaggedPageTag, blank=True) diff --git a/wagtail/tests/non_root_urls.py b/wagtail/tests/non_root_urls.py new file mode 100644 index 000000000..badea652a --- /dev/null +++ b/wagtail/tests/non_root_urls.py @@ -0,0 +1,19 @@ +"""An alternative urlconf module where Wagtail front-end URLs +are rooted at '/site/' rather than '/'""" + +from django.conf.urls import patterns, include, url + +from wagtail.wagtailcore import urls as wagtail_urls +from wagtail.wagtailadmin import urls as wagtailadmin_urls +from wagtail.wagtaildocs import urls as wagtaildocs_urls +from wagtail.wagtailimages import urls as wagtailimages_urls +from wagtail.wagtailsearch import urls as wagtailsearch_urls + + +urlpatterns = patterns('', + url(r'^admin/', include(wagtailadmin_urls)), + url(r'^search/', include(wagtailsearch_urls)), + url(r'^documents/', include(wagtaildocs_urls)), + url(r'^images/', include(wagtailimages_urls)), + url(r'^site/', include(wagtail_urls)), +) diff --git a/wagtail/tests/settings.py b/wagtail/tests/settings.py index 4623acbec..1ef1c5ab1 100644 --- a/wagtail/tests/settings.py +++ b/wagtail/tests/settings.py @@ -11,8 +11,9 @@ MEDIA_ROOT = os.path.join(WAGTAIL_ROOT, 'test-media') DATABASES = { 'default': { 'ENGINE': os.environ.get('DATABASE_ENGINE', 'django.db.backends.postgresql_psycopg2'), - 'NAME': 'wagtaildemo', + 'NAME': os.environ.get('DATABASE_NAME', 'wagtaildemo'), 'USER': os.environ.get('DATABASE_USER', 'postgres'), + 'PASSWORD': os.environ.get('DATABASE_PASS', None), } } @@ -71,6 +72,7 @@ INSTALLED_APPS = [ 'wagtail.wagtailforms', 'wagtail.contrib.wagtailstyleguide', 'wagtail.contrib.wagtailsitemaps', + 'wagtail.contrib.wagtailroutablepage', 'wagtail.tests', ] @@ -100,6 +102,8 @@ WAGTAILSEARCH_BACKENDS = { } } +AUTH_USER_MODEL = 'tests.CustomUser' + try: # Only add Elasticsearch backend if the elasticsearch-py library is installed import elasticsearch diff --git a/wagtail/tests/urls.py b/wagtail/tests/urls.py index c9ca98bba..7df625dcc 100644 --- a/wagtail/tests/urls.py +++ b/wagtail/tests/urls.py @@ -3,6 +3,7 @@ from django.conf.urls import patterns, include, url from wagtail.wagtailcore import urls as wagtail_urls from wagtail.wagtailadmin import urls as wagtailadmin_urls from wagtail.wagtaildocs import urls as wagtaildocs_urls +from wagtail.wagtailimages import urls as wagtailimages_urls from wagtail.wagtailsearch import urls as wagtailsearch_urls from wagtail.contrib.wagtailsitemaps.views import sitemap @@ -11,6 +12,7 @@ urlpatterns = patterns('', url(r'^admin/', include(wagtailadmin_urls)), url(r'^search/', include(wagtailsearch_urls)), url(r'^documents/', include(wagtaildocs_urls)), + url(r'^images/', include(wagtailimages_urls)), url(r'^sitemap\.xml$', sitemap), diff --git a/wagtail/tests/utils.py b/wagtail/tests/utils.py index 2e95d0210..ca8bcacd4 100644 --- a/wagtail/tests/utils.py +++ b/wagtail/tests/utils.py @@ -1,7 +1,7 @@ from contextlib import contextmanager import warnings -from django.contrib.auth.models import User +from django.contrib.auth import get_user_model from django.utils import six # We need to make sure that we're using the same unittest library that Django uses internally @@ -19,7 +19,7 @@ except ImportError: class WagtailTestUtils(object): def login(self): # Create a user - user = User.objects.create_superuser(username='test', email='test@email.com', password='password') + user = get_user_model().objects.create_superuser(username='test', email='test@email.com', password='password') # Login self.client.login(username='test', password='password') diff --git a/wagtail/wagtaildocs/migrations/__init__.py b/wagtail/utils/__init__.py similarity index 100% rename from wagtail/wagtaildocs/migrations/__init__.py rename to wagtail/utils/__init__.py diff --git a/wagtail/utils/deprecation.py b/wagtail/utils/deprecation.py new file mode 100644 index 000000000..24dc4e589 --- /dev/null +++ b/wagtail/utils/deprecation.py @@ -0,0 +1,6 @@ +class RemovedInWagtail06Warning(DeprecationWarning): + pass + + +class RemovedInWagtail07Warning(PendingDeprecationWarning): + pass diff --git a/wagtail/wagtailadmin/forms.py b/wagtail/wagtailadmin/forms.py index e9b10f63c..866ce66a1 100644 --- a/wagtail/wagtailadmin/forms.py +++ b/wagtail/wagtailadmin/forms.py @@ -2,7 +2,8 @@ from django import forms from django.contrib.auth import get_user_model from django.contrib.auth.forms import AuthenticationForm, PasswordResetForm from django.utils.translation import ugettext as _ -from django.utils.translation import ugettext_lazy +from django.utils.translation import ungettext, ugettext_lazy + class SearchForm(forms.Form): def __init__(self, *args, **kwargs): @@ -77,6 +78,53 @@ class PasswordResetForm(PasswordResetForm): return cleaned_data +class CopyForm(forms.Form): + def __init__(self, *args, **kwargs): + # CopyPage must be passed a 'page' kwarg indicating the page to be copied + self.page = kwargs.pop('page') + can_publish = kwargs.pop('can_publish') + super(CopyForm, self).__init__(*args, **kwargs) + + self.fields['new_title'] = forms.CharField(initial=self.page.title, label=_("New title")) + self.fields['new_slug'] = forms.SlugField(initial=self.page.slug, label=_("New slug")) + + pages_to_copy = self.page.get_descendants(inclusive=True) + subpage_count = pages_to_copy.count() - 1 + if subpage_count > 0: + self.fields['copy_subpages'] = forms.BooleanField( + required=False, initial=True, label=_("Copy subpages"), + help_text=ungettext( + "This will copy %(count)s subpage.", + "This will copy %(count)s subpages.", + subpage_count) % {'count': subpage_count}) + + if can_publish: + pages_to_publish_count = pages_to_copy.live().count() + if pages_to_publish_count > 0: + # In the specific case that there are no subpages, customise the field label and help text + if subpage_count == 0: + label = _("Publish copied page") + help_text = _("This page is live. Would you like to publish its copy as well?") + else: + label = _("Publish copies") + help_text = ungettext( + "%(count)s of the pages being copied is live. Would you like to publish its copy?", + "%(count)s of the pages being copied are live. Would you like to publish their copies?", + pages_to_publish_count) % {'count': pages_to_publish_count} + + self.fields['publish_copies'] = forms.BooleanField( + required=False, initial=True, label=label, help_text=help_text + ) + + def clean_new_slug(self): + # Make sure the slug isn't already in use + slug = self.cleaned_data['new_slug'] + + if self.page.get_siblings(inclusive=True).filter(slug=slug).count(): + raise forms.ValidationError(_("This slug is already in use")) + return slug + + class PageViewRestrictionForm(forms.Form): restriction_type = forms.ChoiceField(label="Visibility", choices=[ ('none', ugettext_lazy("Public")), diff --git a/wagtail/wagtailadmin/hooks.py b/wagtail/wagtailadmin/hooks.py index 989c43bd8..8c8a2374a 100644 --- a/wagtail/wagtailadmin/hooks.py +++ b/wagtail/wagtailadmin/hooks.py @@ -3,9 +3,12 @@ import warnings +from wagtail.utils.deprecation import RemovedInWagtail06Warning + + warnings.warn( "The wagtail.wagtailadmin.hooks module has been moved. " - "Use wagtail.wagtailcore.hooks instead.", DeprecationWarning) + "Use wagtail.wagtailcore.hooks instead.", RemovedInWagtail06Warning) from wagtail.wagtailcore.hooks import register, get_hooks diff --git a/wagtail/wagtailadmin/locale/bg/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/bg/LC_MESSAGES/django.po index 562920910..1a6739d18 100644 --- a/wagtail/wagtailadmin/locale/bg/LC_MESSAGES/django.po +++ b/wagtail/wagtailadmin/locale/bg/LC_MESSAGES/django.po @@ -1,23 +1,22 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: -# LyuboslavPetrov <petrov.lyuboslav@gmail.com>, 2014 -# LyuboslavPetrov <petrov.lyuboslav@gmail.com>, 2014 +# Lyuboslav Petrov <petrov.lyuboslav@gmail.com>, 2014 +# Lyuboslav Petrov <petrov.lyuboslav@gmail.com>, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:41+0000\n" -"PO-Revision-Date: 2014-03-14 21:12+0000\n" -"Last-Translator: serafeim <serafeim@torchbox.com>\n" -"Language-Team: Bulgarian (http://www.transifex.com/projects/p/wagtail/" -"language/bg/)\n" -"Language: bg\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Bulgarian (http://www.transifex.com/projects/p/wagtail/language/bg/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: bg\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: edit_handlers.py:627 @@ -28,58 +27,100 @@ msgstr "" msgid "Common page configuration" msgstr "" -#: forms.py:18 +#: forms.py:19 msgid "Search term" msgstr "Фраза за търсене" -#: forms.py:42 +#: forms.py:43 msgid "Enter your username" msgstr "" -#: forms.py:45 +#: forms.py:46 msgid "Enter password" msgstr "" -#: forms.py:50 +#: forms.py:51 msgid "Enter your email address to reset your password" msgstr "Въведете вашият имейл адрес за да си възстановите паролата" -#: forms.py:59 +#: forms.py:60 msgid "Please fill your email address." msgstr "Моля въведете вашият имейл адрес." -#: forms.py:72 +#: forms.py:73 msgid "" "Sorry, you cannot reset your password here as your user account is managed " "by another server." -msgstr "" -"Не можете да възстановите паролата си тук, понеже акаунта ви се менижира от " -"друг сървър." +msgstr "Не можете да възстановите паролата си тук, понеже акаунта ви се менижира от друг сървър." -#: forms.py:75 +#: forms.py:76 msgid "This email address is not recognised." msgstr "Този имейл не е разпознат." -#: forms.py:82 templates/wagtailadmin/pages/_privacy_indicator.html:13 -#: templates/wagtailadmin/pages/_privacy_indicator.html:18 -#, fuzzy -msgid "Public" -msgstr "Публикувай" +#: forms.py:88 +msgid "New title" +msgstr "" -#: forms.py:83 +#: forms.py:89 +msgid "New slug" +msgstr "" + +#: forms.py:95 +msgid "Copy subpages" +msgstr "" + +#: forms.py:97 +#, python-format +msgid "This will copy %(count)s subpage." +msgid_plural "This will copy %(count)s subpages." +msgstr[0] "" +msgstr[1] "" + +#: forms.py:106 +msgid "Publish copied page" +msgstr "" + +#: forms.py:107 +msgid "This page is live. Would you like to publish its copy as well?" +msgstr "" + +#: forms.py:109 +msgid "Publish copies" +msgstr "" + +#: forms.py:111 +#, python-format +msgid "" +"%(count)s of the pages being copied is live. Would you like to publish its " +"copy?" +msgid_plural "" +"%(count)s of the pages being copied are live. Would you like to publish " +"their copies?" +msgstr[0] "" +msgstr[1] "" + +#: forms.py:124 views/pages.py:155 views/pages.py:272 +msgid "This slug is already in use" +msgstr "Този слъг е вече в употреба" + +#: forms.py:130 templates/wagtailadmin/pages/_privacy_indicator.html:13 +#: templates/wagtailadmin/pages/_privacy_indicator.html:18 +msgid "Public" +msgstr "" + +#: forms.py:131 msgid "Private, accessible with the following password" msgstr "" -#: forms.py:91 -#, fuzzy +#: forms.py:139 msgid "This field is required." -msgstr "Този имейл не е разпознат." +msgstr "" #: templates/wagtailadmin/base.html:7 templates/wagtailadmin/home.html:4 msgid "Dashboard" msgstr "Работно Табло" -#: templates/wagtailadmin/base.html:31 +#: templates/wagtailadmin/base.html:27 msgid "Menu" msgstr "Меню" @@ -92,9 +133,7 @@ msgstr "Добре дошъл в %(site_name)s Wagtail CMS" msgid "" "This is your dashboard on which helpful information about content you've " "created will be displayed." -msgstr "" -"Това е вашето работно табло, където ще бъде показана полезна информация за " -"контент, който сте създали." +msgstr "Това е вашето работно табло, където ще бъде показана полезна информация за контент, който сте създали." #: templates/wagtailadmin/login.html:4 templates/wagtailadmin/login.html:59 msgid "Sign in" @@ -126,10 +165,7 @@ msgid "" "Your avatar image is provided by Gravatar and is connected to your email " "address. With a Gravatar account you can set an avatar for any number of " "other email addresses you use." -msgstr "" -"Снимката за вашият Аватар е предоставена от Gravatar и е свързана с вашия " -"имейл адрес. Със сметка в Gravatar можете да зададете аватар за произволен " -"брой други имейл адреси, които използвате." +msgstr "Снимката за вашият Аватар е предоставена от Gravatar и е свързана с вашия имейл адрес. Със сметка в Gravatar можете да зададете аватар за произволен брой други имейл адреси, които използвате." #: templates/wagtailadmin/account/account.html:25 #: templates/wagtailadmin/account/change_password.html:4 @@ -156,9 +192,7 @@ msgstr "Смени парола" #: templates/wagtailadmin/account/change_password.html:21 msgid "" "Your password can't be changed here. Please contact a site administrator." -msgstr "" -"Вашата парола не може да бъде променена тук. Моля свържете се с " -"администратора на сайта." +msgstr "Вашата парола не може да бъде променена тук. Моля свържете се с администратора на сайта." #: templates/wagtailadmin/account/notification_preferences.html:4 #: templates/wagtailadmin/account/notification_preferences.html:6 @@ -232,12 +266,12 @@ msgstr "Имейл линк" #: templates/wagtailadmin/chooser/_search_form.html:7 #: templates/wagtailadmin/pages/search.html:3 #: templates/wagtailadmin/pages/search.html:16 -#: templatetags/wagtailadmin_tags.py:35 +#: templatetags/wagtailadmin_tags.py:36 msgid "Search" msgstr "Търсене" #: templates/wagtailadmin/chooser/_search_results.html:3 -#: templatetags/wagtailadmin_tags.py:34 +#: templatetags/wagtailadmin_tags.py:35 msgid "Explorer" msgstr "Файлов мениджър" @@ -251,12 +285,8 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "" -"\n" -"Има едно съвпадение" -msgstr[1] "" -"\n" -"Има %(counter)s съвпадения" +msgstr[0] "\nИма едно съвпадение" +msgstr[1] "\nИма %(counter)s съвпадения" #: templates/wagtailadmin/chooser/browse.html:2 #: templates/wagtailadmin/chooser/search.html:2 @@ -301,7 +331,7 @@ msgstr "Надолу" #: templates/wagtailadmin/pages/confirm_delete.html:7 #: templates/wagtailadmin/pages/edit.html:45 #: templates/wagtailadmin/pages/list.html:84 -#: templates/wagtailadmin/pages/list.html:202 +#: templates/wagtailadmin/pages/list.html:205 msgid "Delete" msgstr "Изтрий" @@ -413,14 +443,8 @@ msgid_plural "" "\n" " <span>%(total_pages)s</span> Pages\n" " " -msgstr[0] "" -"\n" -" <span>%(total_pages)s</span> Страница\n" -" " -msgstr[1] "" -"\n" -" <span>%(total_pages)s</span> Страници\n" -" " +msgstr[0] "\n <span>%(total_pages)s</span> Страница\n " +msgstr[1] "\n <span>%(total_pages)s</span> Страници\n " #: templates/wagtailadmin/home/site_summary.html:16 #, python-format @@ -432,12 +456,8 @@ msgid_plural "" "\n" " <span>%(total_images)s</span> Images\n" " " -msgstr[0] "" -"\n" -"<span>%(total_images)s</span> Изображение" -msgstr[1] "" -"\n" -"<span>%(total_images)s</span> Изображения" +msgstr[0] "\n<span>%(total_images)s</span> Изображение" +msgstr[1] "\n<span>%(total_images)s</span> Изображения" #: templates/wagtailadmin/home/site_summary.html:25 #, python-format @@ -449,12 +469,8 @@ msgid_plural "" "\n" " <span>%(total_docs)s</span> Documents\n" " " -msgstr[0] "" -"\n" -"<span>%(total_docs)s</span> Документ" -msgstr[1] "" -"\n" -"<span>%(total_docs)s</span> Документи" +msgstr[0] "\n<span>%(total_docs)s</span> Документ" +msgstr[1] "\n<span>%(total_docs)s</span> Документи" #: templates/wagtailadmin/notifications/approved.html:1 #, python-format @@ -513,9 +529,8 @@ msgid "This page has been made private by a parent page." msgstr "" #: templates/wagtailadmin/page_privacy/ancestor_privacy.html:7 -#, fuzzy msgid "You can edit the privacy settings on:" -msgstr "Можете да редактирате страницата тук:" +msgstr "" #: templates/wagtailadmin/page_privacy/set_privacy.html:6 msgid "<b>Note:</b> privacy changes apply to all children of this page too." @@ -525,12 +540,9 @@ msgstr "" #, python-format msgid "" "\n" -" Previewing '%(title)s', submitted by %(submitted_by)s on " -"%(submitted_on)s.\n" +" Previewing '%(title)s', submitted by %(submitted_by)s on %(submitted_on)s.\n" " " -msgstr "" -"\n" -"Преглед на '%(title)s', предоставена от %(submitted_by)s на %(submitted_on)s." +msgstr "\nПреглед на '%(title)s', предоставена от %(submitted_by)s на %(submitted_on)s." #: templates/wagtailadmin/pages/_privacy_indicator.html:9 msgid "Privacy" @@ -576,26 +588,16 @@ msgid "" " " msgid_plural "" "\n" -" This will also delete %(descendant_count)s more " -"subpages.\n" -" " -msgstr[0] "" -"\n" -" Това ще изтрие още една подстраница.\n" -" " -msgstr[1] "" -"\n" -" Това ще изтрие още %(descendant_count)s подстраници.\n" +" This will also delete %(descendant_count)s more subpages.\n" " " +msgstr[0] "\n Това ще изтрие още една подстраница.\n " +msgstr[1] "\n Това ще изтрие още %(descendant_count)s подстраници.\n " #: templates/wagtailadmin/pages/confirm_delete.html:22 msgid "" "Alternatively you can unpublish the page. This removes the page from public " "view and you can edit or publish it again later." -msgstr "" -"Като алтернатива можете да прекратите публикуването на страницата. Това " -"премахва страницата от обществен достъп и ще можете да редактирате или да го " -"публикувате отново по-късно." +msgstr "Като алтернатива можете да прекратите публикуването на страницата. Това премахва страницата от обществен достъп и ще можете да редактирате или да го публикувате отново по-късно." #: templates/wagtailadmin/pages/confirm_delete.html:26 msgid "Delete it" @@ -626,9 +628,7 @@ msgstr "Сигурни ли сте, че желаете да преместит msgid "" "Are you sure you want to move this page and all of its children into " "'%(title)s'?" -msgstr "" -"Сигурни ли сте, че искате да преместите страницата и принадлежащите към нея " -"дъщерни страници в '%(title)s'?" +msgstr "Сигурни ли сте, че искате да преместите страницата и принадлежащите към нея дъщерни страници в '%(title)s'?" #: templates/wagtailadmin/pages/confirm_move.html:18 msgid "Yes, move this page" @@ -642,7 +642,7 @@ msgstr "Отмени публикуването на %(title)s" #: templates/wagtailadmin/pages/confirm_unpublish.html:6 #: templates/wagtailadmin/pages/edit.html:42 #: templates/wagtailadmin/pages/list.html:87 -#: templates/wagtailadmin/pages/list.html:205 +#: templates/wagtailadmin/pages/list.html:208 msgid "Unpublish" msgstr "Отмени публикуването" @@ -658,6 +658,20 @@ msgstr "Да, отмени публикуването" msgid "Pages using" msgstr "Страници използващи" +#: templates/wagtailadmin/pages/copy.html:3 +#, python-format +msgid "Copy %(title)s" +msgstr "" + +#: templates/wagtailadmin/pages/copy.html:6 +#: templates/wagtailadmin/pages/list.html:202 +msgid "Copy" +msgstr "" + +#: templates/wagtailadmin/pages/copy.html:26 +msgid "Copy this page" +msgstr "" + #: templates/wagtailadmin/pages/create.html:5 #, python-format msgid "New %(page_type)s" @@ -711,7 +725,7 @@ msgid "Exploring %(title)s" msgstr "Преглед на %(title)s" #: templates/wagtailadmin/pages/list.html:90 -#: templates/wagtailadmin/pages/list.html:208 +#: templates/wagtailadmin/pages/list.html:211 msgid "Add child page" msgstr "Добави дъщерна страница" @@ -732,53 +746,50 @@ msgstr "Позволете подредба на дъщерни страници msgid "Drag" msgstr "Плъзнете" -#: templates/wagtailadmin/pages/list.html:234 -#: templates/wagtailadmin/pages/list.html:238 +#: templates/wagtailadmin/pages/list.html:237 +#: templates/wagtailadmin/pages/list.html:241 #, python-format msgid "Explorer subpages of '%(title)s'" msgstr "Мениджър подстраници на '%(title)s'" -#: templates/wagtailadmin/pages/list.html:234 -#: templates/wagtailadmin/pages/list.html:238 -#: templates/wagtailadmin/pages/list.html:242 +#: templates/wagtailadmin/pages/list.html:237 +#: templates/wagtailadmin/pages/list.html:241 +#: templates/wagtailadmin/pages/list.html:245 msgid "Explore" msgstr "Мениджър" -#: templates/wagtailadmin/pages/list.html:242 +#: templates/wagtailadmin/pages/list.html:245 #, python-format -msgid "Explorer child pages of '%(title)s'" -msgstr "Мениджър на дъщерни страници на '%(title)s'" +msgid "Explore child pages of '%(title)s'" +msgstr "" -#: templates/wagtailadmin/pages/list.html:244 +#: templates/wagtailadmin/pages/list.html:247 #, python-format msgid "Add a child page to '%(title)s'" msgstr "Добавете дъщерна страница към '%(title)s'" -#: templates/wagtailadmin/pages/list.html:244 +#: templates/wagtailadmin/pages/list.html:247 msgid "Add subpage" msgstr "Добавете подстраница" -#: templates/wagtailadmin/pages/list.html:253 +#: templates/wagtailadmin/pages/list.html:256 msgid "No pages have been created." msgstr "Не бяха създадени никакви страници." -#: templates/wagtailadmin/pages/list.html:253 +#: templates/wagtailadmin/pages/list.html:256 #, python-format msgid "Why not <a href=\"%(add_page_url)s\">add one</a>?" msgstr "Защо не <a href=\"%(add_page_url)s\">добавите една</a>?" -#: templates/wagtailadmin/pages/list.html:260 -#, fuzzy, python-format +#: templates/wagtailadmin/pages/list.html:263 +#, python-format msgid "" "\n" " Page %(page_number)s of %(num_pages)s.\n" " " msgstr "" -"\n" -" Страница %(page_number)s от %(num_pages)s.\n" -" " -#: templates/wagtailadmin/pages/list.html:266 +#: templates/wagtailadmin/pages/list.html:269 #: templates/wagtailadmin/pages/search_results.html:35 #: templates/wagtailadmin/pages/search_results.html:37 #: templates/wagtailadmin/pages/usage_results.html:13 @@ -788,7 +799,7 @@ msgstr "" msgid "Previous" msgstr "Предишно" -#: templates/wagtailadmin/pages/list.html:271 +#: templates/wagtailadmin/pages/list.html:274 #: templates/wagtailadmin/pages/search_results.html:44 #: templates/wagtailadmin/pages/search_results.html:46 #: templates/wagtailadmin/pages/usage_results.html:18 @@ -809,7 +820,7 @@ msgid "Select a new parent page for <span>%(title)s</span>" msgstr "Изберете нова страница родител за <span>%(title)s</span>" #: templates/wagtailadmin/pages/search_results.html:6 -#, fuzzy, python-format +#, python-format msgid "" "\n" " There is one matching page\n" @@ -819,13 +830,7 @@ msgid_plural "" " There are %(counter)s matching pages\n" " " msgstr[0] "" -"\n" -" Има едно съвпадение\n" -" " msgstr[1] "" -"\n" -" Има %(counter)s съвпадения\n" -" " #: templates/wagtailadmin/pages/search_results.html:16 msgid "Other searches" @@ -850,10 +855,7 @@ msgid "" "\n" " Page %(page_number)s of %(num_pages)s.\n" " " -msgstr "" -"\n" -" Страница %(page_number)s от %(num_pages)s.\n" -" " +msgstr "\n Страница %(page_number)s от %(num_pages)s.\n " #: templates/wagtailadmin/pages/search_results.html:54 #, python-format @@ -865,9 +867,8 @@ msgid "Enter a search term above" msgstr "Добавете дума за търсене по-горе" #: templates/wagtailadmin/pages/usage_results.html:24 -#, fuzzy msgid "No pages use" -msgstr "Страници използващи" +msgstr "" #: templates/wagtailadmin/shared/breadcrumb.html:6 msgid "Home" @@ -882,9 +883,8 @@ msgid "February" msgstr "" #: templates/wagtailadmin/shared/datetimepicker_translations.html:8 -#, fuzzy msgid "March" -msgstr "Търсене" +msgstr "" #: templates/wagtailadmin/shared/datetimepicker_translations.html:9 msgid "April" @@ -947,9 +947,15 @@ msgid "Fri" msgstr "" #: templates/wagtailadmin/shared/datetimepicker_translations.html:26 -#, fuzzy msgid "Sat" -msgstr "Статус" +msgstr "" + +#: templates/wagtailadmin/shared/header.html:23 +#, python-format +msgid "Used %(useage_count)s time" +msgid_plural "Used %(useage_count)s times" +msgstr[0] "" +msgstr[1] "" #: templates/wagtailadmin/shared/main_nav.html:10 msgid "Account settings" @@ -965,9 +971,8 @@ msgid "Page %(page_num)s of %(total_pages)s." msgstr "Страница %(page_num)s от %(total_pages)s." #: templates/wagtailadmin/userbar/base.html:4 -#, fuzzy msgid "User bar" -msgstr "Потребители" +msgstr "" #: templates/wagtailadmin/userbar/base.html:14 msgid "Go to Wagtail admin interface" @@ -986,121 +991,69 @@ msgid "Your password has been changed successfully!" msgstr "Паролата ви бе променена успешно!" #: views/account.py:60 -#, fuzzy msgid "Your preferences have been updated successfully!" -msgstr "Паролата ви бе променена успешно!" +msgstr "" -#: views/pages.py:146 views/pages.py:263 -msgid "This slug is already in use" -msgstr "Този слъг е вече в употреба" - -#: views/pages.py:160 views/pages.py:277 +#: views/pages.py:169 views/pages.py:286 msgid "Go live date/time must be before expiry date/time" msgstr "" -#: views/pages.py:170 views/pages.py:287 +#: views/pages.py:179 views/pages.py:296 msgid "Expiry date/time must be in the future" msgstr "" -#: views/pages.py:210 views/pages.py:334 views/pages.py:707 +#: views/pages.py:219 views/pages.py:351 views/pages.py:791 msgid "Page '{0}' published." msgstr "Страница '{0}' е публикувана." -#: views/pages.py:212 views/pages.py:336 +#: views/pages.py:221 views/pages.py:353 msgid "Page '{0}' submitted for moderation." msgstr "Страница '{0}' е предоставена за модерация." -#: views/pages.py:215 +#: views/pages.py:224 msgid "Page '{0}' created." msgstr "Страница '{0}' е създадена." -#: views/pages.py:224 -#, fuzzy +#: views/pages.py:233 msgid "The page could not be created due to validation errors" -msgstr "Тази страница не можеше да бъде запазена поради валидационни грешки" +msgstr "" -#: views/pages.py:339 +#: views/pages.py:356 msgid "Page '{0}' updated." msgstr "Страница '{0}' обновена." -#: views/pages.py:348 +#: views/pages.py:365 msgid "The page could not be saved due to validation errors" msgstr "Тази страница не можеше да бъде запазена поради валидационни грешки" -#: views/pages.py:361 +#: views/pages.py:378 msgid "This page is currently awaiting moderation" msgstr "Тази страница очаква да бъде модерирана" -#: views/pages.py:381 +#: views/pages.py:409 msgid "Page '{0}' deleted." msgstr "Страница '{0}' е изтрита." -#: views/pages.py:543 +#: views/pages.py:575 msgid "Page '{0}' unpublished." msgstr "Страница '{0}' отменена от публикуване." -#: views/pages.py:594 +#: views/pages.py:627 msgid "Page '{0}' moved." msgstr "Страница '{0}' преместена." -#: views/pages.py:701 views/pages.py:720 views/pages.py:740 +#: views/pages.py:709 +msgid "Page '{0}' and {1} subpages copied." +msgstr "" + +#: views/pages.py:711 +msgid "Page '{0}' copied." +msgstr "" + +#: views/pages.py:785 views/pages.py:804 views/pages.py:824 msgid "The page '{0}' is not currently awaiting moderation." msgstr "Страница '{0}' не очаква да бъде модерирана." -#: views/pages.py:726 +#: views/pages.py:810 msgid "Page '{0}' rejected for publication." msgstr "Страница '{0}' отхвърлена от публикуване." - -#~ msgid "Please type a valid time" -#~ msgstr "Моля въведете валидно време" - -#~ msgid "View draft" -#~ msgstr "Преглед на Чернова" - -#~ msgid "View live" -#~ msgstr "Преглед на живо" - -#~ msgid "Status:" -#~ msgstr "Статус:" - -#~ msgid "Where do you want to create a %(page_type)s" -#~ msgstr "Къде желаете да създадете %(page_type)s" - -#~ msgid "Where do you want to create this" -#~ msgstr "Къде желаете да създадете това" - -#~ msgid "Create a new page" -#~ msgstr "Създадете нова страница" - -#~ msgid "" -#~ "Your new page will be saved in the <em>top level</em> of your website. " -#~ "You can move it after saving." -#~ msgstr "" -#~ "Вашата нова страница ще бъде записана в най-горното ниво на вашия сайт. " -#~ "Можете да я преместите, след като запазите." - -#~ msgid "More" -#~ msgstr "Повече" - -#~ msgid "Redirects" -#~ msgstr "Пренасочвания" - -#~ msgid "Editors Picks" -#~ msgstr "Избрано от Редактора" - -#~ msgid "Snippets" -#~ msgstr "Откъси от код" - -#~ msgid "" -#~ "Sorry, you do not have access to create a page of type <em>'{0}'</em>." -#~ msgstr "Нямата права за да създадете страница от тип <em>'{0}'</em>." - -#~ msgid "" -#~ "Pages of this type can only be created as children of <em>'{0}'</em>. " -#~ "This new page will be saved there." -#~ msgstr "" -#~ "Страници от този тип могат само да бъдат създавани като дъщерни на " -#~ "<em>'{0}'</em>. Новата страница ще бъде запазена тук." - -#~ msgid "The page could not be created due to errors." -#~ msgstr "Страницата не беше създадена поради грешки." diff --git a/wagtail/wagtailadmin/locale/ca/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/ca/LC_MESSAGES/django.po index 6771d0d19..b24a5c00a 100644 --- a/wagtail/wagtailadmin/locale/ca/LC_MESSAGES/django.po +++ b/wagtail/wagtailadmin/locale/ca/LC_MESSAGES/django.po @@ -1,22 +1,21 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: -# Lloople <d.lloople@gmail.com>, 2014 +# David Llop <d.lloople@gmail.com>, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:41+0000\n" -"PO-Revision-Date: 2014-03-14 21:58+0000\n" -"Last-Translator: Lloople <d.lloople@gmail.com>\n" -"Language-Team: Catalan (http://www.transifex.com/projects/p/wagtail/language/" -"ca/)\n" -"Language: ca\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Catalan (http://www.transifex.com/projects/p/wagtail/language/ca/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ca\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: edit_handlers.py:627 @@ -27,58 +26,100 @@ msgstr "" msgid "Common page configuration" msgstr "Configuració de la pàgina comú" -#: forms.py:18 +#: forms.py:19 msgid "Search term" msgstr "Termini de cerca" -#: forms.py:42 +#: forms.py:43 msgid "Enter your username" msgstr "Introdueix el teu nom d'usuari" -#: forms.py:45 +#: forms.py:46 msgid "Enter password" msgstr "Introdueix la contrassenya" -#: forms.py:50 +#: forms.py:51 msgid "Enter your email address to reset your password" msgstr "Escriu el teu correu per reiniciar la teva contrasenya" -#: forms.py:59 +#: forms.py:60 msgid "Please fill your email address." msgstr "Si us plau escriu el teu correu" -#: forms.py:72 +#: forms.py:73 msgid "" "Sorry, you cannot reset your password here as your user account is managed " "by another server." -msgstr "" -"Ho sentim, no pots reiniciar la teva contrasenya aquí ja que la teva conta " -"d'usuari es administrada per un altre servidor" +msgstr "Ho sentim, no pots reiniciar la teva contrasenya aquí ja que la teva conta d'usuari es administrada per un altre servidor" -#: forms.py:75 +#: forms.py:76 msgid "This email address is not recognised." msgstr "No es reconeix aquesta adreça de correu" -#: forms.py:82 templates/wagtailadmin/pages/_privacy_indicator.html:13 -#: templates/wagtailadmin/pages/_privacy_indicator.html:18 -#, fuzzy -msgid "Public" -msgstr "Publica" +#: forms.py:88 +msgid "New title" +msgstr "" -#: forms.py:83 +#: forms.py:89 +msgid "New slug" +msgstr "" + +#: forms.py:95 +msgid "Copy subpages" +msgstr "" + +#: forms.py:97 +#, python-format +msgid "This will copy %(count)s subpage." +msgid_plural "This will copy %(count)s subpages." +msgstr[0] "" +msgstr[1] "" + +#: forms.py:106 +msgid "Publish copied page" +msgstr "" + +#: forms.py:107 +msgid "This page is live. Would you like to publish its copy as well?" +msgstr "" + +#: forms.py:109 +msgid "Publish copies" +msgstr "" + +#: forms.py:111 +#, python-format +msgid "" +"%(count)s of the pages being copied is live. Would you like to publish its " +"copy?" +msgid_plural "" +"%(count)s of the pages being copied are live. Would you like to publish " +"their copies?" +msgstr[0] "" +msgstr[1] "" + +#: forms.py:124 views/pages.py:155 views/pages.py:272 +msgid "This slug is already in use" +msgstr "Aquest llimac ja està en ús" + +#: forms.py:130 templates/wagtailadmin/pages/_privacy_indicator.html:13 +#: templates/wagtailadmin/pages/_privacy_indicator.html:18 +msgid "Public" +msgstr "" + +#: forms.py:131 msgid "Private, accessible with the following password" msgstr "" -#: forms.py:91 -#, fuzzy +#: forms.py:139 msgid "This field is required." -msgstr "No es reconeix aquesta adreça de correu" +msgstr "" #: templates/wagtailadmin/base.html:7 templates/wagtailadmin/home.html:4 msgid "Dashboard" msgstr "Tauler de control" -#: templates/wagtailadmin/base.html:31 +#: templates/wagtailadmin/base.html:27 msgid "Menu" msgstr "Menú" @@ -91,9 +132,7 @@ msgstr "Benvingut al Wagtail CMS del lloc %(site_name)s" msgid "" "This is your dashboard on which helpful information about content you've " "created will be displayed." -msgstr "" -"Aquest es el teu tauler de control on es mostrarà informació útil sobre el " -"contingut que has creat" +msgstr "Aquest es el teu tauler de control on es mostrarà informació útil sobre el contingut que has creat" #: templates/wagtailadmin/login.html:4 templates/wagtailadmin/login.html:59 msgid "Sign in" @@ -101,9 +140,7 @@ msgstr "Registra't" #: templates/wagtailadmin/login.html:18 msgid "Your username and password didn't match. Please try again." -msgstr "" -"El teu nom d'usuari i la teva contrasenya no coincideixen. Si us plau torna-" -"ho a intentar" +msgstr "El teu nom d'usuari i la teva contrasenya no coincideixen. Si us plau torna-ho a intentar" #: templates/wagtailadmin/login.html:26 msgid "Sign in to Wagtail" @@ -127,10 +164,7 @@ msgid "" "Your avatar image is provided by Gravatar and is connected to your email " "address. With a Gravatar account you can set an avatar for any number of " "other email addresses you use." -msgstr "" -"La teva imatge de perfil és subministrada per Gravatar i està conectada al " -"teu correu. Amb una conta de Gravatar pots definir una imatge de perfil per " -"cadascuna de la resta d'adreces de correu que fas servir." +msgstr "La teva imatge de perfil és subministrada per Gravatar i està conectada al teu correu. Amb una conta de Gravatar pots definir una imatge de perfil per cadascuna de la resta d'adreces de correu que fas servir." #: templates/wagtailadmin/account/account.html:25 #: templates/wagtailadmin/account/change_password.html:4 @@ -157,9 +191,7 @@ msgstr "Canvia la contrasenya" #: templates/wagtailadmin/account/change_password.html:21 msgid "" "Your password can't be changed here. Please contact a site administrator." -msgstr "" -"La teva contrasenya no es pot canviar des d'aquí. Si us plau contacta amb " -"l'administrador de la web" +msgstr "La teva contrasenya no es pot canviar des d'aquí. Si us plau contacta amb l'administrador de la web" #: templates/wagtailadmin/account/notification_preferences.html:4 #: templates/wagtailadmin/account/notification_preferences.html:6 @@ -233,12 +265,12 @@ msgstr "Enllaç de correu electrònic" #: templates/wagtailadmin/chooser/_search_form.html:7 #: templates/wagtailadmin/pages/search.html:3 #: templates/wagtailadmin/pages/search.html:16 -#: templatetags/wagtailadmin_tags.py:35 +#: templatetags/wagtailadmin_tags.py:36 msgid "Search" msgstr "Cercar" #: templates/wagtailadmin/chooser/_search_results.html:3 -#: templatetags/wagtailadmin_tags.py:34 +#: templatetags/wagtailadmin_tags.py:35 msgid "Explorer" msgstr "Explorador" @@ -252,12 +284,8 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "" -"\n" -"Hi ha un resultat" -msgstr[1] "" -"\n" -"Hi han %(counter)s resultats" +msgstr[0] "\nHi ha un resultat" +msgstr[1] "\nHi han %(counter)s resultats" #: templates/wagtailadmin/chooser/browse.html:2 #: templates/wagtailadmin/chooser/search.html:2 @@ -302,7 +330,7 @@ msgstr "Baixa" #: templates/wagtailadmin/pages/confirm_delete.html:7 #: templates/wagtailadmin/pages/edit.html:45 #: templates/wagtailadmin/pages/list.html:84 -#: templates/wagtailadmin/pages/list.html:202 +#: templates/wagtailadmin/pages/list.html:205 msgid "Delete" msgstr "Esborra" @@ -414,12 +442,8 @@ msgid_plural "" "\n" " <span>%(total_pages)s</span> Pages\n" " " -msgstr[0] "" -"\n" -"<span>%(total_pages)s</span> Pàgina" -msgstr[1] "" -"\n" -"<span>%(total_pages)s</span>Pàgines" +msgstr[0] "\n<span>%(total_pages)s</span> Pàgina" +msgstr[1] "\n<span>%(total_pages)s</span>Pàgines" #: templates/wagtailadmin/home/site_summary.html:16 #, python-format @@ -431,12 +455,8 @@ msgid_plural "" "\n" " <span>%(total_images)s</span> Images\n" " " -msgstr[0] "" -"\n" -"<span>%(total_images)s</span> Imatge" -msgstr[1] "" -"\n" -"<span>%(total_images)s</span> Imatges" +msgstr[0] "\n<span>%(total_images)s</span> Imatge" +msgstr[1] "\n<span>%(total_images)s</span> Imatges" #: templates/wagtailadmin/home/site_summary.html:25 #, python-format @@ -448,12 +468,8 @@ msgid_plural "" "\n" " <span>%(total_docs)s</span> Documents\n" " " -msgstr[0] "" -"\n" -"<span>%(total_docs)s</span> Document" -msgstr[1] "" -"\n" -"<span>%(total_docs)s</span> Documents" +msgstr[0] "\n<span>%(total_docs)s</span> Document" +msgstr[1] "\n<span>%(total_docs)s</span> Documents" #: templates/wagtailadmin/notifications/approved.html:1 #, python-format @@ -512,9 +528,8 @@ msgid "This page has been made private by a parent page." msgstr "" #: templates/wagtailadmin/page_privacy/ancestor_privacy.html:7 -#, fuzzy msgid "You can edit the privacy settings on:" -msgstr "Pots editar la pàgina aquí:" +msgstr "" #: templates/wagtailadmin/page_privacy/set_privacy.html:6 msgid "<b>Note:</b> privacy changes apply to all children of this page too." @@ -524,12 +539,9 @@ msgstr "" #, python-format msgid "" "\n" -" Previewing '%(title)s', submitted by %(submitted_by)s on " -"%(submitted_on)s.\n" +" Previewing '%(title)s', submitted by %(submitted_by)s on %(submitted_on)s.\n" " " -msgstr "" -"\n" -"Previsualitzant '%(title)s, enviada per %(submitted_by)s el %(submitted_on)s." +msgstr "\nPrevisualitzant '%(title)s, enviada per %(submitted_by)s el %(submitted_on)s." #: templates/wagtailadmin/pages/_privacy_indicator.html:9 msgid "Privacy" @@ -575,23 +587,16 @@ msgid "" " " msgid_plural "" "\n" -" This will also delete %(descendant_count)s more " -"subpages.\n" +" This will also delete %(descendant_count)s more subpages.\n" " " -msgstr[0] "" -"\n" -"Això també esborrarà una subpàgina més." -msgstr[1] "" -"\n" -"Això també esborrarà %(descendant_count)s subpàgines més." +msgstr[0] "\nAixò també esborrarà una subpàgina més." +msgstr[1] "\nAixò també esborrarà %(descendant_count)s subpàgines més." #: templates/wagtailadmin/pages/confirm_delete.html:22 msgid "" "Alternatively you can unpublish the page. This removes the page from public " "view and you can edit or publish it again later." -msgstr "" -"Alternativament pots despublicar la pàgina. Això treu la pàgina de la vista " -"pública i podràs editar-la o tornar-la a publicar desprès." +msgstr "Alternativament pots despublicar la pàgina. Això treu la pàgina de la vista pública i podràs editar-la o tornar-la a publicar desprès." #: templates/wagtailadmin/pages/confirm_delete.html:26 msgid "Delete it" @@ -622,9 +627,7 @@ msgstr "Estàs segur que vols moure aquesta pàgina dins de '%(title)s'?" msgid "" "Are you sure you want to move this page and all of its children into " "'%(title)s'?" -msgstr "" -"Estàs segur que vols moure aquesta pàgina i els seus fills dins de " -"'%(title)s'?" +msgstr "Estàs segur que vols moure aquesta pàgina i els seus fills dins de '%(title)s'?" #: templates/wagtailadmin/pages/confirm_move.html:18 msgid "Yes, move this page" @@ -638,7 +641,7 @@ msgstr "Despublica %(title)s" #: templates/wagtailadmin/pages/confirm_unpublish.html:6 #: templates/wagtailadmin/pages/edit.html:42 #: templates/wagtailadmin/pages/list.html:87 -#: templates/wagtailadmin/pages/list.html:205 +#: templates/wagtailadmin/pages/list.html:208 msgid "Unpublish" msgstr "Despublica" @@ -654,6 +657,20 @@ msgstr "Si, despublicar" msgid "Pages using" msgstr "Pàgines en ús" +#: templates/wagtailadmin/pages/copy.html:3 +#, python-format +msgid "Copy %(title)s" +msgstr "" + +#: templates/wagtailadmin/pages/copy.html:6 +#: templates/wagtailadmin/pages/list.html:202 +msgid "Copy" +msgstr "" + +#: templates/wagtailadmin/pages/copy.html:26 +msgid "Copy this page" +msgstr "" + #: templates/wagtailadmin/pages/create.html:5 #, python-format msgid "New %(page_type)s" @@ -707,7 +724,7 @@ msgid "Exploring %(title)s" msgstr "Explorant %(title)s" #: templates/wagtailadmin/pages/list.html:90 -#: templates/wagtailadmin/pages/list.html:208 +#: templates/wagtailadmin/pages/list.html:211 msgid "Add child page" msgstr "Afegeix una pàgina filla" @@ -728,52 +745,50 @@ msgstr "Activa l'ordenació de les pàgines fill" msgid "Drag" msgstr "Agafa" -#: templates/wagtailadmin/pages/list.html:234 -#: templates/wagtailadmin/pages/list.html:238 +#: templates/wagtailadmin/pages/list.html:237 +#: templates/wagtailadmin/pages/list.html:241 #, python-format msgid "Explorer subpages of '%(title)s'" msgstr "Explora les subpàgines de '%(title)s'" -#: templates/wagtailadmin/pages/list.html:234 -#: templates/wagtailadmin/pages/list.html:238 -#: templates/wagtailadmin/pages/list.html:242 +#: templates/wagtailadmin/pages/list.html:237 +#: templates/wagtailadmin/pages/list.html:241 +#: templates/wagtailadmin/pages/list.html:245 msgid "Explore" msgstr "Explora" -#: templates/wagtailadmin/pages/list.html:242 +#: templates/wagtailadmin/pages/list.html:245 #, python-format -msgid "Explorer child pages of '%(title)s'" -msgstr "Explora les pàgines filles de '%(title)s'" +msgid "Explore child pages of '%(title)s'" +msgstr "" -#: templates/wagtailadmin/pages/list.html:244 +#: templates/wagtailadmin/pages/list.html:247 #, python-format msgid "Add a child page to '%(title)s'" msgstr "Afegeix una pàgina filla a '%(title)s'" -#: templates/wagtailadmin/pages/list.html:244 +#: templates/wagtailadmin/pages/list.html:247 msgid "Add subpage" msgstr "Afegeix subpàgina" -#: templates/wagtailadmin/pages/list.html:253 +#: templates/wagtailadmin/pages/list.html:256 msgid "No pages have been created." msgstr "No s'han creat pàgines." -#: templates/wagtailadmin/pages/list.html:253 +#: templates/wagtailadmin/pages/list.html:256 #, python-format msgid "Why not <a href=\"%(add_page_url)s\">add one</a>?" msgstr "Per què no <a href=\"%(add_page_url)s\">afegeixes una</a>?" -#: templates/wagtailadmin/pages/list.html:260 -#, fuzzy, python-format +#: templates/wagtailadmin/pages/list.html:263 +#, python-format msgid "" "\n" " Page %(page_number)s of %(num_pages)s.\n" " " msgstr "" -"\n" -"Pàgina %(page_number)s de %(num_pages)s." -#: templates/wagtailadmin/pages/list.html:266 +#: templates/wagtailadmin/pages/list.html:269 #: templates/wagtailadmin/pages/search_results.html:35 #: templates/wagtailadmin/pages/search_results.html:37 #: templates/wagtailadmin/pages/usage_results.html:13 @@ -783,7 +798,7 @@ msgstr "" msgid "Previous" msgstr "Anterior" -#: templates/wagtailadmin/pages/list.html:271 +#: templates/wagtailadmin/pages/list.html:274 #: templates/wagtailadmin/pages/search_results.html:44 #: templates/wagtailadmin/pages/search_results.html:46 #: templates/wagtailadmin/pages/usage_results.html:18 @@ -804,7 +819,7 @@ msgid "Select a new parent page for <span>%(title)s</span>" msgstr "Selecciona una nova pàgina pare per <span>%(title)s</span>" #: templates/wagtailadmin/pages/search_results.html:6 -#, fuzzy, python-format +#, python-format msgid "" "\n" " There is one matching page\n" @@ -814,11 +829,7 @@ msgid_plural "" " There are %(counter)s matching pages\n" " " msgstr[0] "" -"\n" -"Hi ha un resultat" msgstr[1] "" -"\n" -"Hi han %(counter)s resultats" #: templates/wagtailadmin/pages/search_results.html:16 msgid "Other searches" @@ -843,9 +854,7 @@ msgid "" "\n" " Page %(page_number)s of %(num_pages)s.\n" " " -msgstr "" -"\n" -"Pàgina %(page_number)s de %(num_pages)s." +msgstr "\nPàgina %(page_number)s de %(num_pages)s." #: templates/wagtailadmin/pages/search_results.html:54 #, python-format @@ -857,9 +866,8 @@ msgid "Enter a search term above" msgstr "Introdueix un terme de cerca abaix" #: templates/wagtailadmin/pages/usage_results.html:24 -#, fuzzy msgid "No pages use" -msgstr "Pàgines en ús" +msgstr "" #: templates/wagtailadmin/shared/breadcrumb.html:6 msgid "Home" @@ -874,9 +882,8 @@ msgid "February" msgstr "" #: templates/wagtailadmin/shared/datetimepicker_translations.html:8 -#, fuzzy msgid "March" -msgstr "Cercar" +msgstr "" #: templates/wagtailadmin/shared/datetimepicker_translations.html:9 msgid "April" @@ -939,9 +946,15 @@ msgid "Fri" msgstr "" #: templates/wagtailadmin/shared/datetimepicker_translations.html:26 -#, fuzzy msgid "Sat" -msgstr "Estat" +msgstr "" + +#: templates/wagtailadmin/shared/header.html:23 +#, python-format +msgid "Used %(useage_count)s time" +msgid_plural "Used %(useage_count)s times" +msgstr[0] "" +msgstr[1] "" #: templates/wagtailadmin/shared/main_nav.html:10 msgid "Account settings" @@ -957,9 +970,8 @@ msgid "Page %(page_num)s of %(total_pages)s." msgstr "Pàgina %(page_num)s de %(total_pages)s." #: templates/wagtailadmin/userbar/base.html:4 -#, fuzzy msgid "User bar" -msgstr "Usuaris" +msgstr "" #: templates/wagtailadmin/userbar/base.html:14 msgid "Go to Wagtail admin interface" @@ -978,122 +990,69 @@ msgid "Your password has been changed successfully!" msgstr "S'ha canviat la teva contrasenya!" #: views/account.py:60 -#, fuzzy msgid "Your preferences have been updated successfully!" -msgstr "S'ha canviat la teva contrasenya!" +msgstr "" -#: views/pages.py:146 views/pages.py:263 -msgid "This slug is already in use" -msgstr "Aquest llimac ja està en ús" - -#: views/pages.py:160 views/pages.py:277 +#: views/pages.py:169 views/pages.py:286 msgid "Go live date/time must be before expiry date/time" msgstr "" -#: views/pages.py:170 views/pages.py:287 +#: views/pages.py:179 views/pages.py:296 msgid "Expiry date/time must be in the future" msgstr "" -#: views/pages.py:210 views/pages.py:334 views/pages.py:707 +#: views/pages.py:219 views/pages.py:351 views/pages.py:791 msgid "Page '{0}' published." msgstr "Pàgina '{0}' publicada." -#: views/pages.py:212 views/pages.py:336 +#: views/pages.py:221 views/pages.py:353 msgid "Page '{0}' submitted for moderation." msgstr "Pàgina '{0}' enviada per revisió" -#: views/pages.py:215 +#: views/pages.py:224 msgid "Page '{0}' created." msgstr "Pàgina '{0}' creada." -#: views/pages.py:224 -#, fuzzy +#: views/pages.py:233 msgid "The page could not be created due to validation errors" -msgstr "La pàgina no s'ha pogut guardar degut a errors de validació" +msgstr "" -#: views/pages.py:339 +#: views/pages.py:356 msgid "Page '{0}' updated." msgstr "Pàgina '{0}' actualitzada." -#: views/pages.py:348 +#: views/pages.py:365 msgid "The page could not be saved due to validation errors" msgstr "La pàgina no s'ha pogut guardar degut a errors de validació" -#: views/pages.py:361 +#: views/pages.py:378 msgid "This page is currently awaiting moderation" msgstr "Aquesta pàgina està esperant moderació" -#: views/pages.py:381 +#: views/pages.py:409 msgid "Page '{0}' deleted." msgstr "Pàgina '{0}' eliminada." -#: views/pages.py:543 +#: views/pages.py:575 msgid "Page '{0}' unpublished." msgstr "Pàgina '{0}' despublicada." -#: views/pages.py:594 +#: views/pages.py:627 msgid "Page '{0}' moved." msgstr "Pàgina '{0}' moguda." -#: views/pages.py:701 views/pages.py:720 views/pages.py:740 +#: views/pages.py:709 +msgid "Page '{0}' and {1} subpages copied." +msgstr "" + +#: views/pages.py:711 +msgid "Page '{0}' copied." +msgstr "" + +#: views/pages.py:785 views/pages.py:804 views/pages.py:824 msgid "The page '{0}' is not currently awaiting moderation." msgstr "La pàgina '{0}' ja no es troba esperant moderació." -#: views/pages.py:726 +#: views/pages.py:810 msgid "Page '{0}' rejected for publication." msgstr "La pàgina '{0}' ha estat rebutjada per publicació" - -#~ msgid "Please type a valid time" -#~ msgstr "Si us plau introdueixi una hora vàlida " - -#~ msgid "View draft" -#~ msgstr "Visualitza l'esborrany" - -#~ msgid "View live" -#~ msgstr "Visualitza en viu" - -#~ msgid "Status:" -#~ msgstr "Estat:" - -#~ msgid "Where do you want to create a %(page_type)s" -#~ msgstr "On vols crear la teva pàgina %(page_type)s" - -#~ msgid "Where do you want to create this" -#~ msgstr "On vols crear això" - -#~ msgid "Create a new page" -#~ msgstr "Crea una nova pàgina" - -#~ msgid "" -#~ "Your new page will be saved in the <em>top level</em> of your website. " -#~ "You can move it after saving." -#~ msgstr "" -#~ "La teva pàgina nova serà desada al <em>nivell més alt</em> del teu web. " -#~ "Pots moure-la desprès de desar-la." - -#~ msgid "More" -#~ msgstr "Més" - -#~ msgid "Redirects" -#~ msgstr "Redireccionaments" - -#~ msgid "Editors Picks" -#~ msgstr "Selecció dels editors" - -#~ msgid "Snippets" -#~ msgstr "Retalls" - -#~ msgid "" -#~ "Sorry, you do not have access to create a page of type <em>'{0}'</em>." -#~ msgstr "" -#~ "Ho sentim, no tens permisos per crear una pàgina del tipus <em>'{0}'</em>" - -#~ msgid "" -#~ "Pages of this type can only be created as children of <em>'{0}'</em>. " -#~ "This new page will be saved there." -#~ msgstr "" -#~ "Pàgines d'aquest tipus només poden ser creades com a filles de <em>'{0}'</" -#~ "em>. La nova pàgina es guardarà allà" - -#~ msgid "The page could not be created due to errors." -#~ msgstr "La pàgina no es pot crear degut a errors." diff --git a/wagtail/wagtailadmin/locale/de/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/de/LC_MESSAGES/django.po index 531249833..589af7b7f 100644 --- a/wagtail/wagtailadmin/locale/de/LC_MESSAGES/django.po +++ b/wagtail/wagtailadmin/locale/de/LC_MESSAGES/django.po @@ -1,24 +1,23 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: -# jspielmann <j@spielmannsolutions.com>, 2014 +# Johannes Spielmann <j@spielmannsolutions.com>, 2014 # karlsander <karlsander@gmail.com>, 2014 # pcraston <patrick@craston.com>, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:41+0000\n" -"PO-Revision-Date: 2014-03-24 19:00+0000\n" -"Last-Translator: pcraston <patrick@craston.com>\n" -"Language-Team: German (http://www.transifex.com/projects/p/wagtail/language/" -"de/)\n" -"Language: de\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: German (http://www.transifex.com/projects/p/wagtail/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: edit_handlers.py:627 @@ -29,58 +28,100 @@ msgstr "" msgid "Common page configuration" msgstr "Allgemeine Seiten Konfiguration" -#: forms.py:18 +#: forms.py:19 msgid "Search term" msgstr "Suchbegriff" -#: forms.py:42 +#: forms.py:43 msgid "Enter your username" msgstr "Bitte geben Sie Ihren Benutzernamen ein" -#: forms.py:45 +#: forms.py:46 msgid "Enter password" msgstr "Bitte geben Sie Ihr Passwort ein" -#: forms.py:50 +#: forms.py:51 msgid "Enter your email address to reset your password" msgstr "Geben Sie ihre Email Adresse ein um ihr Passwort zurückzusetzen." -#: forms.py:59 +#: forms.py:60 msgid "Please fill your email address." msgstr "Bitte geben Sie ihre Email Adresse ein." -#: forms.py:72 +#: forms.py:73 msgid "" "Sorry, you cannot reset your password here as your user account is managed " "by another server." -msgstr "" -"Sie können Ihr Passwort hier leider nicht zurücksetzen, da Ihr Benutzerkonto " -"von einem anderen Server verwaltet wird." +msgstr "Sie können Ihr Passwort hier leider nicht zurücksetzen, da Ihr Benutzerkonto von einem anderen Server verwaltet wird." -#: forms.py:75 +#: forms.py:76 msgid "This email address is not recognised." msgstr "Die Email-Adresse wurde nicht erkannt." -#: forms.py:82 templates/wagtailadmin/pages/_privacy_indicator.html:13 -#: templates/wagtailadmin/pages/_privacy_indicator.html:18 -#, fuzzy -msgid "Public" -msgstr "Veröffentlichen" +#: forms.py:88 +msgid "New title" +msgstr "" -#: forms.py:83 +#: forms.py:89 +msgid "New slug" +msgstr "" + +#: forms.py:95 +msgid "Copy subpages" +msgstr "" + +#: forms.py:97 +#, python-format +msgid "This will copy %(count)s subpage." +msgid_plural "This will copy %(count)s subpages." +msgstr[0] "" +msgstr[1] "" + +#: forms.py:106 +msgid "Publish copied page" +msgstr "" + +#: forms.py:107 +msgid "This page is live. Would you like to publish its copy as well?" +msgstr "" + +#: forms.py:109 +msgid "Publish copies" +msgstr "" + +#: forms.py:111 +#, python-format +msgid "" +"%(count)s of the pages being copied is live. Would you like to publish its " +"copy?" +msgid_plural "" +"%(count)s of the pages being copied are live. Would you like to publish " +"their copies?" +msgstr[0] "" +msgstr[1] "" + +#: forms.py:124 views/pages.py:155 views/pages.py:272 +msgid "This slug is already in use" +msgstr "Der Kurztitel wird bereits verwendet" + +#: forms.py:130 templates/wagtailadmin/pages/_privacy_indicator.html:13 +#: templates/wagtailadmin/pages/_privacy_indicator.html:18 +msgid "Public" +msgstr "" + +#: forms.py:131 msgid "Private, accessible with the following password" msgstr "" -#: forms.py:91 -#, fuzzy +#: forms.py:139 msgid "This field is required." -msgstr "Die Email-Adresse wurde nicht erkannt." +msgstr "" #: templates/wagtailadmin/base.html:7 templates/wagtailadmin/home.html:4 msgid "Dashboard" msgstr "Dashboard" -#: templates/wagtailadmin/base.html:31 +#: templates/wagtailadmin/base.html:27 msgid "Menu" msgstr "Menü" @@ -93,9 +134,7 @@ msgstr "Willkommen zum %(site_name)s Wagtail CMS" msgid "" "This is your dashboard on which helpful information about content you've " "created will be displayed." -msgstr "" -"Das ist Ihr Dashboard, auf dem nützliche Informationen zu den Inhalten, die " -"Sie erstellen, zusammengestellt werden." +msgstr "Das ist Ihr Dashboard, auf dem nützliche Informationen zu den Inhalten, die Sie erstellen, zusammengestellt werden." #: templates/wagtailadmin/login.html:4 templates/wagtailadmin/login.html:59 msgid "Sign in" @@ -103,9 +142,7 @@ msgstr "Anmelden" #: templates/wagtailadmin/login.html:18 msgid "Your username and password didn't match. Please try again." -msgstr "" -"Ihr Benutzername und Ihr Passwort wurden nicht erkannt. Bitte versuchen Sie " -"es erneut." +msgstr "Ihr Benutzername und Ihr Passwort wurden nicht erkannt. Bitte versuchen Sie es erneut." #: templates/wagtailadmin/login.html:26 msgid "Sign in to Wagtail" @@ -129,10 +166,7 @@ msgid "" "Your avatar image is provided by Gravatar and is connected to your email " "address. With a Gravatar account you can set an avatar for any number of " "other email addresses you use." -msgstr "" -"Ihr Profilbild wird von Gravatar zur Verfügung gestellt und ist mit Ihrer " -"Email Adresse verknüpft. Mit einem Gravatar Benutzerkonto können Sie die " -"Profilbilder für all Ihre Email Adressen verwalten." +msgstr "Ihr Profilbild wird von Gravatar zur Verfügung gestellt und ist mit Ihrer Email Adresse verknüpft. Mit einem Gravatar Benutzerkonto können Sie die Profilbilder für all Ihre Email Adressen verwalten." #: templates/wagtailadmin/account/account.html:25 #: templates/wagtailadmin/account/change_password.html:4 @@ -159,9 +193,7 @@ msgstr "Password ändern" #: templates/wagtailadmin/account/change_password.html:21 msgid "" "Your password can't be changed here. Please contact a site administrator." -msgstr "" -"Sie können Ihr Passwort hier nicht ändern. Bitte kontaktieren Sie einen " -"Administrator der Seite." +msgstr "Sie können Ihr Passwort hier nicht ändern. Bitte kontaktieren Sie einen Administrator der Seite." #: templates/wagtailadmin/account/notification_preferences.html:4 #: templates/wagtailadmin/account/notification_preferences.html:6 @@ -203,8 +235,7 @@ msgstr "Überprüfen Sie ihre Emails." #: templates/wagtailadmin/account/password_reset/done.html:16 msgid "A link to reset your password has been emailed to you." -msgstr "" -"Ein Link zum Zurücksetzen Ihres Passwortes wurde Ihnen per Email zugesandt." +msgstr "Ein Link zum Zurücksetzen Ihres Passwortes wurde Ihnen per Email zugesandt." #: templates/wagtailadmin/account/password_reset/email.txt:2 msgid "Please follow the link below to reset your password" @@ -236,12 +267,12 @@ msgstr "Email-Link" #: templates/wagtailadmin/chooser/_search_form.html:7 #: templates/wagtailadmin/pages/search.html:3 #: templates/wagtailadmin/pages/search.html:16 -#: templatetags/wagtailadmin_tags.py:35 +#: templatetags/wagtailadmin_tags.py:36 msgid "Search" msgstr "Suche" #: templates/wagtailadmin/chooser/_search_results.html:3 -#: templatetags/wagtailadmin_tags.py:34 +#: templatetags/wagtailadmin_tags.py:35 msgid "Explorer" msgstr "Explorer" @@ -255,12 +286,8 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "" -"\n" -"Es gibt ein Ergebnis." -msgstr[1] "" -"\n" -"Es gibt %(counter)s Ergebnisse." +msgstr[0] "\nEs gibt ein Ergebnis." +msgstr[1] "\nEs gibt %(counter)s Ergebnisse." #: templates/wagtailadmin/chooser/browse.html:2 #: templates/wagtailadmin/chooser/search.html:2 @@ -305,7 +332,7 @@ msgstr "Nach unten" #: templates/wagtailadmin/pages/confirm_delete.html:7 #: templates/wagtailadmin/pages/edit.html:45 #: templates/wagtailadmin/pages/list.html:84 -#: templates/wagtailadmin/pages/list.html:202 +#: templates/wagtailadmin/pages/list.html:205 msgid "Delete" msgstr "Löschen" @@ -417,12 +444,8 @@ msgid_plural "" "\n" " <span>%(total_pages)s</span> Pages\n" " " -msgstr[0] "" -"\n" -"<span>%(total_pages)s</span> Seite" -msgstr[1] "" -"\n" -"<span>%(total_pages)s</span> Seiten" +msgstr[0] "\n<span>%(total_pages)s</span> Seite" +msgstr[1] "\n<span>%(total_pages)s</span> Seiten" #: templates/wagtailadmin/home/site_summary.html:16 #, python-format @@ -434,12 +457,8 @@ msgid_plural "" "\n" " <span>%(total_images)s</span> Images\n" " " -msgstr[0] "" -"\n" -"<span>%(total_images)s</span> Bild" -msgstr[1] "" -"\n" -"<span>%(total_images)s</span> Bilder" +msgstr[0] "\n<span>%(total_images)s</span> Bild" +msgstr[1] "\n<span>%(total_images)s</span> Bilder" #: templates/wagtailadmin/home/site_summary.html:25 #, python-format @@ -451,12 +470,8 @@ msgid_plural "" "\n" " <span>%(total_docs)s</span> Documents\n" " " -msgstr[0] "" -"\n" -"<span>%(total_docs)s</span> Dokument" -msgstr[1] "" -"\n" -"<span>%(total_docs)s</span> Dokumente" +msgstr[0] "\n<span>%(total_docs)s</span> Dokument" +msgstr[1] "\n<span>%(total_docs)s</span> Dokumente" #: templates/wagtailadmin/notifications/approved.html:1 #, python-format @@ -515,9 +530,8 @@ msgid "This page has been made private by a parent page." msgstr "" #: templates/wagtailadmin/page_privacy/ancestor_privacy.html:7 -#, fuzzy msgid "You can edit the privacy settings on:" -msgstr "Sie können die Seite hier bearbeiten:" +msgstr "" #: templates/wagtailadmin/page_privacy/set_privacy.html:6 msgid "<b>Note:</b> privacy changes apply to all children of this page too." @@ -527,13 +541,9 @@ msgstr "" #, python-format msgid "" "\n" -" Previewing '%(title)s', submitted by %(submitted_by)s on " -"%(submitted_on)s.\n" +" Previewing '%(title)s', submitted by %(submitted_by)s on %(submitted_on)s.\n" " " -msgstr "" -"\n" -"Vorschau für '%(title)s', eingereicht von %(submitted_by)s am " -"%(submitted_on)s." +msgstr "\nVorschau für '%(title)s', eingereicht von %(submitted_by)s am %(submitted_on)s." #: templates/wagtailadmin/pages/_privacy_indicator.html:9 msgid "Privacy" @@ -579,24 +589,16 @@ msgid "" " " msgid_plural "" "\n" -" This will also delete %(descendant_count)s more " -"subpages.\n" +" This will also delete %(descendant_count)s more subpages.\n" " " -msgstr[0] "" -"\n" -"Eine weitere Unterseite wird auch gelöscht." -msgstr[1] "" -"\n" -"%(descendant_count)s Unterseiten werden auch gelöscht." +msgstr[0] "\nEine weitere Unterseite wird auch gelöscht." +msgstr[1] "\n%(descendant_count)s Unterseiten werden auch gelöscht." #: templates/wagtailadmin/pages/confirm_delete.html:22 msgid "" "Alternatively you can unpublish the page. This removes the page from public " "view and you can edit or publish it again later." -msgstr "" -"Alternativ können Sie die Seite depublizieren. Die Seite wird aus der " -"öffentlichen Ansicht entfernt und Sie können sie später noch bearbeiten oder " -"erneut veröffentlichen." +msgstr "Alternativ können Sie die Seite depublizieren. Die Seite wird aus der öffentlichen Ansicht entfernt und Sie können sie später noch bearbeiten oder erneut veröffentlichen." #: templates/wagtailadmin/pages/confirm_delete.html:26 msgid "Delete it" @@ -620,17 +622,14 @@ msgstr "Verschieben" #: templates/wagtailadmin/pages/confirm_move.html:11 #, python-format msgid "Are you sure you want to move this page into '%(title)s'?" -msgstr "" -"Sind Sie sicher, dass Sie diese Seite nach '%(title)s' verschieben wollen?" +msgstr "Sind Sie sicher, dass Sie diese Seite nach '%(title)s' verschieben wollen?" #: templates/wagtailadmin/pages/confirm_move.html:13 #, python-format msgid "" "Are you sure you want to move this page and all of its children into " "'%(title)s'?" -msgstr "" -"Sind Sie sicher, dass Sie diese Seite und alle untergeordneten Seiten nach " -"'%(title)s' verschieben wollen?" +msgstr "Sind Sie sicher, dass Sie diese Seite und alle untergeordneten Seiten nach '%(title)s' verschieben wollen?" #: templates/wagtailadmin/pages/confirm_move.html:18 msgid "Yes, move this page" @@ -644,7 +643,7 @@ msgstr "%(title)s depublizieren" #: templates/wagtailadmin/pages/confirm_unpublish.html:6 #: templates/wagtailadmin/pages/edit.html:42 #: templates/wagtailadmin/pages/list.html:87 -#: templates/wagtailadmin/pages/list.html:205 +#: templates/wagtailadmin/pages/list.html:208 msgid "Unpublish" msgstr "Depublizieren" @@ -660,6 +659,20 @@ msgstr "Ja, depublizieren" msgid "Pages using" msgstr "Benutzende Seiten" +#: templates/wagtailadmin/pages/copy.html:3 +#, python-format +msgid "Copy %(title)s" +msgstr "" + +#: templates/wagtailadmin/pages/copy.html:6 +#: templates/wagtailadmin/pages/list.html:202 +msgid "Copy" +msgstr "" + +#: templates/wagtailadmin/pages/copy.html:26 +msgid "Copy this page" +msgstr "" + #: templates/wagtailadmin/pages/create.html:5 #, python-format msgid "New %(page_type)s" @@ -713,7 +726,7 @@ msgid "Exploring %(title)s" msgstr "%(title)s durchstöbern" #: templates/wagtailadmin/pages/list.html:90 -#: templates/wagtailadmin/pages/list.html:208 +#: templates/wagtailadmin/pages/list.html:211 msgid "Add child page" msgstr "Untergeordnete Seite hinzufügen" @@ -734,52 +747,50 @@ msgstr "Sortierung von untergeordneten Seiten aktivieren" msgid "Drag" msgstr "Ziehen" -#: templates/wagtailadmin/pages/list.html:234 -#: templates/wagtailadmin/pages/list.html:238 +#: templates/wagtailadmin/pages/list.html:237 +#: templates/wagtailadmin/pages/list.html:241 #, python-format msgid "Explorer subpages of '%(title)s'" msgstr "Explorer Teilseiten von '%(title)s'" -#: templates/wagtailadmin/pages/list.html:234 -#: templates/wagtailadmin/pages/list.html:238 -#: templates/wagtailadmin/pages/list.html:242 +#: templates/wagtailadmin/pages/list.html:237 +#: templates/wagtailadmin/pages/list.html:241 +#: templates/wagtailadmin/pages/list.html:245 msgid "Explore" msgstr "Durchstöbern" -#: templates/wagtailadmin/pages/list.html:242 +#: templates/wagtailadmin/pages/list.html:245 #, python-format -msgid "Explorer child pages of '%(title)s'" -msgstr "Explorer untergeordnete Seiten von '%(title)s'" +msgid "Explore child pages of '%(title)s'" +msgstr "" -#: templates/wagtailadmin/pages/list.html:244 +#: templates/wagtailadmin/pages/list.html:247 #, python-format msgid "Add a child page to '%(title)s'" msgstr "Untergeordnete Seite zu '%(title)s' hinzufügen" -#: templates/wagtailadmin/pages/list.html:244 +#: templates/wagtailadmin/pages/list.html:247 msgid "Add subpage" msgstr "Untergeordnete Seite hinzufügen" -#: templates/wagtailadmin/pages/list.html:253 +#: templates/wagtailadmin/pages/list.html:256 msgid "No pages have been created." msgstr "Es wurden keine Seiten erstellt." -#: templates/wagtailadmin/pages/list.html:253 +#: templates/wagtailadmin/pages/list.html:256 #, python-format msgid "Why not <a href=\"%(add_page_url)s\">add one</a>?" msgstr "<a href=\"%(add_page_url)s\">Fügen Sie doch eine hinzu!</a>" -#: templates/wagtailadmin/pages/list.html:260 -#, fuzzy, python-format +#: templates/wagtailadmin/pages/list.html:263 +#, python-format msgid "" "\n" " Page %(page_number)s of %(num_pages)s.\n" " " msgstr "" -"\n" -"Seite %(page_number)s von %(num_pages)s." -#: templates/wagtailadmin/pages/list.html:266 +#: templates/wagtailadmin/pages/list.html:269 #: templates/wagtailadmin/pages/search_results.html:35 #: templates/wagtailadmin/pages/search_results.html:37 #: templates/wagtailadmin/pages/usage_results.html:13 @@ -789,7 +800,7 @@ msgstr "" msgid "Previous" msgstr "Vorherige" -#: templates/wagtailadmin/pages/list.html:271 +#: templates/wagtailadmin/pages/list.html:274 #: templates/wagtailadmin/pages/search_results.html:44 #: templates/wagtailadmin/pages/search_results.html:46 #: templates/wagtailadmin/pages/usage_results.html:18 @@ -810,7 +821,7 @@ msgid "Select a new parent page for <span>%(title)s</span>" msgstr "Wählen Sie eine neue übergeordnete Seite für <span>%(title)s</span>" #: templates/wagtailadmin/pages/search_results.html:6 -#, fuzzy, python-format +#, python-format msgid "" "\n" " There is one matching page\n" @@ -820,11 +831,7 @@ msgid_plural "" " There are %(counter)s matching pages\n" " " msgstr[0] "" -"\n" -"Es gibt ein Ergebnis" msgstr[1] "" -"\n" -"Es gibt %(counter)s Ergebnisse" #: templates/wagtailadmin/pages/search_results.html:16 msgid "Other searches" @@ -849,24 +856,20 @@ msgid "" "\n" " Page %(page_number)s of %(num_pages)s.\n" " " -msgstr "" -"\n" -"Seite %(page_number)s von %(num_pages)s." +msgstr "\nSeite %(page_number)s von %(num_pages)s." #: templates/wagtailadmin/pages/search_results.html:54 #, python-format msgid "Sorry, no pages match <em>\"%(query_string)s\"</em>" -msgstr "" -"Es gibt leider keine Seiten zum Suchbegriff <em>\"%(query_string)s\"</em>" +msgstr "Es gibt leider keine Seiten zum Suchbegriff <em>\"%(query_string)s\"</em>" #: templates/wagtailadmin/pages/search_results.html:56 msgid "Enter a search term above" msgstr "Geben Sie oben einen Suchbegriff ein" #: templates/wagtailadmin/pages/usage_results.html:24 -#, fuzzy msgid "No pages use" -msgstr "Benutzende Seiten" +msgstr "" #: templates/wagtailadmin/shared/breadcrumb.html:6 msgid "Home" @@ -881,9 +884,8 @@ msgid "February" msgstr "" #: templates/wagtailadmin/shared/datetimepicker_translations.html:8 -#, fuzzy msgid "March" -msgstr "Suche" +msgstr "" #: templates/wagtailadmin/shared/datetimepicker_translations.html:9 msgid "April" @@ -946,9 +948,15 @@ msgid "Fri" msgstr "" #: templates/wagtailadmin/shared/datetimepicker_translations.html:26 -#, fuzzy msgid "Sat" -msgstr "Status" +msgstr "" + +#: templates/wagtailadmin/shared/header.html:23 +#, python-format +msgid "Used %(useage_count)s time" +msgid_plural "Used %(useage_count)s times" +msgstr[0] "" +msgstr[1] "" #: templates/wagtailadmin/shared/main_nav.html:10 msgid "Account settings" @@ -964,9 +972,8 @@ msgid "Page %(page_num)s of %(total_pages)s." msgstr "Seite %(page_num)s von %(total_pages)s." #: templates/wagtailadmin/userbar/base.html:4 -#, fuzzy msgid "User bar" -msgstr "Benutzer" +msgstr "" #: templates/wagtailadmin/userbar/base.html:14 msgid "Go to Wagtail admin interface" @@ -985,127 +992,69 @@ msgid "Your password has been changed successfully!" msgstr "Ihr Passwort wurde erfolgreich geändert." #: views/account.py:60 -#, fuzzy msgid "Your preferences have been updated successfully!" -msgstr "Ihr Passwort wurde erfolgreich geändert." +msgstr "" -#: views/pages.py:146 views/pages.py:263 -msgid "This slug is already in use" -msgstr "Der Kurztitel wird bereits verwendet" - -#: views/pages.py:160 views/pages.py:277 +#: views/pages.py:169 views/pages.py:286 msgid "Go live date/time must be before expiry date/time" msgstr "" -#: views/pages.py:170 views/pages.py:287 +#: views/pages.py:179 views/pages.py:296 msgid "Expiry date/time must be in the future" msgstr "" -#: views/pages.py:210 views/pages.py:334 views/pages.py:707 +#: views/pages.py:219 views/pages.py:351 views/pages.py:791 msgid "Page '{0}' published." msgstr "Seite '{0}' veröffentlicht." -#: views/pages.py:212 views/pages.py:336 +#: views/pages.py:221 views/pages.py:353 msgid "Page '{0}' submitted for moderation." msgstr "Seite '{0}' zur Freischaltung eingereicht." -#: views/pages.py:215 +#: views/pages.py:224 msgid "Page '{0}' created." msgstr "Seite '{0}' erstellt." -#: views/pages.py:224 -#, fuzzy +#: views/pages.py:233 msgid "The page could not be created due to validation errors" msgstr "" -"Aufgrund von Fehlern bei der Validierung konnte die Seite nicht gespeichert " -"werden." -#: views/pages.py:339 +#: views/pages.py:356 msgid "Page '{0}' updated." msgstr "Seite '{0}' geändert." -#: views/pages.py:348 +#: views/pages.py:365 msgid "The page could not be saved due to validation errors" -msgstr "" -"Aufgrund von Fehlern bei der Validierung konnte die Seite nicht gespeichert " -"werden." +msgstr "Aufgrund von Fehlern bei der Validierung konnte die Seite nicht gespeichert werden." -#: views/pages.py:361 +#: views/pages.py:378 msgid "This page is currently awaiting moderation" msgstr "Diese Seite wartet derzeit auf Freischaltung" -#: views/pages.py:381 +#: views/pages.py:409 msgid "Page '{0}' deleted." msgstr "Seite '{0}' gelöscht." -#: views/pages.py:543 +#: views/pages.py:575 msgid "Page '{0}' unpublished." msgstr "Seite '{0}' depubliziert." -#: views/pages.py:594 +#: views/pages.py:627 msgid "Page '{0}' moved." msgstr "Seite '{0}' verschoben." -#: views/pages.py:701 views/pages.py:720 views/pages.py:740 +#: views/pages.py:709 +msgid "Page '{0}' and {1} subpages copied." +msgstr "" + +#: views/pages.py:711 +msgid "Page '{0}' copied." +msgstr "" + +#: views/pages.py:785 views/pages.py:804 views/pages.py:824 msgid "The page '{0}' is not currently awaiting moderation." msgstr "Die Seite '{0}' wartet derzeit nicht auf Freischaltung." -#: views/pages.py:726 +#: views/pages.py:810 msgid "Page '{0}' rejected for publication." msgstr "Die Veröffentlichung der Seite '{0}' wurde abgelehnt." - -#~ msgid "Please type a valid time" -#~ msgstr "Geben Sie bitte eine gültige Zeit ein!" - -#~ msgid "View draft" -#~ msgstr "Entwurf anzeigen" - -#~ msgid "View live" -#~ msgstr "Live anzeigen" - -#~ msgid "Status:" -#~ msgstr "Status:" - -#~ msgid "Where do you want to create a %(page_type)s" -#~ msgstr "Wo wollen Sie %(page_type)s erstellen?" - -#~ msgid "Where do you want to create this" -#~ msgstr "Wo wollen Sie dies erstellen" - -#~ msgid "Create a new page" -#~ msgstr "Neue Seite erstellen" - -#~ msgid "" -#~ "Your new page will be saved in the <em>top level</em> of your website. " -#~ "You can move it after saving." -#~ msgstr "" -#~ "Ihre neue Seite wird auf der <em>obersten Ebene</em> Ihrer Website " -#~ "erstellt. Nach dem Speichern können Sie diese verschieben." - -#~ msgid "More" -#~ msgstr "Mehr" - -#~ msgid "Redirects" -#~ msgstr "Weiterleitungen" - -#~ msgid "Editors Picks" -#~ msgstr "Redaktionsempfehlungen" - -#~ msgid "Snippets" -#~ msgstr "Snippets" - -#~ msgid "" -#~ "Sorry, you do not have access to create a page of type <em>'{0}'</em>." -#~ msgstr "" -#~ "Leider haben Sie nicht die Berechtigung eine Seite vom Typ <em>'{0}'</em> " -#~ "zu erstellen." - -#~ msgid "" -#~ "Pages of this type can only be created as children of <em>'{0}'</em>. " -#~ "This new page will be saved there." -#~ msgstr "" -#~ "Seiten dieses Typs können nur als untergeordnete Seiten von <em>'{0}'</" -#~ "em> erstellt werden. Die neue Seite wird dort gespeichert." - -#~ msgid "The page could not be created due to errors." -#~ msgstr "Aufgrund von Fehlern konnte die Seite nicht erstellt werden." diff --git a/wagtail/wagtailadmin/locale/el/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/el/LC_MESSAGES/django.po index 926012f39..1ab108d02 100644 --- a/wagtail/wagtailadmin/locale/el/LC_MESSAGES/django.po +++ b/wagtail/wagtailadmin/locale/el/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # serafeim <serafeim@torchbox.com>, 2014 # serafeim <serafeim@torchbox.com>, 2014 @@ -9,15 +9,14 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:41+0000\n" -"PO-Revision-Date: 2014-03-14 21:14+0000\n" -"Last-Translator: serafeim <serafeim@torchbox.com>\n" -"Language-Team: Greek (http://www.transifex.com/projects/p/wagtail/language/" -"el/)\n" -"Language: el\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Greek (http://www.transifex.com/projects/p/wagtail/language/el/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: el\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: edit_handlers.py:627 @@ -28,58 +27,100 @@ msgstr "" msgid "Common page configuration" msgstr "Κοινές ρυθμίσεις σελίδων" -#: forms.py:18 +#: forms.py:19 msgid "Search term" msgstr "Όρος αναζήτησης" -#: forms.py:42 +#: forms.py:43 msgid "Enter your username" msgstr "Εισάγετε το όνομα σας" -#: forms.py:45 +#: forms.py:46 msgid "Enter password" msgstr "Εισάγετε τον κωδικό σας" -#: forms.py:50 +#: forms.py:51 msgid "Enter your email address to reset your password" msgstr "Εισάγετε τη διεύθυνση email σας για να ανανεώσετε τον κωδικό σας" -#: forms.py:59 +#: forms.py:60 msgid "Please fill your email address." msgstr "Συμπληρώσατε τη διεύθυνση email σας." -#: forms.py:72 +#: forms.py:73 msgid "" "Sorry, you cannot reset your password here as your user account is managed " "by another server." -msgstr "" -"Λυπούμαστε, δε μπορείτε να αλλάξετε τον κωδικό σας διότι το λογαριασμό " -"χρήστη σας τον διαχειρίζεται ένας διαφορετικός εξυπηρετητής." +msgstr "Λυπούμαστε, δε μπορείτε να αλλάξετε τον κωδικό σας διότι το λογαριασμό χρήστη σας τον διαχειρίζεται ένας διαφορετικός εξυπηρετητής." -#: forms.py:75 +#: forms.py:76 msgid "This email address is not recognised." msgstr "Δε βρέθηκε το email." -#: forms.py:82 templates/wagtailadmin/pages/_privacy_indicator.html:13 -#: templates/wagtailadmin/pages/_privacy_indicator.html:18 -#, fuzzy -msgid "Public" -msgstr "Έκδοση" +#: forms.py:88 +msgid "New title" +msgstr "" -#: forms.py:83 +#: forms.py:89 +msgid "New slug" +msgstr "" + +#: forms.py:95 +msgid "Copy subpages" +msgstr "" + +#: forms.py:97 +#, python-format +msgid "This will copy %(count)s subpage." +msgid_plural "This will copy %(count)s subpages." +msgstr[0] "" +msgstr[1] "" + +#: forms.py:106 +msgid "Publish copied page" +msgstr "" + +#: forms.py:107 +msgid "This page is live. Would you like to publish its copy as well?" +msgstr "" + +#: forms.py:109 +msgid "Publish copies" +msgstr "" + +#: forms.py:111 +#, python-format +msgid "" +"%(count)s of the pages being copied is live. Would you like to publish its " +"copy?" +msgid_plural "" +"%(count)s of the pages being copied are live. Would you like to publish " +"their copies?" +msgstr[0] "" +msgstr[1] "" + +#: forms.py:124 views/pages.py:155 views/pages.py:272 +msgid "This slug is already in use" +msgstr "Το slug χρησιμοποιείται" + +#: forms.py:130 templates/wagtailadmin/pages/_privacy_indicator.html:13 +#: templates/wagtailadmin/pages/_privacy_indicator.html:18 +msgid "Public" +msgstr "" + +#: forms.py:131 msgid "Private, accessible with the following password" msgstr "" -#: forms.py:91 -#, fuzzy +#: forms.py:139 msgid "This field is required." -msgstr "Δε βρέθηκε το email." +msgstr "" #: templates/wagtailadmin/base.html:7 templates/wagtailadmin/home.html:4 msgid "Dashboard" msgstr "Πίνακας ελέγχου" -#: templates/wagtailadmin/base.html:31 +#: templates/wagtailadmin/base.html:27 msgid "Menu" msgstr "Μενού" @@ -92,9 +133,7 @@ msgstr "Καλώς ήρθατε στο %(site_name)s Wagtail CMS" msgid "" "This is your dashboard on which helpful information about content you've " "created will be displayed." -msgstr "" -"Αυτός είναι ο πίνακας ελέγχου στον οποίο εμφανίζονται πληροφορίες σχετικές " -"με το περιεχόμενου που έχετε δημιουργήσει." +msgstr "Αυτός είναι ο πίνακας ελέγχου στον οποίο εμφανίζονται πληροφορίες σχετικές με το περιεχόμενου που έχετε δημιουργήσει." #: templates/wagtailadmin/login.html:4 templates/wagtailadmin/login.html:59 msgid "Sign in" @@ -126,10 +165,7 @@ msgid "" "Your avatar image is provided by Gravatar and is connected to your email " "address. With a Gravatar account you can set an avatar for any number of " "other email addresses you use." -msgstr "" -"Η εικόνα σας παρέχετε από το Gravatar και συσχετίζεται με τη διεύθυνση email " -"σας. Με το λογαριασμό σας στο Gravatar μπορείτε να δημιουργήσετε εικόνα και " -"για τις άλλες διευθύνσεις email που έχετε." +msgstr "Η εικόνα σας παρέχετε από το Gravatar και συσχετίζεται με τη διεύθυνση email σας. Με το λογαριασμό σας στο Gravatar μπορείτε να δημιουργήσετε εικόνα και για τις άλλες διευθύνσεις email που έχετε." #: templates/wagtailadmin/account/account.html:25 #: templates/wagtailadmin/account/change_password.html:4 @@ -156,8 +192,7 @@ msgstr "Αλλαγή κωδικού" #: templates/wagtailadmin/account/change_password.html:21 msgid "" "Your password can't be changed here. Please contact a site administrator." -msgstr "" -"Ο κωδικός σας δε μπορεί να αλλαχτεί εδώ. Παρακαλώ ενημερώστε το διαχειριστή." +msgstr "Ο κωδικός σας δε μπορεί να αλλαχτεί εδώ. Παρακαλώ ενημερώστε το διαχειριστή." #: templates/wagtailadmin/account/notification_preferences.html:4 #: templates/wagtailadmin/account/notification_preferences.html:6 @@ -203,8 +238,7 @@ msgstr "Μια σύνδεση για ανανέωση του κωδικού σα #: templates/wagtailadmin/account/password_reset/email.txt:2 msgid "Please follow the link below to reset your password" -msgstr "" -"Παρακαλούμε ακολουθήστε τη σύνδεση παρακάτω για να ανανεώσετε τον κωδικό σας" +msgstr "Παρακαλούμε ακολουθήστε τη σύνδεση παρακάτω για να ανανεώσετε τον κωδικό σας" #: templates/wagtailadmin/account/password_reset/email_subject.txt:2 msgid "Password reset" @@ -232,12 +266,12 @@ msgstr "Σύνδεση με email" #: templates/wagtailadmin/chooser/_search_form.html:7 #: templates/wagtailadmin/pages/search.html:3 #: templates/wagtailadmin/pages/search.html:16 -#: templatetags/wagtailadmin_tags.py:35 +#: templatetags/wagtailadmin_tags.py:36 msgid "Search" msgstr "Αναζήτηση" #: templates/wagtailadmin/chooser/_search_results.html:3 -#: templatetags/wagtailadmin_tags.py:34 +#: templatetags/wagtailadmin_tags.py:35 msgid "Explorer" msgstr "Εξερευνητής" @@ -251,12 +285,8 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "" -"\n" -"Βρέθηκε ένα αποτέλεσμα" -msgstr[1] "" -"\n" -"Βρέθηκαν %(counter)s αποτελέσματα" +msgstr[0] "\nΒρέθηκε ένα αποτέλεσμα" +msgstr[1] "\nΒρέθηκαν %(counter)s αποτελέσματα" #: templates/wagtailadmin/chooser/browse.html:2 #: templates/wagtailadmin/chooser/search.html:2 @@ -301,7 +331,7 @@ msgstr "Μετακίνηση κάτω" #: templates/wagtailadmin/pages/confirm_delete.html:7 #: templates/wagtailadmin/pages/edit.html:45 #: templates/wagtailadmin/pages/list.html:84 -#: templates/wagtailadmin/pages/list.html:202 +#: templates/wagtailadmin/pages/list.html:205 msgid "Delete" msgstr "Διαγραφή" @@ -413,12 +443,8 @@ msgid_plural "" "\n" " <span>%(total_pages)s</span> Pages\n" " " -msgstr[0] "" -"\n" -"<span>%(total_pages)s</span> Σελίδα" -msgstr[1] "" -"\n" -"<span>%(total_pages)s</span> Σελίδες" +msgstr[0] "\n<span>%(total_pages)s</span> Σελίδα" +msgstr[1] "\n<span>%(total_pages)s</span> Σελίδες" #: templates/wagtailadmin/home/site_summary.html:16 #, python-format @@ -430,12 +456,8 @@ msgid_plural "" "\n" " <span>%(total_images)s</span> Images\n" " " -msgstr[0] "" -"\n" -"<span>%(total_images)s</span> Εικόνα" -msgstr[1] "" -"\n" -"<span>%(total_images)s</span> Εικόνες" +msgstr[0] "\n<span>%(total_images)s</span> Εικόνα" +msgstr[1] "\n<span>%(total_images)s</span> Εικόνες" #: templates/wagtailadmin/home/site_summary.html:25 #, python-format @@ -447,14 +469,8 @@ msgid_plural "" "\n" " <span>%(total_docs)s</span> Documents\n" " " -msgstr[0] "" -"\n" -"\n" -"<span>%(total_docs)s</span> Έγγραφο" -msgstr[1] "" -"\n" -"\n" -"<span>%(total_docs)s</span> Έγγραφα" +msgstr[0] "\n\n<span>%(total_docs)s</span> Έγγραφο" +msgstr[1] "\n\n<span>%(total_docs)s</span> Έγγραφα" #: templates/wagtailadmin/notifications/approved.html:1 #, python-format @@ -513,9 +529,8 @@ msgid "This page has been made private by a parent page." msgstr "" #: templates/wagtailadmin/page_privacy/ancestor_privacy.html:7 -#, fuzzy msgid "You can edit the privacy settings on:" -msgstr "Μπορείτε να διορθώστε τη σελίδα εδώ:" +msgstr "" #: templates/wagtailadmin/page_privacy/set_privacy.html:6 msgid "<b>Note:</b> privacy changes apply to all children of this page too." @@ -525,14 +540,9 @@ msgstr "" #, python-format msgid "" "\n" -" Previewing '%(title)s', submitted by %(submitted_by)s on " -"%(submitted_on)s.\n" -" " -msgstr "" -"\n" -" Προεπισκόπηση της '%(title)s', που δημιουργήθηκε από τον " -"%(submitted_by)s στις %(submitted_on)s.\n" +" Previewing '%(title)s', submitted by %(submitted_by)s on %(submitted_on)s.\n" " " +msgstr "\n Προεπισκόπηση της '%(title)s', που δημιουργήθηκε από τον %(submitted_by)s στις %(submitted_on)s.\n " #: templates/wagtailadmin/pages/_privacy_indicator.html:9 msgid "Privacy" @@ -578,26 +588,16 @@ msgid "" " " msgid_plural "" "\n" -" This will also delete %(descendant_count)s more " -"subpages.\n" -" " -msgstr[0] "" -"\n" -" Επίσης θα διαγραφεί και μια ακόμα σελίδα.\n" -" " -msgstr[1] "" -"\n" -" Επίσης θα διαγραφούν και %(descendant_count)s ακόμα " -"σελίδες.\n" +" This will also delete %(descendant_count)s more subpages.\n" " " +msgstr[0] "\n Επίσης θα διαγραφεί και μια ακόμα σελίδα.\n " +msgstr[1] "\n Επίσης θα διαγραφούν και %(descendant_count)s ακόμα σελίδες.\n " #: templates/wagtailadmin/pages/confirm_delete.html:22 msgid "" "Alternatively you can unpublish the page. This removes the page from public " "view and you can edit or publish it again later." -msgstr "" -"Εναλλακτικά μπορείτε να αποεκδόσετε τη σελίδα ώστε να μην εμφανίζεται στο " -"κοινό. Στη συνέχεια μπορείτε να τη διορθώστε και να την εκδόσετε ." +msgstr "Εναλλακτικά μπορείτε να αποεκδόσετε τη σελίδα ώστε να μην εμφανίζεται στο κοινό. Στη συνέχεια μπορείτε να τη διορθώστε και να την εκδόσετε ." #: templates/wagtailadmin/pages/confirm_delete.html:26 msgid "Delete it" @@ -628,9 +628,7 @@ msgstr "Είστε σίγουρος ότι θέλετε να μετακινήσ msgid "" "Are you sure you want to move this page and all of its children into " "'%(title)s'?" -msgstr "" -"Είστε σίγουρος ότι θέλετε να μετακινήσετε τη σελίδα και όλα τα παιδιά της " -"στο '%(title)s';" +msgstr "Είστε σίγουρος ότι θέλετε να μετακινήσετε τη σελίδα και όλα τα παιδιά της στο '%(title)s';" #: templates/wagtailadmin/pages/confirm_move.html:18 msgid "Yes, move this page" @@ -644,7 +642,7 @@ msgstr "Απόεκδοστε τη σελίδα %(title)s" #: templates/wagtailadmin/pages/confirm_unpublish.html:6 #: templates/wagtailadmin/pages/edit.html:42 #: templates/wagtailadmin/pages/list.html:87 -#: templates/wagtailadmin/pages/list.html:205 +#: templates/wagtailadmin/pages/list.html:208 msgid "Unpublish" msgstr "Αποέκδοση" @@ -660,6 +658,20 @@ msgstr "Ναι, να αποεκδοθεί" msgid "Pages using" msgstr "Οι σελίδες που το χρησιμοποιούν" +#: templates/wagtailadmin/pages/copy.html:3 +#, python-format +msgid "Copy %(title)s" +msgstr "" + +#: templates/wagtailadmin/pages/copy.html:6 +#: templates/wagtailadmin/pages/list.html:202 +msgid "Copy" +msgstr "" + +#: templates/wagtailadmin/pages/copy.html:26 +msgid "Copy this page" +msgstr "" + #: templates/wagtailadmin/pages/create.html:5 #, python-format msgid "New %(page_type)s" @@ -713,7 +725,7 @@ msgid "Exploring %(title)s" msgstr "Εξερεύνηση %(title)s" #: templates/wagtailadmin/pages/list.html:90 -#: templates/wagtailadmin/pages/list.html:208 +#: templates/wagtailadmin/pages/list.html:211 msgid "Add child page" msgstr "Προσθήκη σελίδας-παιδί" @@ -734,52 +746,50 @@ msgstr "Ενεργοποίηση ταξινόμησης σελίδων - παι msgid "Drag" msgstr "Τραβήξτε" -#: templates/wagtailadmin/pages/list.html:234 -#: templates/wagtailadmin/pages/list.html:238 +#: templates/wagtailadmin/pages/list.html:237 +#: templates/wagtailadmin/pages/list.html:241 #, python-format msgid "Explorer subpages of '%(title)s'" msgstr "Εξερεύνηση υποσελίδων του '%(title)s'" -#: templates/wagtailadmin/pages/list.html:234 -#: templates/wagtailadmin/pages/list.html:238 -#: templates/wagtailadmin/pages/list.html:242 +#: templates/wagtailadmin/pages/list.html:237 +#: templates/wagtailadmin/pages/list.html:241 +#: templates/wagtailadmin/pages/list.html:245 msgid "Explore" msgstr "Εξερεύνηση" -#: templates/wagtailadmin/pages/list.html:242 +#: templates/wagtailadmin/pages/list.html:245 #, python-format -msgid "Explorer child pages of '%(title)s'" -msgstr "Εξερεύνηση σελίδων - παιδιά της '%(title)s'" +msgid "Explore child pages of '%(title)s'" +msgstr "" -#: templates/wagtailadmin/pages/list.html:244 +#: templates/wagtailadmin/pages/list.html:247 #, python-format msgid "Add a child page to '%(title)s'" msgstr "Προσθήκη σελίδας - παιδί στην '%(title)s'" -#: templates/wagtailadmin/pages/list.html:244 +#: templates/wagtailadmin/pages/list.html:247 msgid "Add subpage" msgstr "Προσθήκη υποσελίδας" -#: templates/wagtailadmin/pages/list.html:253 +#: templates/wagtailadmin/pages/list.html:256 msgid "No pages have been created." msgstr "Δεν έχουν δημιουργηθεί σελίδες." -#: templates/wagtailadmin/pages/list.html:253 +#: templates/wagtailadmin/pages/list.html:256 #, python-format msgid "Why not <a href=\"%(add_page_url)s\">add one</a>?" msgstr "Θέλετε να <a href=\"%(add_page_url)s\">προσθέσετε μία</a>;" -#: templates/wagtailadmin/pages/list.html:260 -#, fuzzy, python-format +#: templates/wagtailadmin/pages/list.html:263 +#, python-format msgid "" "\n" " Page %(page_number)s of %(num_pages)s.\n" " " msgstr "" -"\n" -"Σελίδα %(page_number)s of %(num_pages)s." -#: templates/wagtailadmin/pages/list.html:266 +#: templates/wagtailadmin/pages/list.html:269 #: templates/wagtailadmin/pages/search_results.html:35 #: templates/wagtailadmin/pages/search_results.html:37 #: templates/wagtailadmin/pages/usage_results.html:13 @@ -789,7 +799,7 @@ msgstr "" msgid "Previous" msgstr "Προηγούμενο" -#: templates/wagtailadmin/pages/list.html:271 +#: templates/wagtailadmin/pages/list.html:274 #: templates/wagtailadmin/pages/search_results.html:44 #: templates/wagtailadmin/pages/search_results.html:46 #: templates/wagtailadmin/pages/usage_results.html:18 @@ -810,7 +820,7 @@ msgid "Select a new parent page for <span>%(title)s</span>" msgstr "Επιλογή νέας πατρικής σελίδας για την <span>%(title)s</span>" #: templates/wagtailadmin/pages/search_results.html:6 -#, fuzzy, python-format +#, python-format msgid "" "\n" " There is one matching page\n" @@ -820,11 +830,7 @@ msgid_plural "" " There are %(counter)s matching pages\n" " " msgstr[0] "" -"\n" -"Βρέθηκε ένα αποτέλεσμα" msgstr[1] "" -"\n" -"Βρέθηκαν %(counter)s αποτελέσματα" #: templates/wagtailadmin/pages/search_results.html:16 msgid "Other searches" @@ -849,24 +855,20 @@ msgid "" "\n" " Page %(page_number)s of %(num_pages)s.\n" " " -msgstr "" -"\n" -"Σελίδα %(page_number)s of %(num_pages)s." +msgstr "\nΣελίδα %(page_number)s of %(num_pages)s." #: templates/wagtailadmin/pages/search_results.html:54 #, python-format msgid "Sorry, no pages match <em>\"%(query_string)s\"</em>" -msgstr "" -"Λυπούμαστε, καμία σελίδα δε ταιριάζει με το <em>\"%(query_string)s\"</em>" +msgstr "Λυπούμαστε, καμία σελίδα δε ταιριάζει με το <em>\"%(query_string)s\"</em>" #: templates/wagtailadmin/pages/search_results.html:56 msgid "Enter a search term above" msgstr "Εισάγετε όρο αναζήτησης" #: templates/wagtailadmin/pages/usage_results.html:24 -#, fuzzy msgid "No pages use" -msgstr "Οι σελίδες που το χρησιμοποιούν" +msgstr "" #: templates/wagtailadmin/shared/breadcrumb.html:6 msgid "Home" @@ -881,9 +883,8 @@ msgid "February" msgstr "" #: templates/wagtailadmin/shared/datetimepicker_translations.html:8 -#, fuzzy msgid "March" -msgstr "Αναζήτηση" +msgstr "" #: templates/wagtailadmin/shared/datetimepicker_translations.html:9 msgid "April" @@ -946,9 +947,15 @@ msgid "Fri" msgstr "" #: templates/wagtailadmin/shared/datetimepicker_translations.html:26 -#, fuzzy msgid "Sat" -msgstr "Κατάσταση" +msgstr "" + +#: templates/wagtailadmin/shared/header.html:23 +#, python-format +msgid "Used %(useage_count)s time" +msgid_plural "Used %(useage_count)s times" +msgstr[0] "" +msgstr[1] "" #: templates/wagtailadmin/shared/main_nav.html:10 msgid "Account settings" @@ -964,9 +971,8 @@ msgid "Page %(page_num)s of %(total_pages)s." msgstr "Σελίδα %(page_num)s από %(total_pages)s." #: templates/wagtailadmin/userbar/base.html:4 -#, fuzzy msgid "User bar" -msgstr "Χρήστες" +msgstr "" #: templates/wagtailadmin/userbar/base.html:14 msgid "Go to Wagtail admin interface" @@ -985,121 +991,69 @@ msgid "Your password has been changed successfully!" msgstr "Ο κωδικός σας αλλάχτηκε με επιτυχία!" #: views/account.py:60 -#, fuzzy msgid "Your preferences have been updated successfully!" -msgstr "Ο κωδικός σας αλλάχτηκε με επιτυχία!" +msgstr "" -#: views/pages.py:146 views/pages.py:263 -msgid "This slug is already in use" -msgstr "Το slug χρησιμοποιείται" - -#: views/pages.py:160 views/pages.py:277 +#: views/pages.py:169 views/pages.py:286 msgid "Go live date/time must be before expiry date/time" msgstr "" -#: views/pages.py:170 views/pages.py:287 +#: views/pages.py:179 views/pages.py:296 msgid "Expiry date/time must be in the future" msgstr "" -#: views/pages.py:210 views/pages.py:334 views/pages.py:707 +#: views/pages.py:219 views/pages.py:351 views/pages.py:791 msgid "Page '{0}' published." msgstr "Η σελίδα '{0}' δημοσιεύθηκε." -#: views/pages.py:212 views/pages.py:336 +#: views/pages.py:221 views/pages.py:353 msgid "Page '{0}' submitted for moderation." msgstr "Η σελίδα '{0}' στάλθηκε προς έλεγχο." -#: views/pages.py:215 +#: views/pages.py:224 msgid "Page '{0}' created." msgstr "Η σελίδα '{0}' δημιουργήθηκε." -#: views/pages.py:224 -#, fuzzy +#: views/pages.py:233 msgid "The page could not be created due to validation errors" -msgstr "Δε ήταν δυνατή η αποθήκευση της σελίδας λόγω σφαλμάτων ελέγχου" +msgstr "" -#: views/pages.py:339 +#: views/pages.py:356 msgid "Page '{0}' updated." msgstr "Έγινε η αποθήκευση της σελίδας '{0}'." -#: views/pages.py:348 +#: views/pages.py:365 msgid "The page could not be saved due to validation errors" msgstr "Δε ήταν δυνατή η αποθήκευση της σελίδας λόγω σφαλμάτων ελέγχου" -#: views/pages.py:361 +#: views/pages.py:378 msgid "This page is currently awaiting moderation" msgstr "Η σελίδα δεν είναι προς έλεγχο" -#: views/pages.py:381 +#: views/pages.py:409 msgid "Page '{0}' deleted." msgstr "Έγινε διαγραφή της σελίδας '{0}'." -#: views/pages.py:543 +#: views/pages.py:575 msgid "Page '{0}' unpublished." msgstr "Έγινε αποδημοσίευση της '{0}'." -#: views/pages.py:594 +#: views/pages.py:627 msgid "Page '{0}' moved." msgstr "Έγινε η μετακίνηση της σελίδας '{0}'." -#: views/pages.py:701 views/pages.py:720 views/pages.py:740 +#: views/pages.py:709 +msgid "Page '{0}' and {1} subpages copied." +msgstr "" + +#: views/pages.py:711 +msgid "Page '{0}' copied." +msgstr "" + +#: views/pages.py:785 views/pages.py:804 views/pages.py:824 msgid "The page '{0}' is not currently awaiting moderation." msgstr "Η σελίδα '{0}' δεν είναι για έλεγχο." -#: views/pages.py:726 +#: views/pages.py:810 msgid "Page '{0}' rejected for publication." msgstr "Η δημοσίευση της σελίδας '{0}' απορρίφθηκε." - -#~ msgid "Please type a valid time" -#~ msgstr "Συμπληρώσατε ώρα" - -#~ msgid "View draft" -#~ msgstr "Εμφάνιση προσχεδίου" - -#~ msgid "View live" -#~ msgstr "Εμφάνιση στο site" - -#~ msgid "Status:" -#~ msgstr "Κατάσταση:" - -#~ msgid "Where do you want to create a %(page_type)s" -#~ msgstr "Πού θέλετε να δημιουργήσετε τη σελίδα %(page_type)s" - -#~ msgid "Where do you want to create this" -#~ msgstr "Πού θέλετε να δημιουργήσετε τη σελίδα" - -#~ msgid "Create a new page" -#~ msgstr "Δημιουργία νέας σελίδας" - -#~ msgid "" -#~ "Your new page will be saved in the <em>top level</em> of your website. " -#~ "You can move it after saving." -#~ msgstr "" -#~ "Η νέα σας σελίδα θα αποθηκευθεί στο <em>κορυφαίο επίπεδο</em> του website " -#~ "σας. Μπορείτε να τη μετακινήσετε μετά την αποθήκευση." - -#~ msgid "More" -#~ msgstr "Περισσότερα" - -#~ msgid "Redirects" -#~ msgstr "Ανακατεθύνσεις" - -#~ msgid "Editors Picks" -#~ msgstr "Επιλογές συντακτών" - -#~ msgid "Snippets" -#~ msgstr "Snippets" - -#~ msgid "" -#~ "Sorry, you do not have access to create a page of type <em>'{0}'</em>." -#~ msgstr "Λυπούμαστε, δεν έχετε πρόσβαση σε σελίδες τύπου <em>'{0}'</em>" - -#~ msgid "" -#~ "Pages of this type can only be created as children of <em>'{0}'</em>. " -#~ "This new page will be saved there." -#~ msgstr "" -#~ "Σελίδες του συγκεκριμένου τύπου μπορούν να δημιουργηθούν μόνο σαν παιδιά " -#~ "του <em>'{0}'</em>. Οπότε η νέα σελίδα θα αποθηκευθεί εκεί." - -#~ msgid "The page could not be created due to errors." -#~ msgstr "Δεν ήταν δυνατή η αποθήκευση της σελίδας." diff --git a/wagtail/wagtailadmin/locale/en/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/en/LC_MESSAGES/django.po index 40d56ccc2..999e25a1a 100644 --- a/wagtail/wagtailadmin/locale/en/LC_MESSAGES/django.po +++ b/wagtail/wagtailadmin/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:41+0000\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -25,46 +25,92 @@ msgstr "" msgid "Common page configuration" msgstr "" -#: forms.py:18 +#: forms.py:19 msgid "Search term" msgstr "" -#: forms.py:42 +#: forms.py:43 msgid "Enter your username" msgstr "" -#: forms.py:45 +#: forms.py:46 msgid "Enter password" msgstr "" -#: forms.py:50 +#: forms.py:51 msgid "Enter your email address to reset your password" msgstr "" -#: forms.py:59 +#: forms.py:60 msgid "Please fill your email address." msgstr "" -#: forms.py:72 +#: forms.py:73 msgid "" "Sorry, you cannot reset your password here as your user account is managed " "by another server." msgstr "" -#: forms.py:75 +#: forms.py:76 msgid "This email address is not recognised." msgstr "" -#: forms.py:82 templates/wagtailadmin/pages/_privacy_indicator.html:13 +#: forms.py:88 +msgid "New title" +msgstr "" + +#: forms.py:89 +msgid "New slug" +msgstr "" + +#: forms.py:95 +msgid "Copy subpages" +msgstr "" + +#: forms.py:97 +#, python-format +msgid "This will copy %(count)s subpage." +msgid_plural "This will copy %(count)s subpages." +msgstr[0] "" +msgstr[1] "" + +#: forms.py:106 +msgid "Publish copied page" +msgstr "" + +#: forms.py:107 +msgid "This page is live. Would you like to publish its copy as well?" +msgstr "" + +#: forms.py:109 +msgid "Publish copies" +msgstr "" + +#: forms.py:111 +#, python-format +msgid "" +"%(count)s of the pages being copied is live. Would you like to publish its " +"copy?" +msgid_plural "" +"%(count)s of the pages being copied are live. Would you like to publish " +"their copies?" +msgstr[0] "" +msgstr[1] "" + +#: forms.py:124 views/pages.py:155 views/pages.py:272 +msgid "This slug is already in use" +msgstr "" + +#: forms.py:130 templates/wagtailadmin/pages/_privacy_indicator.html:13 #: templates/wagtailadmin/pages/_privacy_indicator.html:18 msgid "Public" msgstr "" -#: forms.py:83 +#: forms.py:131 msgid "Private, accessible with the following password" msgstr "" -#: forms.py:91 +#: forms.py:139 msgid "This field is required." msgstr "" @@ -72,7 +118,7 @@ msgstr "" msgid "Dashboard" msgstr "" -#: templates/wagtailadmin/base.html:31 +#: templates/wagtailadmin/base.html:27 msgid "Menu" msgstr "" @@ -218,12 +264,12 @@ msgstr "" #: templates/wagtailadmin/chooser/_search_form.html:7 #: templates/wagtailadmin/pages/search.html:3 #: templates/wagtailadmin/pages/search.html:16 -#: templatetags/wagtailadmin_tags.py:35 +#: templatetags/wagtailadmin_tags.py:36 msgid "Search" msgstr "" #: templates/wagtailadmin/chooser/_search_results.html:3 -#: templatetags/wagtailadmin_tags.py:34 +#: templatetags/wagtailadmin_tags.py:35 msgid "Explorer" msgstr "" @@ -283,7 +329,7 @@ msgstr "" #: templates/wagtailadmin/pages/confirm_delete.html:7 #: templates/wagtailadmin/pages/edit.html:45 #: templates/wagtailadmin/pages/list.html:84 -#: templates/wagtailadmin/pages/list.html:202 +#: templates/wagtailadmin/pages/list.html:205 msgid "Delete" msgstr "" @@ -596,7 +642,7 @@ msgstr "" #: templates/wagtailadmin/pages/confirm_unpublish.html:6 #: templates/wagtailadmin/pages/edit.html:42 #: templates/wagtailadmin/pages/list.html:87 -#: templates/wagtailadmin/pages/list.html:205 +#: templates/wagtailadmin/pages/list.html:208 msgid "Unpublish" msgstr "" @@ -612,6 +658,20 @@ msgstr "" msgid "Pages using" msgstr "" +#: templates/wagtailadmin/pages/copy.html:3 +#, python-format +msgid "Copy %(title)s" +msgstr "" + +#: templates/wagtailadmin/pages/copy.html:6 +#: templates/wagtailadmin/pages/list.html:202 +msgid "Copy" +msgstr "" + +#: templates/wagtailadmin/pages/copy.html:26 +msgid "Copy this page" +msgstr "" + #: templates/wagtailadmin/pages/create.html:5 #, python-format msgid "New %(page_type)s" @@ -665,7 +725,7 @@ msgid "Exploring %(title)s" msgstr "" #: templates/wagtailadmin/pages/list.html:90 -#: templates/wagtailadmin/pages/list.html:208 +#: templates/wagtailadmin/pages/list.html:211 msgid "Add child page" msgstr "" @@ -686,42 +746,42 @@ msgstr "" msgid "Drag" msgstr "" -#: templates/wagtailadmin/pages/list.html:234 -#: templates/wagtailadmin/pages/list.html:238 +#: templates/wagtailadmin/pages/list.html:237 +#: templates/wagtailadmin/pages/list.html:241 #, python-format msgid "Explorer subpages of '%(title)s'" msgstr "" -#: templates/wagtailadmin/pages/list.html:234 -#: templates/wagtailadmin/pages/list.html:238 -#: templates/wagtailadmin/pages/list.html:242 +#: templates/wagtailadmin/pages/list.html:237 +#: templates/wagtailadmin/pages/list.html:241 +#: templates/wagtailadmin/pages/list.html:245 msgid "Explore" msgstr "" -#: templates/wagtailadmin/pages/list.html:242 +#: templates/wagtailadmin/pages/list.html:245 #, python-format -msgid "Explorer child pages of '%(title)s'" +msgid "Explore child pages of '%(title)s'" msgstr "" -#: templates/wagtailadmin/pages/list.html:244 +#: templates/wagtailadmin/pages/list.html:247 #, python-format msgid "Add a child page to '%(title)s'" msgstr "" -#: templates/wagtailadmin/pages/list.html:244 +#: templates/wagtailadmin/pages/list.html:247 msgid "Add subpage" msgstr "" -#: templates/wagtailadmin/pages/list.html:253 +#: templates/wagtailadmin/pages/list.html:256 msgid "No pages have been created." msgstr "" -#: templates/wagtailadmin/pages/list.html:253 +#: templates/wagtailadmin/pages/list.html:256 #, python-format msgid "Why not <a href=\"%(add_page_url)s\">add one</a>?" msgstr "" -#: templates/wagtailadmin/pages/list.html:260 +#: templates/wagtailadmin/pages/list.html:263 #, python-format msgid "" "\n" @@ -729,7 +789,7 @@ msgid "" " " msgstr "" -#: templates/wagtailadmin/pages/list.html:266 +#: templates/wagtailadmin/pages/list.html:269 #: templates/wagtailadmin/pages/search_results.html:35 #: templates/wagtailadmin/pages/search_results.html:37 #: templates/wagtailadmin/pages/usage_results.html:13 @@ -739,7 +799,7 @@ msgstr "" msgid "Previous" msgstr "" -#: templates/wagtailadmin/pages/list.html:271 +#: templates/wagtailadmin/pages/list.html:274 #: templates/wagtailadmin/pages/search_results.html:44 #: templates/wagtailadmin/pages/search_results.html:46 #: templates/wagtailadmin/pages/usage_results.html:18 @@ -890,6 +950,13 @@ msgstr "" msgid "Sat" msgstr "" +#: templates/wagtailadmin/shared/header.html:23 +#, python-format +msgid "Used %(useage_count)s time" +msgid_plural "Used %(useage_count)s times" +msgstr[0] "" +msgstr[1] "" + #: templates/wagtailadmin/shared/main_nav.html:10 msgid "Account settings" msgstr "" @@ -927,62 +994,66 @@ msgstr "" msgid "Your preferences have been updated successfully!" msgstr "" -#: views/pages.py:146 views/pages.py:263 -msgid "This slug is already in use" -msgstr "" - -#: views/pages.py:160 views/pages.py:277 +#: views/pages.py:169 views/pages.py:286 msgid "Go live date/time must be before expiry date/time" msgstr "" -#: views/pages.py:170 views/pages.py:287 +#: views/pages.py:179 views/pages.py:296 msgid "Expiry date/time must be in the future" msgstr "" -#: views/pages.py:210 views/pages.py:334 views/pages.py:707 +#: views/pages.py:219 views/pages.py:351 views/pages.py:791 msgid "Page '{0}' published." msgstr "" -#: views/pages.py:212 views/pages.py:336 +#: views/pages.py:221 views/pages.py:353 msgid "Page '{0}' submitted for moderation." msgstr "" -#: views/pages.py:215 +#: views/pages.py:224 msgid "Page '{0}' created." msgstr "" -#: views/pages.py:224 +#: views/pages.py:233 msgid "The page could not be created due to validation errors" msgstr "" -#: views/pages.py:339 +#: views/pages.py:356 msgid "Page '{0}' updated." msgstr "" -#: views/pages.py:348 +#: views/pages.py:365 msgid "The page could not be saved due to validation errors" msgstr "" -#: views/pages.py:361 +#: views/pages.py:378 msgid "This page is currently awaiting moderation" msgstr "" -#: views/pages.py:381 +#: views/pages.py:409 msgid "Page '{0}' deleted." msgstr "" -#: views/pages.py:543 +#: views/pages.py:575 msgid "Page '{0}' unpublished." msgstr "" -#: views/pages.py:594 +#: views/pages.py:627 msgid "Page '{0}' moved." msgstr "" -#: views/pages.py:701 views/pages.py:720 views/pages.py:740 +#: views/pages.py:709 +msgid "Page '{0}' and {1} subpages copied." +msgstr "" + +#: views/pages.py:711 +msgid "Page '{0}' copied." +msgstr "" + +#: views/pages.py:785 views/pages.py:804 views/pages.py:824 msgid "The page '{0}' is not currently awaiting moderation." msgstr "" -#: views/pages.py:726 +#: views/pages.py:810 msgid "Page '{0}' rejected for publication." msgstr "" diff --git a/wagtail/wagtailadmin/locale/es/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/es/LC_MESSAGES/django.po index 4507d528f..36aa5f402 100644 --- a/wagtail/wagtailadmin/locale/es/LC_MESSAGES/django.po +++ b/wagtail/wagtailadmin/locale/es/LC_MESSAGES/django.po @@ -1,23 +1,22 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # fooflare <amos.oviedo@gmail.com>, 2014 -# unaizalakain <unai@gisa-elkartea.org>, 2014 +# Unai Zalakain <unai@gisa-elkartea.org>, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:41+0000\n" -"PO-Revision-Date: 2014-03-23 10:24+0000\n" -"Last-Translator: fooflare <amos.oviedo@gmail.com>\n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/wagtail/language/" -"es/)\n" -"Language: es\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Spanish (http://www.transifex.com/projects/p/wagtail/language/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: edit_handlers.py:627 @@ -28,58 +27,100 @@ msgstr "" msgid "Common page configuration" msgstr "Configuración común de página" -#: forms.py:18 +#: forms.py:19 msgid "Search term" msgstr "Término de búsqueda" -#: forms.py:42 +#: forms.py:43 msgid "Enter your username" msgstr "Introduce tu nombre de usuario" -#: forms.py:45 +#: forms.py:46 msgid "Enter password" msgstr "Introduce contraseña" -#: forms.py:50 +#: forms.py:51 msgid "Enter your email address to reset your password" msgstr "Escribe tu dirección de correo para restablecer tu contraseña" -#: forms.py:59 +#: forms.py:60 msgid "Please fill your email address." msgstr "Rellena tu dirección de correo por favor." -#: forms.py:72 +#: forms.py:73 msgid "" "Sorry, you cannot reset your password here as your user account is managed " "by another server." -msgstr "" -"Lo sentimos, no puedes restablecer tu contraseña aquí porque tu cuenta es " -"gestionada por otro servidor." +msgstr "Lo sentimos, no puedes restablecer tu contraseña aquí porque tu cuenta es gestionada por otro servidor." -#: forms.py:75 +#: forms.py:76 msgid "This email address is not recognised." msgstr "No se reconoce la dirección de correo." -#: forms.py:82 templates/wagtailadmin/pages/_privacy_indicator.html:13 -#: templates/wagtailadmin/pages/_privacy_indicator.html:18 -#, fuzzy -msgid "Public" -msgstr "Publicar" +#: forms.py:88 +msgid "New title" +msgstr "" -#: forms.py:83 +#: forms.py:89 +msgid "New slug" +msgstr "" + +#: forms.py:95 +msgid "Copy subpages" +msgstr "" + +#: forms.py:97 +#, python-format +msgid "This will copy %(count)s subpage." +msgid_plural "This will copy %(count)s subpages." +msgstr[0] "" +msgstr[1] "" + +#: forms.py:106 +msgid "Publish copied page" +msgstr "" + +#: forms.py:107 +msgid "This page is live. Would you like to publish its copy as well?" +msgstr "" + +#: forms.py:109 +msgid "Publish copies" +msgstr "" + +#: forms.py:111 +#, python-format +msgid "" +"%(count)s of the pages being copied is live. Would you like to publish its " +"copy?" +msgid_plural "" +"%(count)s of the pages being copied are live. Would you like to publish " +"their copies?" +msgstr[0] "" +msgstr[1] "" + +#: forms.py:124 views/pages.py:155 views/pages.py:272 +msgid "This slug is already in use" +msgstr "Este slug ya está en uso" + +#: forms.py:130 templates/wagtailadmin/pages/_privacy_indicator.html:13 +#: templates/wagtailadmin/pages/_privacy_indicator.html:18 +msgid "Public" +msgstr "" + +#: forms.py:131 msgid "Private, accessible with the following password" msgstr "" -#: forms.py:91 -#, fuzzy +#: forms.py:139 msgid "This field is required." -msgstr "No se reconoce la dirección de correo." +msgstr "" #: templates/wagtailadmin/base.html:7 templates/wagtailadmin/home.html:4 msgid "Dashboard" msgstr "Panel de control" -#: templates/wagtailadmin/base.html:31 +#: templates/wagtailadmin/base.html:27 msgid "Menu" msgstr "Menú" @@ -92,9 +133,7 @@ msgstr "Bienvenido al CMS Wagtail %(site_name)s" msgid "" "This is your dashboard on which helpful information about content you've " "created will be displayed." -msgstr "" -"Este es tu panel de control donde aparecerá información útil sobre el " -"contenido que has creado." +msgstr "Este es tu panel de control donde aparecerá información útil sobre el contenido que has creado." #: templates/wagtailadmin/login.html:4 templates/wagtailadmin/login.html:59 msgid "Sign in" @@ -126,10 +165,7 @@ msgid "" "Your avatar image is provided by Gravatar and is connected to your email " "address. With a Gravatar account you can set an avatar for any number of " "other email addresses you use." -msgstr "" -"Tu avatar es provisto por Gravatar y está conectado a tu dirección de " -"correo. Con una cuenta Gravatar puedes establecer un avatar para cualquier " -"número de correos electrónicos." +msgstr "Tu avatar es provisto por Gravatar y está conectado a tu dirección de correo. Con una cuenta Gravatar puedes establecer un avatar para cualquier número de correos electrónicos." #: templates/wagtailadmin/account/account.html:25 #: templates/wagtailadmin/account/change_password.html:4 @@ -156,9 +192,7 @@ msgstr "Cambiar Contraseña" #: templates/wagtailadmin/account/change_password.html:21 msgid "" "Your password can't be changed here. Please contact a site administrator." -msgstr "" -"Tu contraseña no puede cambiarse aquí. Por favor, contacta con el " -"administrador." +msgstr "Tu contraseña no puede cambiarse aquí. Por favor, contacta con el administrador." #: templates/wagtailadmin/account/notification_preferences.html:4 #: templates/wagtailadmin/account/notification_preferences.html:6 @@ -200,9 +234,7 @@ msgstr "Revisa tu correo electrónico" #: templates/wagtailadmin/account/password_reset/done.html:16 msgid "A link to reset your password has been emailed to you." -msgstr "" -"Un enlace para restablecer tu contraseña, te ha sido enviado por correo " -"electrónico." +msgstr "Un enlace para restablecer tu contraseña, te ha sido enviado por correo electrónico." #: templates/wagtailadmin/account/password_reset/email.txt:2 msgid "Please follow the link below to reset your password" @@ -234,12 +266,12 @@ msgstr "Enlace de correo electrónico" #: templates/wagtailadmin/chooser/_search_form.html:7 #: templates/wagtailadmin/pages/search.html:3 #: templates/wagtailadmin/pages/search.html:16 -#: templatetags/wagtailadmin_tags.py:35 +#: templatetags/wagtailadmin_tags.py:36 msgid "Search" msgstr "Búsqueda" #: templates/wagtailadmin/chooser/_search_results.html:3 -#: templatetags/wagtailadmin_tags.py:34 +#: templatetags/wagtailadmin_tags.py:35 msgid "Explorer" msgstr "Explorador" @@ -253,14 +285,8 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "" -"\n" -" Hay una coincidencia\n" -" " -msgstr[1] "" -"\n" -" Hay %(counter)s coincidencias\n" -" " +msgstr[0] "\n Hay una coincidencia\n " +msgstr[1] "\n Hay %(counter)s coincidencias\n " #: templates/wagtailadmin/chooser/browse.html:2 #: templates/wagtailadmin/chooser/search.html:2 @@ -305,7 +331,7 @@ msgstr "Bajar" #: templates/wagtailadmin/pages/confirm_delete.html:7 #: templates/wagtailadmin/pages/edit.html:45 #: templates/wagtailadmin/pages/list.html:84 -#: templates/wagtailadmin/pages/list.html:202 +#: templates/wagtailadmin/pages/list.html:205 msgid "Delete" msgstr "Eliminar" @@ -417,14 +443,8 @@ msgid_plural "" "\n" " <span>%(total_pages)s</span> Pages\n" " " -msgstr[0] "" -"\n" -" <span>%(total_pages)s</span> Página\n" -" " -msgstr[1] "" -"\n" -" <span>%(total_pages)s</span> Páginas\n" -" " +msgstr[0] "\n <span>%(total_pages)s</span> Página\n " +msgstr[1] "\n <span>%(total_pages)s</span> Páginas\n " #: templates/wagtailadmin/home/site_summary.html:16 #, python-format @@ -436,14 +456,8 @@ msgid_plural "" "\n" " <span>%(total_images)s</span> Images\n" " " -msgstr[0] "" -"\n" -" <span>%(total_images)s</span> Imagen\n" -" " -msgstr[1] "" -"\n" -" <span>%(total_images)s</span> Imágenes\n" -" " +msgstr[0] "\n <span>%(total_images)s</span> Imagen\n " +msgstr[1] "\n <span>%(total_images)s</span> Imágenes\n " #: templates/wagtailadmin/home/site_summary.html:25 #, python-format @@ -455,14 +469,8 @@ msgid_plural "" "\n" " <span>%(total_docs)s</span> Documents\n" " " -msgstr[0] "" -"\n" -" <span>%(total_docs)s</span> Documento\n" -" " -msgstr[1] "" -"\n" -" <span>%(total_docs)s</span> Documentos\n" -" " +msgstr[0] "\n <span>%(total_docs)s</span> Documento\n " +msgstr[1] "\n <span>%(total_docs)s</span> Documentos\n " #: templates/wagtailadmin/notifications/approved.html:1 #, python-format @@ -521,9 +529,8 @@ msgid "This page has been made private by a parent page." msgstr "" #: templates/wagtailadmin/page_privacy/ancestor_privacy.html:7 -#, fuzzy msgid "You can edit the privacy settings on:" -msgstr "Puedes editar la página aquí:" +msgstr "" #: templates/wagtailadmin/page_privacy/set_privacy.html:6 msgid "<b>Note:</b> privacy changes apply to all children of this page too." @@ -533,14 +540,9 @@ msgstr "" #, python-format msgid "" "\n" -" Previewing '%(title)s', submitted by %(submitted_by)s on " -"%(submitted_on)s.\n" -" " -msgstr "" -"\n" -" Previsualizando '%(title)s', enviada por %(submitted_by)s en " -"%(submitted_on)s.\n" +" Previewing '%(title)s', submitted by %(submitted_by)s on %(submitted_on)s.\n" " " +msgstr "\n Previsualizando '%(title)s', enviada por %(submitted_by)s en %(submitted_on)s.\n " #: templates/wagtailadmin/pages/_privacy_indicator.html:9 msgid "Privacy" @@ -586,26 +588,16 @@ msgid "" " " msgid_plural "" "\n" -" This will also delete %(descendant_count)s more " -"subpages.\n" -" " -msgstr[0] "" -"\n" -" Esto también borrará otra subpágina.\n" -" " -msgstr[1] "" -"\n" -" Esto también eliminará %(descendant_count)s subpáginas " -"más.\n" +" This will also delete %(descendant_count)s more subpages.\n" " " +msgstr[0] "\n Esto también borrará otra subpágina.\n " +msgstr[1] "\n Esto también eliminará %(descendant_count)s subpáginas más.\n " #: templates/wagtailadmin/pages/confirm_delete.html:22 msgid "" "Alternatively you can unpublish the page. This removes the page from public " "view and you can edit or publish it again later." -msgstr "" -"Otra opción es no publicar la página. Esto no permite que el público la vea " -"y la puedes editar o volver a publicar más tarde." +msgstr "Otra opción es no publicar la página. Esto no permite que el público la vea y la puedes editar o volver a publicar más tarde." #: templates/wagtailadmin/pages/confirm_delete.html:26 msgid "Delete it" @@ -636,9 +628,7 @@ msgstr "Estás seguro de que quieres mover esta página a dentro de '%(title)s'? msgid "" "Are you sure you want to move this page and all of its children into " "'%(title)s'?" -msgstr "" -"Estás seguro de que quieres mover esta página y todas sus páginas hijas a " -"'%(title)s'?" +msgstr "Estás seguro de que quieres mover esta página y todas sus páginas hijas a '%(title)s'?" #: templates/wagtailadmin/pages/confirm_move.html:18 msgid "Yes, move this page" @@ -652,7 +642,7 @@ msgstr "No publicar %(title)s" #: templates/wagtailadmin/pages/confirm_unpublish.html:6 #: templates/wagtailadmin/pages/edit.html:42 #: templates/wagtailadmin/pages/list.html:87 -#: templates/wagtailadmin/pages/list.html:205 +#: templates/wagtailadmin/pages/list.html:208 msgid "Unpublish" msgstr "No publicar" @@ -668,6 +658,20 @@ msgstr "Sí, no publicar" msgid "Pages using" msgstr "Páginas usando" +#: templates/wagtailadmin/pages/copy.html:3 +#, python-format +msgid "Copy %(title)s" +msgstr "" + +#: templates/wagtailadmin/pages/copy.html:6 +#: templates/wagtailadmin/pages/list.html:202 +msgid "Copy" +msgstr "" + +#: templates/wagtailadmin/pages/copy.html:26 +msgid "Copy this page" +msgstr "" + #: templates/wagtailadmin/pages/create.html:5 #, python-format msgid "New %(page_type)s" @@ -721,7 +725,7 @@ msgid "Exploring %(title)s" msgstr "Explorando %(title)s" #: templates/wagtailadmin/pages/list.html:90 -#: templates/wagtailadmin/pages/list.html:208 +#: templates/wagtailadmin/pages/list.html:211 msgid "Add child page" msgstr "Añadir página hija" @@ -742,53 +746,50 @@ msgstr "Habilitar organización de páginas hijas" msgid "Drag" msgstr "Llevar" -#: templates/wagtailadmin/pages/list.html:234 -#: templates/wagtailadmin/pages/list.html:238 +#: templates/wagtailadmin/pages/list.html:237 +#: templates/wagtailadmin/pages/list.html:241 #, python-format msgid "Explorer subpages of '%(title)s'" msgstr "Explorar subpáginas de '%(title)s'" -#: templates/wagtailadmin/pages/list.html:234 -#: templates/wagtailadmin/pages/list.html:238 -#: templates/wagtailadmin/pages/list.html:242 +#: templates/wagtailadmin/pages/list.html:237 +#: templates/wagtailadmin/pages/list.html:241 +#: templates/wagtailadmin/pages/list.html:245 msgid "Explore" msgstr "Explorar" -#: templates/wagtailadmin/pages/list.html:242 +#: templates/wagtailadmin/pages/list.html:245 #, python-format -msgid "Explorer child pages of '%(title)s'" -msgstr "Explorar páginas hijas de '%(title)s'" +msgid "Explore child pages of '%(title)s'" +msgstr "" -#: templates/wagtailadmin/pages/list.html:244 +#: templates/wagtailadmin/pages/list.html:247 #, python-format msgid "Add a child page to '%(title)s'" msgstr "Añadir página hija a '%(title)s'" -#: templates/wagtailadmin/pages/list.html:244 +#: templates/wagtailadmin/pages/list.html:247 msgid "Add subpage" msgstr "Añadir subpágina" -#: templates/wagtailadmin/pages/list.html:253 +#: templates/wagtailadmin/pages/list.html:256 msgid "No pages have been created." msgstr "No ha sido creada ninguna página." -#: templates/wagtailadmin/pages/list.html:253 +#: templates/wagtailadmin/pages/list.html:256 #, python-format msgid "Why not <a href=\"%(add_page_url)s\">add one</a>?" msgstr "Por qué no <a href=\"%(add_page_url)s\">añadir una</a>?" -#: templates/wagtailadmin/pages/list.html:260 -#, fuzzy, python-format +#: templates/wagtailadmin/pages/list.html:263 +#, python-format msgid "" "\n" " Page %(page_number)s of %(num_pages)s.\n" " " msgstr "" -"\n" -" Página %(page_number)s de %(num_pages)s.\n" -" " -#: templates/wagtailadmin/pages/list.html:266 +#: templates/wagtailadmin/pages/list.html:269 #: templates/wagtailadmin/pages/search_results.html:35 #: templates/wagtailadmin/pages/search_results.html:37 #: templates/wagtailadmin/pages/usage_results.html:13 @@ -798,7 +799,7 @@ msgstr "" msgid "Previous" msgstr "Anterior" -#: templates/wagtailadmin/pages/list.html:271 +#: templates/wagtailadmin/pages/list.html:274 #: templates/wagtailadmin/pages/search_results.html:44 #: templates/wagtailadmin/pages/search_results.html:46 #: templates/wagtailadmin/pages/usage_results.html:18 @@ -819,7 +820,7 @@ msgid "Select a new parent page for <span>%(title)s</span>" msgstr "Selecciona una nueva página padre para <span>%(title)s</span>" #: templates/wagtailadmin/pages/search_results.html:6 -#, fuzzy, python-format +#, python-format msgid "" "\n" " There is one matching page\n" @@ -829,13 +830,7 @@ msgid_plural "" " There are %(counter)s matching pages\n" " " msgstr[0] "" -"\n" -" Hay una coincidencia\n" -" " msgstr[1] "" -"\n" -" Hay %(counter)s coincidencias\n" -" " #: templates/wagtailadmin/pages/search_results.html:16 msgid "Other searches" @@ -860,10 +855,7 @@ msgid "" "\n" " Page %(page_number)s of %(num_pages)s.\n" " " -msgstr "" -"\n" -" Página %(page_number)s de %(num_pages)s.\n" -" " +msgstr "\n Página %(page_number)s de %(num_pages)s.\n " #: templates/wagtailadmin/pages/search_results.html:54 #, python-format @@ -875,9 +867,8 @@ msgid "Enter a search term above" msgstr "Introduce el término de búsqueda arriba" #: templates/wagtailadmin/pages/usage_results.html:24 -#, fuzzy msgid "No pages use" -msgstr "Páginas usando" +msgstr "" #: templates/wagtailadmin/shared/breadcrumb.html:6 msgid "Home" @@ -892,9 +883,8 @@ msgid "February" msgstr "" #: templates/wagtailadmin/shared/datetimepicker_translations.html:8 -#, fuzzy msgid "March" -msgstr "Búsqueda" +msgstr "" #: templates/wagtailadmin/shared/datetimepicker_translations.html:9 msgid "April" @@ -957,9 +947,15 @@ msgid "Fri" msgstr "" #: templates/wagtailadmin/shared/datetimepicker_translations.html:26 -#, fuzzy msgid "Sat" -msgstr "Estado" +msgstr "" + +#: templates/wagtailadmin/shared/header.html:23 +#, python-format +msgid "Used %(useage_count)s time" +msgid_plural "Used %(useage_count)s times" +msgstr[0] "" +msgstr[1] "" #: templates/wagtailadmin/shared/main_nav.html:10 msgid "Account settings" @@ -975,9 +971,8 @@ msgid "Page %(page_num)s of %(total_pages)s." msgstr "Página %(page_num)s de %(total_pages)s." #: templates/wagtailadmin/userbar/base.html:4 -#, fuzzy msgid "User bar" -msgstr "Usuarios" +msgstr "" #: templates/wagtailadmin/userbar/base.html:14 msgid "Go to Wagtail admin interface" @@ -996,123 +991,69 @@ msgid "Your password has been changed successfully!" msgstr "¡Tu contraseña ha sido cambiada con éxito!" #: views/account.py:60 -#, fuzzy msgid "Your preferences have been updated successfully!" -msgstr "¡Tu contraseña ha sido cambiada con éxito!" +msgstr "" -#: views/pages.py:146 views/pages.py:263 -msgid "This slug is already in use" -msgstr "Este slug ya está en uso" - -#: views/pages.py:160 views/pages.py:277 +#: views/pages.py:169 views/pages.py:286 msgid "Go live date/time must be before expiry date/time" msgstr "" -#: views/pages.py:170 views/pages.py:287 +#: views/pages.py:179 views/pages.py:296 msgid "Expiry date/time must be in the future" msgstr "" -#: views/pages.py:210 views/pages.py:334 views/pages.py:707 +#: views/pages.py:219 views/pages.py:351 views/pages.py:791 msgid "Page '{0}' published." msgstr "Página '{0}' publicada." -#: views/pages.py:212 views/pages.py:336 +#: views/pages.py:221 views/pages.py:353 msgid "Page '{0}' submitted for moderation." msgstr "Página '{0}' enviada para ser moderada." -#: views/pages.py:215 +#: views/pages.py:224 msgid "Page '{0}' created." msgstr "Página '{0}' creada." -#: views/pages.py:224 -#, fuzzy +#: views/pages.py:233 msgid "The page could not be created due to validation errors" -msgstr "La página no ha podido ser guardada debido a errores de validación" +msgstr "" -#: views/pages.py:339 +#: views/pages.py:356 msgid "Page '{0}' updated." msgstr "Página '{0}' actualizada." -#: views/pages.py:348 +#: views/pages.py:365 msgid "The page could not be saved due to validation errors" msgstr "La página no ha podido ser guardada debido a errores de validación" -#: views/pages.py:361 +#: views/pages.py:378 msgid "This page is currently awaiting moderation" msgstr "La página está a la espera de ser moderada" -#: views/pages.py:381 +#: views/pages.py:409 msgid "Page '{0}' deleted." msgstr "Página '{0}' eliminada." -#: views/pages.py:543 +#: views/pages.py:575 msgid "Page '{0}' unpublished." msgstr "Página '{0}' no publicada." -#: views/pages.py:594 +#: views/pages.py:627 msgid "Page '{0}' moved." msgstr "Página '{0}' movida." -#: views/pages.py:701 views/pages.py:720 views/pages.py:740 +#: views/pages.py:709 +msgid "Page '{0}' and {1} subpages copied." +msgstr "" + +#: views/pages.py:711 +msgid "Page '{0}' copied." +msgstr "" + +#: views/pages.py:785 views/pages.py:804 views/pages.py:824 msgid "The page '{0}' is not currently awaiting moderation." msgstr "La página '{0}' no está esperando a ser moderada." -#: views/pages.py:726 +#: views/pages.py:810 msgid "Page '{0}' rejected for publication." msgstr "Rechazada la publicación de la página '{0}'." - -#~ msgid "Please type a valid time" -#~ msgstr "Por favor, escribe una hora válida" - -#~ msgid "View draft" -#~ msgstr "Ver borrador" - -#~ msgid "View live" -#~ msgstr "Ver en vivo" - -#~ msgid "Status:" -#~ msgstr "Estado:" - -#~ msgid "Where do you want to create a %(page_type)s" -#~ msgstr "Dónde quieres crear una %(page_type)s" - -#~ msgid "Where do you want to create this" -#~ msgstr "Dónde quieres crear esto" - -#~ msgid "Create a new page" -#~ msgstr "Crear una nueva página" - -#~ msgid "" -#~ "Your new page will be saved in the <em>top level</em> of your website. " -#~ "You can move it after saving." -#~ msgstr "" -#~ "Tu nueva página sera guardada en el <em>nivel superior</em> de tu sitio " -#~ "web. Puedes moverla después de guardar." - -#~ msgid "More" -#~ msgstr "Más" - -#~ msgid "Redirects" -#~ msgstr "Redirecciones" - -#~ msgid "Editors Picks" -#~ msgstr "Selecciones del Editor" - -#~ msgid "Snippets" -#~ msgstr "Fragmentos" - -#~ msgid "" -#~ "Sorry, you do not have access to create a page of type <em>'{0}'</em>." -#~ msgstr "" -#~ "Lo sentimos, no tienes permiso para crear una página de tipo <em>'{0}'</" -#~ "em>." - -#~ msgid "" -#~ "Pages of this type can only be created as children of <em>'{0}'</em>. " -#~ "This new page will be saved there." -#~ msgstr "" -#~ "Páginas de este tipo solo pueden ser creadas como hijas de <em>'{0}'</" -#~ "em>. Esta nueva página será guardada ahí." - -#~ msgid "The page could not be created due to errors." -#~ msgstr "La página no ha podido ser creada debido a errores." diff --git a/wagtail/wagtailadmin/locale/eu/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/eu/LC_MESSAGES/django.po index 0210c6b96..85ab69320 100644 --- a/wagtail/wagtailadmin/locale/eu/LC_MESSAGES/django.po +++ b/wagtail/wagtailadmin/locale/eu/LC_MESSAGES/django.po @@ -1,22 +1,21 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: -# unaizalakain <unai@gisa-elkartea.org>, 2014 +# Unai Zalakain <unai@gisa-elkartea.org>, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:41+0000\n" -"PO-Revision-Date: 2014-03-14 21:12+0000\n" -"Last-Translator: serafeim <serafeim@torchbox.com>\n" -"Language-Team: Basque (http://www.transifex.com/projects/p/wagtail/language/" -"eu/)\n" -"Language: eu\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Basque (http://www.transifex.com/projects/p/wagtail/language/eu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: eu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: edit_handlers.py:627 @@ -27,57 +26,100 @@ msgstr "" msgid "Common page configuration" msgstr "" -#: forms.py:18 +#: forms.py:19 msgid "Search term" msgstr "Bilaketa terminoa" -#: forms.py:42 +#: forms.py:43 msgid "Enter your username" msgstr "" -#: forms.py:45 +#: forms.py:46 msgid "Enter password" msgstr "" -#: forms.py:50 +#: forms.py:51 msgid "Enter your email address to reset your password" msgstr "Idatzi zure eposta helbidea zure pasahitza berrezartzeko" -#: forms.py:59 +#: forms.py:60 msgid "Please fill your email address." msgstr "Idatzi zure eposta helbidea mesedez." -#: forms.py:72 +#: forms.py:73 msgid "" "Sorry, you cannot reset your password here as your user account is managed " "by another server." -msgstr "" -"Sentitzen dugu, ezin duzu zure pasahitza hemen berrezarri zure kontua beste " -"zerbitzari batek kudeatzen duelako." +msgstr "Sentitzen dugu, ezin duzu zure pasahitza hemen berrezarri zure kontua beste zerbitzari batek kudeatzen duelako." -#: forms.py:75 +#: forms.py:76 msgid "This email address is not recognised." msgstr "Ez da horrelako eposta helbiderik ezagutzen." -#: forms.py:82 templates/wagtailadmin/pages/_privacy_indicator.html:13 +#: forms.py:88 +msgid "New title" +msgstr "" + +#: forms.py:89 +msgid "New slug" +msgstr "" + +#: forms.py:95 +msgid "Copy subpages" +msgstr "" + +#: forms.py:97 +#, python-format +msgid "This will copy %(count)s subpage." +msgid_plural "This will copy %(count)s subpages." +msgstr[0] "" +msgstr[1] "" + +#: forms.py:106 +msgid "Publish copied page" +msgstr "" + +#: forms.py:107 +msgid "This page is live. Would you like to publish its copy as well?" +msgstr "" + +#: forms.py:109 +msgid "Publish copies" +msgstr "" + +#: forms.py:111 +#, python-format +msgid "" +"%(count)s of the pages being copied is live. Would you like to publish its " +"copy?" +msgid_plural "" +"%(count)s of the pages being copied are live. Would you like to publish " +"their copies?" +msgstr[0] "" +msgstr[1] "" + +#: forms.py:124 views/pages.py:155 views/pages.py:272 +msgid "This slug is already in use" +msgstr "" + +#: forms.py:130 templates/wagtailadmin/pages/_privacy_indicator.html:13 #: templates/wagtailadmin/pages/_privacy_indicator.html:18 msgid "Public" msgstr "" -#: forms.py:83 +#: forms.py:131 msgid "Private, accessible with the following password" msgstr "" -#: forms.py:91 -#, fuzzy +#: forms.py:139 msgid "This field is required." -msgstr "Ez da horrelako eposta helbiderik ezagutzen." +msgstr "" #: templates/wagtailadmin/base.html:7 templates/wagtailadmin/home.html:4 msgid "Dashboard" msgstr "Kontrol panela" -#: templates/wagtailadmin/base.html:31 +#: templates/wagtailadmin/base.html:27 msgid "Menu" msgstr "" @@ -90,9 +132,7 @@ msgstr "Ongi etorri %(site_name)s Wagtail CMSra" msgid "" "This is your dashboard on which helpful information about content you've " "created will be displayed." -msgstr "" -"Kontrol panel honetan sortu duzun edukiekin erlazionaturiko informazio " -"baliagarria agertuko da." +msgstr "Kontrol panel honetan sortu duzun edukiekin erlazionaturiko informazio baliagarria agertuko da." #: templates/wagtailadmin/login.html:4 templates/wagtailadmin/login.html:59 msgid "Sign in" @@ -100,9 +140,7 @@ msgstr "" #: templates/wagtailadmin/login.html:18 msgid "Your username and password didn't match. Please try again." -msgstr "" -"Zure erabiltzaileak eta pasahitzak ez dute bat egin. Mesedez saiatu " -"beranduago." +msgstr "Zure erabiltzaileak eta pasahitzak ez dute bat egin. Mesedez saiatu beranduago." #: templates/wagtailadmin/login.html:26 msgid "Sign in to Wagtail" @@ -126,10 +164,7 @@ msgid "" "Your avatar image is provided by Gravatar and is connected to your email " "address. With a Gravatar account you can set an avatar for any number of " "other email addresses you use." -msgstr "" -"Zure avatar irudia Gravatar-ek hornitzen du eta zure eposta helbidera " -"konektatua dago. Gravatar kontu batekin erabiltzen duzun eposta helbide " -"bakoitzeko avatar bat ezarri dezakezu." +msgstr "Zure avatar irudia Gravatar-ek hornitzen du eta zure eposta helbidera konektatua dago. Gravatar kontu batekin erabiltzen duzun eposta helbide bakoitzeko avatar bat ezarri dezakezu." #: templates/wagtailadmin/account/account.html:25 #: templates/wagtailadmin/account/change_password.html:4 @@ -156,8 +191,7 @@ msgstr "" #: templates/wagtailadmin/account/change_password.html:21 msgid "" "Your password can't be changed here. Please contact a site administrator." -msgstr "" -"Zure pasahitza ezin da hemen aldatu. Mesedez kontaktatu administratzailea." +msgstr "Zure pasahitza ezin da hemen aldatu. Mesedez kontaktatu administratzailea." #: templates/wagtailadmin/account/notification_preferences.html:4 #: templates/wagtailadmin/account/notification_preferences.html:6 @@ -231,12 +265,12 @@ msgstr "Eposta esteka" #: templates/wagtailadmin/chooser/_search_form.html:7 #: templates/wagtailadmin/pages/search.html:3 #: templates/wagtailadmin/pages/search.html:16 -#: templatetags/wagtailadmin_tags.py:35 +#: templatetags/wagtailadmin_tags.py:36 msgid "Search" msgstr "Bilatu" #: templates/wagtailadmin/chooser/_search_results.html:3 -#: templatetags/wagtailadmin_tags.py:34 +#: templatetags/wagtailadmin_tags.py:35 msgid "Explorer" msgstr "Arakatzailea" @@ -296,7 +330,7 @@ msgstr "Behera mugitu" #: templates/wagtailadmin/pages/confirm_delete.html:7 #: templates/wagtailadmin/pages/edit.html:45 #: templates/wagtailadmin/pages/list.html:84 -#: templates/wagtailadmin/pages/list.html:202 +#: templates/wagtailadmin/pages/list.html:205 msgid "Delete" msgstr "Ezabatu" @@ -505,8 +539,7 @@ msgstr "" #, python-format msgid "" "\n" -" Previewing '%(title)s', submitted by %(submitted_by)s on " -"%(submitted_on)s.\n" +" Previewing '%(title)s', submitted by %(submitted_by)s on %(submitted_on)s.\n" " " msgstr "" @@ -554,8 +587,7 @@ msgid "" " " msgid_plural "" "\n" -" This will also delete %(descendant_count)s more " -"subpages.\n" +" This will also delete %(descendant_count)s more subpages.\n" " " msgstr[0] "" msgstr[1] "" @@ -609,7 +641,7 @@ msgstr "" #: templates/wagtailadmin/pages/confirm_unpublish.html:6 #: templates/wagtailadmin/pages/edit.html:42 #: templates/wagtailadmin/pages/list.html:87 -#: templates/wagtailadmin/pages/list.html:205 +#: templates/wagtailadmin/pages/list.html:208 msgid "Unpublish" msgstr "" @@ -625,6 +657,20 @@ msgstr "" msgid "Pages using" msgstr "" +#: templates/wagtailadmin/pages/copy.html:3 +#, python-format +msgid "Copy %(title)s" +msgstr "" + +#: templates/wagtailadmin/pages/copy.html:6 +#: templates/wagtailadmin/pages/list.html:202 +msgid "Copy" +msgstr "" + +#: templates/wagtailadmin/pages/copy.html:26 +msgid "Copy this page" +msgstr "" + #: templates/wagtailadmin/pages/create.html:5 #, python-format msgid "New %(page_type)s" @@ -678,7 +724,7 @@ msgid "Exploring %(title)s" msgstr "" #: templates/wagtailadmin/pages/list.html:90 -#: templates/wagtailadmin/pages/list.html:208 +#: templates/wagtailadmin/pages/list.html:211 msgid "Add child page" msgstr "" @@ -699,42 +745,42 @@ msgstr "" msgid "Drag" msgstr "" -#: templates/wagtailadmin/pages/list.html:234 -#: templates/wagtailadmin/pages/list.html:238 +#: templates/wagtailadmin/pages/list.html:237 +#: templates/wagtailadmin/pages/list.html:241 #, python-format msgid "Explorer subpages of '%(title)s'" msgstr "" -#: templates/wagtailadmin/pages/list.html:234 -#: templates/wagtailadmin/pages/list.html:238 -#: templates/wagtailadmin/pages/list.html:242 +#: templates/wagtailadmin/pages/list.html:237 +#: templates/wagtailadmin/pages/list.html:241 +#: templates/wagtailadmin/pages/list.html:245 msgid "Explore" msgstr "" -#: templates/wagtailadmin/pages/list.html:242 +#: templates/wagtailadmin/pages/list.html:245 #, python-format -msgid "Explorer child pages of '%(title)s'" +msgid "Explore child pages of '%(title)s'" msgstr "" -#: templates/wagtailadmin/pages/list.html:244 +#: templates/wagtailadmin/pages/list.html:247 #, python-format msgid "Add a child page to '%(title)s'" msgstr "" -#: templates/wagtailadmin/pages/list.html:244 +#: templates/wagtailadmin/pages/list.html:247 msgid "Add subpage" msgstr "" -#: templates/wagtailadmin/pages/list.html:253 +#: templates/wagtailadmin/pages/list.html:256 msgid "No pages have been created." msgstr "" -#: templates/wagtailadmin/pages/list.html:253 +#: templates/wagtailadmin/pages/list.html:256 #, python-format msgid "Why not <a href=\"%(add_page_url)s\">add one</a>?" msgstr "" -#: templates/wagtailadmin/pages/list.html:260 +#: templates/wagtailadmin/pages/list.html:263 #, python-format msgid "" "\n" @@ -742,7 +788,7 @@ msgid "" " " msgstr "" -#: templates/wagtailadmin/pages/list.html:266 +#: templates/wagtailadmin/pages/list.html:269 #: templates/wagtailadmin/pages/search_results.html:35 #: templates/wagtailadmin/pages/search_results.html:37 #: templates/wagtailadmin/pages/usage_results.html:13 @@ -752,7 +798,7 @@ msgstr "" msgid "Previous" msgstr "" -#: templates/wagtailadmin/pages/list.html:271 +#: templates/wagtailadmin/pages/list.html:274 #: templates/wagtailadmin/pages/search_results.html:44 #: templates/wagtailadmin/pages/search_results.html:46 #: templates/wagtailadmin/pages/usage_results.html:18 @@ -836,9 +882,8 @@ msgid "February" msgstr "" #: templates/wagtailadmin/shared/datetimepicker_translations.html:8 -#, fuzzy msgid "March" -msgstr "Bilatu" +msgstr "" #: templates/wagtailadmin/shared/datetimepicker_translations.html:9 msgid "April" @@ -901,9 +946,15 @@ msgid "Fri" msgstr "" #: templates/wagtailadmin/shared/datetimepicker_translations.html:26 -#, fuzzy msgid "Sat" -msgstr "Egoera" +msgstr "" + +#: templates/wagtailadmin/shared/header.html:23 +#, python-format +msgid "Used %(useage_count)s time" +msgid_plural "Used %(useage_count)s times" +msgstr[0] "" +msgstr[1] "" #: templates/wagtailadmin/shared/main_nav.html:10 msgid "Account settings" @@ -942,68 +993,66 @@ msgstr "" msgid "Your preferences have been updated successfully!" msgstr "" -#: views/pages.py:146 views/pages.py:263 -msgid "This slug is already in use" -msgstr "" - -#: views/pages.py:160 views/pages.py:277 +#: views/pages.py:169 views/pages.py:286 msgid "Go live date/time must be before expiry date/time" msgstr "" -#: views/pages.py:170 views/pages.py:287 +#: views/pages.py:179 views/pages.py:296 msgid "Expiry date/time must be in the future" msgstr "" -#: views/pages.py:210 views/pages.py:334 views/pages.py:707 +#: views/pages.py:219 views/pages.py:351 views/pages.py:791 msgid "Page '{0}' published." msgstr "" -#: views/pages.py:212 views/pages.py:336 +#: views/pages.py:221 views/pages.py:353 msgid "Page '{0}' submitted for moderation." msgstr "" -#: views/pages.py:215 +#: views/pages.py:224 msgid "Page '{0}' created." msgstr "" -#: views/pages.py:224 +#: views/pages.py:233 msgid "The page could not be created due to validation errors" msgstr "" -#: views/pages.py:339 +#: views/pages.py:356 msgid "Page '{0}' updated." msgstr "" -#: views/pages.py:348 +#: views/pages.py:365 msgid "The page could not be saved due to validation errors" msgstr "" -#: views/pages.py:361 +#: views/pages.py:378 msgid "This page is currently awaiting moderation" msgstr "" -#: views/pages.py:381 +#: views/pages.py:409 msgid "Page '{0}' deleted." msgstr "" -#: views/pages.py:543 +#: views/pages.py:575 msgid "Page '{0}' unpublished." msgstr "" -#: views/pages.py:594 +#: views/pages.py:627 msgid "Page '{0}' moved." msgstr "" -#: views/pages.py:701 views/pages.py:720 views/pages.py:740 +#: views/pages.py:709 +msgid "Page '{0}' and {1} subpages copied." +msgstr "" + +#: views/pages.py:711 +msgid "Page '{0}' copied." +msgstr "" + +#: views/pages.py:785 views/pages.py:804 views/pages.py:824 msgid "The page '{0}' is not currently awaiting moderation." msgstr "" -#: views/pages.py:726 +#: views/pages.py:810 msgid "Page '{0}' rejected for publication." msgstr "" - -#~ msgid "Please type a valid time" -#~ msgstr "Idatzi data egoki bat mesedez" - -#~ msgid "View draft" -#~ msgstr "Borradorea ikusi" diff --git a/wagtail/wagtailadmin/locale/fr/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/fr/LC_MESSAGES/django.po index b5aef8488..8e10df1d2 100644 --- a/wagtail/wagtailadmin/locale/fr/LC_MESSAGES/django.po +++ b/wagtail/wagtailadmin/locale/fr/LC_MESSAGES/django.po @@ -1,22 +1,21 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # nahuel, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:41+0000\n" -"PO-Revision-Date: 2014-03-18 23:17+0000\n" -"Last-Translator: nahuel\n" -"Language-Team: French (http://www.transifex.com/projects/p/wagtail/language/" -"fr/)\n" -"Language: fr\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: French (http://www.transifex.com/projects/p/wagtail/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: edit_handlers.py:627 @@ -27,58 +26,100 @@ msgstr "" msgid "Common page configuration" msgstr "" -#: forms.py:18 +#: forms.py:19 msgid "Search term" msgstr "Terme de recherche" -#: forms.py:42 +#: forms.py:43 msgid "Enter your username" msgstr "Entrez votre identifiant" -#: forms.py:45 +#: forms.py:46 msgid "Enter password" msgstr "" -#: forms.py:50 +#: forms.py:51 msgid "Enter your email address to reset your password" msgstr "Entrez votre adresse e-mail pour réinitialiser votre mot de passe" -#: forms.py:59 +#: forms.py:60 msgid "Please fill your email address." msgstr "Entrez votre adresse e-mail." -#: forms.py:72 +#: forms.py:73 msgid "" "Sorry, you cannot reset your password here as your user account is managed " "by another server." -msgstr "" -"Désolé, vous ne pouvez pas réinitialiser votre mot de passe ici alors que " -"votre compte utilisateur est géré par un autre serveur." +msgstr "Désolé, vous ne pouvez pas réinitialiser votre mot de passe ici alors que votre compte utilisateur est géré par un autre serveur." -#: forms.py:75 +#: forms.py:76 msgid "This email address is not recognised." msgstr "Cette adresse e-mail n'est pas reconnue." -#: forms.py:82 templates/wagtailadmin/pages/_privacy_indicator.html:13 -#: templates/wagtailadmin/pages/_privacy_indicator.html:18 -#, fuzzy -msgid "Public" -msgstr "Publier" +#: forms.py:88 +msgid "New title" +msgstr "" -#: forms.py:83 +#: forms.py:89 +msgid "New slug" +msgstr "" + +#: forms.py:95 +msgid "Copy subpages" +msgstr "" + +#: forms.py:97 +#, python-format +msgid "This will copy %(count)s subpage." +msgid_plural "This will copy %(count)s subpages." +msgstr[0] "" +msgstr[1] "" + +#: forms.py:106 +msgid "Publish copied page" +msgstr "" + +#: forms.py:107 +msgid "This page is live. Would you like to publish its copy as well?" +msgstr "" + +#: forms.py:109 +msgid "Publish copies" +msgstr "" + +#: forms.py:111 +#, python-format +msgid "" +"%(count)s of the pages being copied is live. Would you like to publish its " +"copy?" +msgid_plural "" +"%(count)s of the pages being copied are live. Would you like to publish " +"their copies?" +msgstr[0] "" +msgstr[1] "" + +#: forms.py:124 views/pages.py:155 views/pages.py:272 +msgid "This slug is already in use" +msgstr "" + +#: forms.py:130 templates/wagtailadmin/pages/_privacy_indicator.html:13 +#: templates/wagtailadmin/pages/_privacy_indicator.html:18 +msgid "Public" +msgstr "" + +#: forms.py:131 msgid "Private, accessible with the following password" msgstr "" -#: forms.py:91 -#, fuzzy +#: forms.py:139 msgid "This field is required." -msgstr "Cette adresse e-mail n'est pas reconnue." +msgstr "" #: templates/wagtailadmin/base.html:7 templates/wagtailadmin/home.html:4 msgid "Dashboard" msgstr "Tableau de bord" -#: templates/wagtailadmin/base.html:31 +#: templates/wagtailadmin/base.html:27 msgid "Menu" msgstr "Menu" @@ -91,9 +132,7 @@ msgstr "" msgid "" "This is your dashboard on which helpful information about content you've " "created will be displayed." -msgstr "" -"Ceci est votre tableau de bord sur lequel des informations importantes sur " -"le contenu que vous avez créé seront affichées." +msgstr "Ceci est votre tableau de bord sur lequel des informations importantes sur le contenu que vous avez créé seront affichées." #: templates/wagtailadmin/login.html:4 templates/wagtailadmin/login.html:59 msgid "Sign in" @@ -101,8 +140,7 @@ msgstr "S'identifier" #: templates/wagtailadmin/login.html:18 msgid "Your username and password didn't match. Please try again." -msgstr "" -"Vos identifiant et mot de passe ne correspondent pas. Essayez de nouveau." +msgstr "Vos identifiant et mot de passe ne correspondent pas. Essayez de nouveau." #: templates/wagtailadmin/login.html:26 msgid "Sign in to Wagtail" @@ -126,10 +164,7 @@ msgid "" "Your avatar image is provided by Gravatar and is connected to your email " "address. With a Gravatar account you can set an avatar for any number of " "other email addresses you use." -msgstr "" -"Votre avatar est fourni par Gravatar et est relié à votre adresse e-mail. " -"Avec un compte Gravatar vous pouvez définir un avatar pour toutes les " -"adresses e-mail que vous utilisez." +msgstr "Votre avatar est fourni par Gravatar et est relié à votre adresse e-mail. Avec un compte Gravatar vous pouvez définir un avatar pour toutes les adresses e-mail que vous utilisez." #: templates/wagtailadmin/account/account.html:25 #: templates/wagtailadmin/account/change_password.html:4 @@ -156,8 +191,7 @@ msgstr "" #: templates/wagtailadmin/account/change_password.html:21 msgid "" "Your password can't be changed here. Please contact a site administrator." -msgstr "" -"Votre mot de passe ne peut être changé ici. Contactez un administrateur." +msgstr "Votre mot de passe ne peut être changé ici. Contactez un administrateur." #: templates/wagtailadmin/account/notification_preferences.html:4 #: templates/wagtailadmin/account/notification_preferences.html:6 @@ -231,12 +265,12 @@ msgstr "" #: templates/wagtailadmin/chooser/_search_form.html:7 #: templates/wagtailadmin/pages/search.html:3 #: templates/wagtailadmin/pages/search.html:16 -#: templatetags/wagtailadmin_tags.py:35 +#: templatetags/wagtailadmin_tags.py:36 msgid "Search" msgstr "" #: templates/wagtailadmin/chooser/_search_results.html:3 -#: templatetags/wagtailadmin_tags.py:34 +#: templatetags/wagtailadmin_tags.py:35 msgid "Explorer" msgstr "" @@ -296,7 +330,7 @@ msgstr "Descendre" #: templates/wagtailadmin/pages/confirm_delete.html:7 #: templates/wagtailadmin/pages/edit.html:45 #: templates/wagtailadmin/pages/list.html:84 -#: templates/wagtailadmin/pages/list.html:202 +#: templates/wagtailadmin/pages/list.html:205 msgid "Delete" msgstr "Supprimer" @@ -408,14 +442,8 @@ msgid_plural "" "\n" " <span>%(total_pages)s</span> Pages\n" " " -msgstr[0] "" -"\n" -" <span>%(total_pages)s</span> page\n" -" " -msgstr[1] "" -"\n" -" <span>%(total_pages)s</span> pages\n" -" " +msgstr[0] "\n <span>%(total_pages)s</span> page\n " +msgstr[1] "\n <span>%(total_pages)s</span> pages\n " #: templates/wagtailadmin/home/site_summary.html:16 #, python-format @@ -427,14 +455,8 @@ msgid_plural "" "\n" " <span>%(total_images)s</span> Images\n" " " -msgstr[0] "" -"\n" -" <span>%(total_images)s</span> image\n" -" " -msgstr[1] "" -"\n" -" <span>%(total_images)s</span> images\n" -" " +msgstr[0] "\n <span>%(total_images)s</span> image\n " +msgstr[1] "\n <span>%(total_images)s</span> images\n " #: templates/wagtailadmin/home/site_summary.html:25 #, python-format @@ -446,14 +468,8 @@ msgid_plural "" "\n" " <span>%(total_docs)s</span> Documents\n" " " -msgstr[0] "" -"\n" -" <span>%(total_docs)s</span> document\n" -" " -msgstr[1] "" -"\n" -" <span>%(total_docs)s</span> documents\n" -" " +msgstr[0] "\n <span>%(total_docs)s</span> document\n " +msgstr[1] "\n <span>%(total_docs)s</span> documents\n " #: templates/wagtailadmin/notifications/approved.html:1 #, python-format @@ -512,9 +528,8 @@ msgid "This page has been made private by a parent page." msgstr "" #: templates/wagtailadmin/page_privacy/ancestor_privacy.html:7 -#, fuzzy msgid "You can edit the privacy settings on:" -msgstr "Vous pouvez éditer la page ici:" +msgstr "" #: templates/wagtailadmin/page_privacy/set_privacy.html:6 msgid "<b>Note:</b> privacy changes apply to all children of this page too." @@ -524,14 +539,9 @@ msgstr "" #, python-format msgid "" "\n" -" Previewing '%(title)s', submitted by %(submitted_by)s on " -"%(submitted_on)s.\n" -" " -msgstr "" -"\n" -" Prévisualisation de '%(title)s', soumis par %(submitted_by)s le " -"%(submitted_on)s.\n" +" Previewing '%(title)s', submitted by %(submitted_by)s on %(submitted_on)s.\n" " " +msgstr "\n Prévisualisation de '%(title)s', soumis par %(submitted_by)s le %(submitted_on)s.\n " #: templates/wagtailadmin/pages/_privacy_indicator.html:9 msgid "Privacy" @@ -577,26 +587,16 @@ msgid "" " " msgid_plural "" "\n" -" This will also delete %(descendant_count)s more " -"subpages.\n" -" " -msgstr[0] "" -"\n" -" Ceci supprime aussi une sous-pages supplémentaire.\n" -" " -msgstr[1] "" -"\n" -" Ceci supprimer aussi %(descendant_count)s sous-pages " -"supplémentaires.\n" +" This will also delete %(descendant_count)s more subpages.\n" " " +msgstr[0] "\n Ceci supprime aussi une sous-pages supplémentaire.\n " +msgstr[1] "\n Ceci supprimer aussi %(descendant_count)s sous-pages supplémentaires.\n " #: templates/wagtailadmin/pages/confirm_delete.html:22 msgid "" "Alternatively you can unpublish the page. This removes the page from public " "view and you can edit or publish it again later." -msgstr "" -"Vous pouvez également dé-publier la page. Cela enlèvera la page des vues " -"publiques et vous pourrez l'éditer ou la publier de nouveau plus tard." +msgstr "Vous pouvez également dé-publier la page. Cela enlèvera la page des vues publiques et vous pourrez l'éditer ou la publier de nouveau plus tard." #: templates/wagtailadmin/pages/confirm_delete.html:26 msgid "Delete it" @@ -627,9 +627,7 @@ msgstr "Êtes-vous sûr de vouloir déplacer cette page dans '%(title)s'?" msgid "" "Are you sure you want to move this page and all of its children into " "'%(title)s'?" -msgstr "" -"Êtes-vous sûr de vouloir déplacer cette page et l'ensemble de ses enfants " -"dans '%(title)s'?" +msgstr "Êtes-vous sûr de vouloir déplacer cette page et l'ensemble de ses enfants dans '%(title)s'?" #: templates/wagtailadmin/pages/confirm_move.html:18 msgid "Yes, move this page" @@ -643,7 +641,7 @@ msgstr "Dé-publier %(title)s" #: templates/wagtailadmin/pages/confirm_unpublish.html:6 #: templates/wagtailadmin/pages/edit.html:42 #: templates/wagtailadmin/pages/list.html:87 -#: templates/wagtailadmin/pages/list.html:205 +#: templates/wagtailadmin/pages/list.html:208 msgid "Unpublish" msgstr "Dé-publier" @@ -659,6 +657,20 @@ msgstr "Oui, la dé-publier" msgid "Pages using" msgstr "" +#: templates/wagtailadmin/pages/copy.html:3 +#, python-format +msgid "Copy %(title)s" +msgstr "" + +#: templates/wagtailadmin/pages/copy.html:6 +#: templates/wagtailadmin/pages/list.html:202 +msgid "Copy" +msgstr "" + +#: templates/wagtailadmin/pages/copy.html:26 +msgid "Copy this page" +msgstr "" + #: templates/wagtailadmin/pages/create.html:5 #, python-format msgid "New %(page_type)s" @@ -712,7 +724,7 @@ msgid "Exploring %(title)s" msgstr "" #: templates/wagtailadmin/pages/list.html:90 -#: templates/wagtailadmin/pages/list.html:208 +#: templates/wagtailadmin/pages/list.html:211 msgid "Add child page" msgstr "Ajouter une page enfant" @@ -733,53 +745,50 @@ msgstr "Activer le tri des pages enfant" msgid "Drag" msgstr "Glisser" -#: templates/wagtailadmin/pages/list.html:234 -#: templates/wagtailadmin/pages/list.html:238 +#: templates/wagtailadmin/pages/list.html:237 +#: templates/wagtailadmin/pages/list.html:241 #, python-format msgid "Explorer subpages of '%(title)s'" msgstr "" -#: templates/wagtailadmin/pages/list.html:234 -#: templates/wagtailadmin/pages/list.html:238 -#: templates/wagtailadmin/pages/list.html:242 +#: templates/wagtailadmin/pages/list.html:237 +#: templates/wagtailadmin/pages/list.html:241 +#: templates/wagtailadmin/pages/list.html:245 msgid "Explore" msgstr "" -#: templates/wagtailadmin/pages/list.html:242 +#: templates/wagtailadmin/pages/list.html:245 #, python-format -msgid "Explorer child pages of '%(title)s'" +msgid "Explore child pages of '%(title)s'" msgstr "" -#: templates/wagtailadmin/pages/list.html:244 +#: templates/wagtailadmin/pages/list.html:247 #, python-format msgid "Add a child page to '%(title)s'" msgstr "Ajouter une page enfant à '%(title)s'" -#: templates/wagtailadmin/pages/list.html:244 +#: templates/wagtailadmin/pages/list.html:247 msgid "Add subpage" msgstr "Ajouter une sous-page" -#: templates/wagtailadmin/pages/list.html:253 +#: templates/wagtailadmin/pages/list.html:256 msgid "No pages have been created." msgstr "Aucune page n'a été créé." -#: templates/wagtailadmin/pages/list.html:253 +#: templates/wagtailadmin/pages/list.html:256 #, python-format msgid "Why not <a href=\"%(add_page_url)s\">add one</a>?" msgstr "Pourquoi ne pas en <a href=\"%(add_page_url)s\">ajouter une</a>?" -#: templates/wagtailadmin/pages/list.html:260 -#, fuzzy, python-format +#: templates/wagtailadmin/pages/list.html:263 +#, python-format msgid "" "\n" " Page %(page_number)s of %(num_pages)s.\n" " " msgstr "" -"\n" -" Page %(page_number)s sur %(num_pages)s.\n" -" " -#: templates/wagtailadmin/pages/list.html:266 +#: templates/wagtailadmin/pages/list.html:269 #: templates/wagtailadmin/pages/search_results.html:35 #: templates/wagtailadmin/pages/search_results.html:37 #: templates/wagtailadmin/pages/usage_results.html:13 @@ -789,7 +798,7 @@ msgstr "" msgid "Previous" msgstr "Précédent" -#: templates/wagtailadmin/pages/list.html:271 +#: templates/wagtailadmin/pages/list.html:274 #: templates/wagtailadmin/pages/search_results.html:44 #: templates/wagtailadmin/pages/search_results.html:46 #: templates/wagtailadmin/pages/usage_results.html:18 @@ -810,7 +819,7 @@ msgid "Select a new parent page for <span>%(title)s</span>" msgstr "Sélectionnez une nouvelle page parent pour <span>%(title)s</span>" #: templates/wagtailadmin/pages/search_results.html:6 -#, fuzzy, python-format +#, python-format msgid "" "\n" " There is one matching page\n" @@ -820,13 +829,7 @@ msgid_plural "" " There are %(counter)s matching pages\n" " " msgstr[0] "" -"\n" -" Il y a une correspondance\n" -" " msgstr[1] "" -"\n" -" Il y a %(counter)s correspondances\n" -" " #: templates/wagtailadmin/pages/search_results.html:16 msgid "Other searches" @@ -851,10 +854,7 @@ msgid "" "\n" " Page %(page_number)s of %(num_pages)s.\n" " " -msgstr "" -"\n" -" Page %(page_number)s sur %(num_pages)s.\n" -" " +msgstr "\n Page %(page_number)s sur %(num_pages)s.\n " #: templates/wagtailadmin/pages/search_results.html:54 #, python-format @@ -946,9 +946,15 @@ msgid "Fri" msgstr "" #: templates/wagtailadmin/shared/datetimepicker_translations.html:26 -#, fuzzy msgid "Sat" -msgstr "Statut" +msgstr "" + +#: templates/wagtailadmin/shared/header.html:23 +#, python-format +msgid "Used %(useage_count)s time" +msgid_plural "Used %(useage_count)s times" +msgstr[0] "" +msgstr[1] "" #: templates/wagtailadmin/shared/main_nav.html:10 msgid "Account settings" @@ -964,9 +970,8 @@ msgid "Page %(page_num)s of %(total_pages)s." msgstr "Page %(page_num)s de %(total_pages)s." #: templates/wagtailadmin/userbar/base.html:4 -#, fuzzy msgid "User bar" -msgstr "Utilisateurs" +msgstr "" #: templates/wagtailadmin/userbar/base.html:14 msgid "Go to Wagtail admin interface" @@ -985,113 +990,69 @@ msgid "Your password has been changed successfully!" msgstr "Votre mot de passe a été changé avec succès!" #: views/account.py:60 -#, fuzzy msgid "Your preferences have been updated successfully!" -msgstr "Votre mot de passe a été changé avec succès!" - -#: views/pages.py:146 views/pages.py:263 -msgid "This slug is already in use" msgstr "" -#: views/pages.py:160 views/pages.py:277 +#: views/pages.py:169 views/pages.py:286 msgid "Go live date/time must be before expiry date/time" msgstr "" -#: views/pages.py:170 views/pages.py:287 +#: views/pages.py:179 views/pages.py:296 msgid "Expiry date/time must be in the future" msgstr "" -#: views/pages.py:210 views/pages.py:334 views/pages.py:707 +#: views/pages.py:219 views/pages.py:351 views/pages.py:791 msgid "Page '{0}' published." msgstr "Page '{0}' publiée." -#: views/pages.py:212 views/pages.py:336 +#: views/pages.py:221 views/pages.py:353 msgid "Page '{0}' submitted for moderation." msgstr "Page '{0}' soumise pour modération." -#: views/pages.py:215 +#: views/pages.py:224 msgid "Page '{0}' created." msgstr "Page '{0}' créée." -#: views/pages.py:224 -#, fuzzy +#: views/pages.py:233 msgid "The page could not be created due to validation errors" -msgstr "La page n'a pu être enregistré à cause d'erreurs de validation." +msgstr "" -#: views/pages.py:339 +#: views/pages.py:356 msgid "Page '{0}' updated." msgstr "Page '{0}' mise à jour." -#: views/pages.py:348 +#: views/pages.py:365 msgid "The page could not be saved due to validation errors" msgstr "La page n'a pu être enregistré à cause d'erreurs de validation." -#: views/pages.py:361 +#: views/pages.py:378 msgid "This page is currently awaiting moderation" msgstr "Cette page est actuellement en attente de modération" -#: views/pages.py:381 +#: views/pages.py:409 msgid "Page '{0}' deleted." msgstr "Page '{0}' supprimée." -#: views/pages.py:543 +#: views/pages.py:575 msgid "Page '{0}' unpublished." msgstr "Page '{0}' dé-publiée." -#: views/pages.py:594 +#: views/pages.py:627 msgid "Page '{0}' moved." msgstr "Page '{0}' déplacée." -#: views/pages.py:701 views/pages.py:720 views/pages.py:740 +#: views/pages.py:709 +msgid "Page '{0}' and {1} subpages copied." +msgstr "" + +#: views/pages.py:711 +msgid "Page '{0}' copied." +msgstr "" + +#: views/pages.py:785 views/pages.py:804 views/pages.py:824 msgid "The page '{0}' is not currently awaiting moderation." msgstr "La page '{0}' est actuellement en attente de modération." -#: views/pages.py:726 +#: views/pages.py:810 msgid "Page '{0}' rejected for publication." msgstr "Page '{0}' refusée à la publication." - -#~ msgid "View draft" -#~ msgstr "Voir le brouillon" - -#~ msgid "View live" -#~ msgstr "Voir en ligne" - -#~ msgid "Status:" -#~ msgstr "Statut:" - -#~ msgid "Where do you want to create a %(page_type)s" -#~ msgstr "Où souhaitez vous créer une page du type %(page_type)s" - -#~ msgid "Where do you want to create this" -#~ msgstr "Où souhaitez vous créer ceci" - -#~ msgid "Create a new page" -#~ msgstr "Créer une nouvelle page" - -#~ msgid "" -#~ "Your new page will be saved in the <em>top level</em> of your website. " -#~ "You can move it after saving." -#~ msgstr "" -#~ "Votre nouvelle page sera enregistrée à la <em>racine</em> de votre site " -#~ "web. Vous pourrez la déplacer avec l'avoir enregistré." - -#~ msgid "More" -#~ msgstr "Plus" - -#~ msgid "Redirects" -#~ msgstr "Redirections" - -#~ msgid "" -#~ "Sorry, you do not have access to create a page of type <em>'{0}'</em>." -#~ msgstr "" -#~ "Désolé, vous n'êtes pas autorisé à créer une page du type <em>'{0}'</em>." - -#~ msgid "" -#~ "Pages of this type can only be created as children of <em>'{0}'</em>. " -#~ "This new page will be saved there." -#~ msgstr "" -#~ "Les pages de ce type ne peuvent être créées qu'en tant qu'enfant de " -#~ "<em>'{0}'</em>. Cette nouvelle page y sera sauvegardée." - -#~ msgid "The page could not be created due to errors." -#~ msgstr "La page ne peut être créé du fait d'erreurs." diff --git a/wagtail/wagtailadmin/locale/gl/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/gl/LC_MESSAGES/django.po index 881402e2b..b58956423 100644 --- a/wagtail/wagtailadmin/locale/gl/LC_MESSAGES/django.po +++ b/wagtail/wagtailadmin/locale/gl/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # fooflare <amos.oviedo@gmail.com>, 2014 # fooflare <amos.oviedo@gmail.com>, 2014 @@ -9,15 +9,14 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:41+0000\n" -"PO-Revision-Date: 2014-03-23 10:32+0000\n" -"Last-Translator: fooflare <amos.oviedo@gmail.com>\n" -"Language-Team: Galician (http://www.transifex.com/projects/p/wagtail/" -"language/gl/)\n" -"Language: gl\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Galician (http://www.transifex.com/projects/p/wagtail/language/gl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: gl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: edit_handlers.py:627 @@ -28,58 +27,100 @@ msgstr "" msgid "Common page configuration" msgstr "Configuración común de páxina" -#: forms.py:18 +#: forms.py:19 msgid "Search term" msgstr "Termo de busca" -#: forms.py:42 +#: forms.py:43 msgid "Enter your username" msgstr "Introduce o teu nome de usuario" -#: forms.py:45 +#: forms.py:46 msgid "Enter password" msgstr "Introduce contrasinal" -#: forms.py:50 +#: forms.py:51 msgid "Enter your email address to reset your password" msgstr "Escribe a túa dirección de correo para restaurar o teu contrasinal" -#: forms.py:59 +#: forms.py:60 msgid "Please fill your email address." msgstr "Por favor, enche a túa dirección de correo." -#: forms.py:72 +#: forms.py:73 msgid "" "Sorry, you cannot reset your password here as your user account is managed " "by another server." -msgstr "" -"Sentímolo, non podes restablecer o teu contrasinal aquí porque a túa conta é " -"xestionada por outro servidor." +msgstr "Sentímolo, non podes restablecer o teu contrasinal aquí porque a túa conta é xestionada por outro servidor." -#: forms.py:75 +#: forms.py:76 msgid "This email address is not recognised." msgstr "Non se recoñece a dirección de correo." -#: forms.py:82 templates/wagtailadmin/pages/_privacy_indicator.html:13 -#: templates/wagtailadmin/pages/_privacy_indicator.html:18 -#, fuzzy -msgid "Public" -msgstr "Publicar" +#: forms.py:88 +msgid "New title" +msgstr "" -#: forms.py:83 +#: forms.py:89 +msgid "New slug" +msgstr "" + +#: forms.py:95 +msgid "Copy subpages" +msgstr "" + +#: forms.py:97 +#, python-format +msgid "This will copy %(count)s subpage." +msgid_plural "This will copy %(count)s subpages." +msgstr[0] "" +msgstr[1] "" + +#: forms.py:106 +msgid "Publish copied page" +msgstr "" + +#: forms.py:107 +msgid "This page is live. Would you like to publish its copy as well?" +msgstr "" + +#: forms.py:109 +msgid "Publish copies" +msgstr "" + +#: forms.py:111 +#, python-format +msgid "" +"%(count)s of the pages being copied is live. Would you like to publish its " +"copy?" +msgid_plural "" +"%(count)s of the pages being copied are live. Would you like to publish " +"their copies?" +msgstr[0] "" +msgstr[1] "" + +#: forms.py:124 views/pages.py:155 views/pages.py:272 +msgid "This slug is already in use" +msgstr "Este slug ya está en uso" + +#: forms.py:130 templates/wagtailadmin/pages/_privacy_indicator.html:13 +#: templates/wagtailadmin/pages/_privacy_indicator.html:18 +msgid "Public" +msgstr "" + +#: forms.py:131 msgid "Private, accessible with the following password" msgstr "" -#: forms.py:91 -#, fuzzy +#: forms.py:139 msgid "This field is required." -msgstr "Non se recoñece a dirección de correo." +msgstr "" #: templates/wagtailadmin/base.html:7 templates/wagtailadmin/home.html:4 msgid "Dashboard" msgstr "Panel de control" -#: templates/wagtailadmin/base.html:31 +#: templates/wagtailadmin/base.html:27 msgid "Menu" msgstr "Menú" @@ -92,9 +133,7 @@ msgstr "Benvido ao CMS Wagtail %(site_name)s" msgid "" "This is your dashboard on which helpful information about content you've " "created will be displayed." -msgstr "" -"Este é o teu panel de control onde aparecerá información útil sobre o " -"contido que creaches." +msgstr "Este é o teu panel de control onde aparecerá información útil sobre o contido que creaches." #: templates/wagtailadmin/login.html:4 templates/wagtailadmin/login.html:59 msgid "Sign in" @@ -126,10 +165,7 @@ msgid "" "Your avatar image is provided by Gravatar and is connected to your email " "address. With a Gravatar account you can set an avatar for any number of " "other email addresses you use." -msgstr "" -"O teu avatar é provisto por Gravatar e está conectado á túa dirección de " -"correo. Cunha conta Gravatar podes establecer un avatar para calquera número " -"de correos electrónicos." +msgstr "O teu avatar é provisto por Gravatar e está conectado á túa dirección de correo. Cunha conta Gravatar podes establecer un avatar para calquera número de correos electrónicos." #: templates/wagtailadmin/account/account.html:25 #: templates/wagtailadmin/account/change_password.html:4 @@ -156,9 +192,7 @@ msgstr "Cambiar Contrasinal" #: templates/wagtailadmin/account/change_password.html:21 msgid "" "Your password can't be changed here. Please contact a site administrator." -msgstr "" -"O teu contrasinal non pode cambiarse aquí. Por favor, contacta co " -"administrador." +msgstr "O teu contrasinal non pode cambiarse aquí. Por favor, contacta co administrador." #: templates/wagtailadmin/account/notification_preferences.html:4 #: templates/wagtailadmin/account/notification_preferences.html:6 @@ -200,14 +234,11 @@ msgstr "Revisa o teu correo electrónico" #: templates/wagtailadmin/account/password_reset/done.html:16 msgid "A link to reset your password has been emailed to you." -msgstr "" -"Unha ligazón para restablecer o teu contrasinal foiche enviado por correo " -"electrónico." +msgstr "Unha ligazón para restablecer o teu contrasinal foiche enviado por correo electrónico." #: templates/wagtailadmin/account/password_reset/email.txt:2 msgid "Please follow the link below to reset your password" -msgstr "" -"Por favor, segue a ligazón de abaixo para restablecer e teu contrasinal" +msgstr "Por favor, segue a ligazón de abaixo para restablecer e teu contrasinal" #: templates/wagtailadmin/account/password_reset/email_subject.txt:2 msgid "Password reset" @@ -235,12 +266,12 @@ msgstr "Ligazón de correo electrónico" #: templates/wagtailadmin/chooser/_search_form.html:7 #: templates/wagtailadmin/pages/search.html:3 #: templates/wagtailadmin/pages/search.html:16 -#: templatetags/wagtailadmin_tags.py:35 +#: templatetags/wagtailadmin_tags.py:36 msgid "Search" msgstr "Busca" #: templates/wagtailadmin/chooser/_search_results.html:3 -#: templatetags/wagtailadmin_tags.py:34 +#: templatetags/wagtailadmin_tags.py:35 msgid "Explorer" msgstr "Explorador" @@ -254,14 +285,8 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "" -"\n" -" Hai unha coincidencia\n" -" " -msgstr[1] "" -"\n" -" Hai %(counter)s coincidencias\n" -" " +msgstr[0] "\n Hai unha coincidencia\n " +msgstr[1] "\n Hai %(counter)s coincidencias\n " #: templates/wagtailadmin/chooser/browse.html:2 #: templates/wagtailadmin/chooser/search.html:2 @@ -306,7 +331,7 @@ msgstr "Baixar" #: templates/wagtailadmin/pages/confirm_delete.html:7 #: templates/wagtailadmin/pages/edit.html:45 #: templates/wagtailadmin/pages/list.html:84 -#: templates/wagtailadmin/pages/list.html:202 +#: templates/wagtailadmin/pages/list.html:205 msgid "Delete" msgstr "Eliminar" @@ -418,14 +443,8 @@ msgid_plural "" "\n" " <span>%(total_pages)s</span> Pages\n" " " -msgstr[0] "" -"\n" -" <span>%(total_pages)s</span> Páxina\n" -" " -msgstr[1] "" -"\n" -" <span>%(total_pages)s</span> Páginas\n" -" " +msgstr[0] "\n <span>%(total_pages)s</span> Páxina\n " +msgstr[1] "\n <span>%(total_pages)s</span> Páginas\n " #: templates/wagtailadmin/home/site_summary.html:16 #, python-format @@ -437,14 +456,8 @@ msgid_plural "" "\n" " <span>%(total_images)s</span> Images\n" " " -msgstr[0] "" -"\n" -" <span>%(total_images)s</span> Imaxe\n" -" " -msgstr[1] "" -"\n" -" <span>%(total_images)s</span> Imágenes\n" -" " +msgstr[0] "\n <span>%(total_images)s</span> Imaxe\n " +msgstr[1] "\n <span>%(total_images)s</span> Imágenes\n " #: templates/wagtailadmin/home/site_summary.html:25 #, python-format @@ -456,14 +469,8 @@ msgid_plural "" "\n" " <span>%(total_docs)s</span> Documents\n" " " -msgstr[0] "" -"\n" -" <span>%(total_docs)s</span> Documento\n" -" " -msgstr[1] "" -"\n" -" <span>%(total_docs)s</span> Documentos\n" -" " +msgstr[0] "\n <span>%(total_docs)s</span> Documento\n " +msgstr[1] "\n <span>%(total_docs)s</span> Documentos\n " #: templates/wagtailadmin/notifications/approved.html:1 #, python-format @@ -522,9 +529,8 @@ msgid "This page has been made private by a parent page." msgstr "" #: templates/wagtailadmin/page_privacy/ancestor_privacy.html:7 -#, fuzzy msgid "You can edit the privacy settings on:" -msgstr "Podes editar ala páxina aquí:" +msgstr "" #: templates/wagtailadmin/page_privacy/set_privacy.html:6 msgid "<b>Note:</b> privacy changes apply to all children of this page too." @@ -534,14 +540,9 @@ msgstr "" #, python-format msgid "" "\n" -" Previewing '%(title)s', submitted by %(submitted_by)s on " -"%(submitted_on)s.\n" -" " -msgstr "" -"\n" -" Previsualizando '%(title)s', enviada por %(submitted_by)s en " -"%(submitted_on)s.\n" +" Previewing '%(title)s', submitted by %(submitted_by)s on %(submitted_on)s.\n" " " +msgstr "\n Previsualizando '%(title)s', enviada por %(submitted_by)s en %(submitted_on)s.\n " #: templates/wagtailadmin/pages/_privacy_indicator.html:9 msgid "Privacy" @@ -587,26 +588,16 @@ msgid "" " " msgid_plural "" "\n" -" This will also delete %(descendant_count)s more " -"subpages.\n" -" " -msgstr[0] "" -"\n" -" Isto tamén eliminará outra subpáxina.\n" -" " -msgstr[1] "" -"\n" -" Isto tamén eliminará %(descendant_count)s subpáxinas " -"máis.\n" +" This will also delete %(descendant_count)s more subpages.\n" " " +msgstr[0] "\n Isto tamén eliminará outra subpáxina.\n " +msgstr[1] "\n Isto tamén eliminará %(descendant_count)s subpáxinas máis.\n " #: templates/wagtailadmin/pages/confirm_delete.html:22 msgid "" "Alternatively you can unpublish the page. This removes the page from public " "view and you can edit or publish it again later." -msgstr "" -"Outra opción é non publicar a páxina. Isto non permite que o público a vexa " -"e a podes editar ou voltar a publicala máis tarde." +msgstr "Outra opción é non publicar a páxina. Isto non permite que o público a vexa e a podes editar ou voltar a publicala máis tarde." #: templates/wagtailadmin/pages/confirm_delete.html:26 msgid "Delete it" @@ -637,9 +628,7 @@ msgstr "¿Seguro que queres mover esta páxina a '%(title)s'?" msgid "" "Are you sure you want to move this page and all of its children into " "'%(title)s'?" -msgstr "" -"¿Seguro que queres mover esta páxina e todas as súas páxinas filla a " -"'%(title)s'?" +msgstr "¿Seguro que queres mover esta páxina e todas as súas páxinas filla a '%(title)s'?" #: templates/wagtailadmin/pages/confirm_move.html:18 msgid "Yes, move this page" @@ -653,7 +642,7 @@ msgstr "Non publicar %(title)s" #: templates/wagtailadmin/pages/confirm_unpublish.html:6 #: templates/wagtailadmin/pages/edit.html:42 #: templates/wagtailadmin/pages/list.html:87 -#: templates/wagtailadmin/pages/list.html:205 +#: templates/wagtailadmin/pages/list.html:208 msgid "Unpublish" msgstr "Non publicar" @@ -669,6 +658,20 @@ msgstr "Sí, non publicar" msgid "Pages using" msgstr "Páxinas usando" +#: templates/wagtailadmin/pages/copy.html:3 +#, python-format +msgid "Copy %(title)s" +msgstr "" + +#: templates/wagtailadmin/pages/copy.html:6 +#: templates/wagtailadmin/pages/list.html:202 +msgid "Copy" +msgstr "" + +#: templates/wagtailadmin/pages/copy.html:26 +msgid "Copy this page" +msgstr "" + #: templates/wagtailadmin/pages/create.html:5 #, python-format msgid "New %(page_type)s" @@ -722,7 +725,7 @@ msgid "Exploring %(title)s" msgstr "Explorando %(title)s" #: templates/wagtailadmin/pages/list.html:90 -#: templates/wagtailadmin/pages/list.html:208 +#: templates/wagtailadmin/pages/list.html:211 msgid "Add child page" msgstr "Engadir páxina filla" @@ -743,53 +746,50 @@ msgstr "Habilitar organización de páxinas fillas" msgid "Drag" msgstr "Levar" -#: templates/wagtailadmin/pages/list.html:234 -#: templates/wagtailadmin/pages/list.html:238 +#: templates/wagtailadmin/pages/list.html:237 +#: templates/wagtailadmin/pages/list.html:241 #, python-format msgid "Explorer subpages of '%(title)s'" msgstr "Explorar subpáxinas de '%(title)s'" -#: templates/wagtailadmin/pages/list.html:234 -#: templates/wagtailadmin/pages/list.html:238 -#: templates/wagtailadmin/pages/list.html:242 +#: templates/wagtailadmin/pages/list.html:237 +#: templates/wagtailadmin/pages/list.html:241 +#: templates/wagtailadmin/pages/list.html:245 msgid "Explore" msgstr "Explorar" -#: templates/wagtailadmin/pages/list.html:242 +#: templates/wagtailadmin/pages/list.html:245 #, python-format -msgid "Explorer child pages of '%(title)s'" -msgstr "Explorar páxinas fillas de '%(title)s'" +msgid "Explore child pages of '%(title)s'" +msgstr "" -#: templates/wagtailadmin/pages/list.html:244 +#: templates/wagtailadmin/pages/list.html:247 #, python-format msgid "Add a child page to '%(title)s'" msgstr "Engadir páxina filla a '%(title)s'" -#: templates/wagtailadmin/pages/list.html:244 +#: templates/wagtailadmin/pages/list.html:247 msgid "Add subpage" msgstr "Engadir subpáxina" -#: templates/wagtailadmin/pages/list.html:253 +#: templates/wagtailadmin/pages/list.html:256 msgid "No pages have been created." msgstr "Non foi creada ningunha páxina." -#: templates/wagtailadmin/pages/list.html:253 +#: templates/wagtailadmin/pages/list.html:256 #, python-format msgid "Why not <a href=\"%(add_page_url)s\">add one</a>?" msgstr "¿Por qué non <a href=\"%(add_page_url)s\">engadir unha</a>?" -#: templates/wagtailadmin/pages/list.html:260 -#, fuzzy, python-format +#: templates/wagtailadmin/pages/list.html:263 +#, python-format msgid "" "\n" " Page %(page_number)s of %(num_pages)s.\n" " " msgstr "" -"\n" -" Páxina %(page_number)s de %(num_pages)s.\n" -" " -#: templates/wagtailadmin/pages/list.html:266 +#: templates/wagtailadmin/pages/list.html:269 #: templates/wagtailadmin/pages/search_results.html:35 #: templates/wagtailadmin/pages/search_results.html:37 #: templates/wagtailadmin/pages/usage_results.html:13 @@ -799,7 +799,7 @@ msgstr "" msgid "Previous" msgstr "Anterior" -#: templates/wagtailadmin/pages/list.html:271 +#: templates/wagtailadmin/pages/list.html:274 #: templates/wagtailadmin/pages/search_results.html:44 #: templates/wagtailadmin/pages/search_results.html:46 #: templates/wagtailadmin/pages/usage_results.html:18 @@ -820,7 +820,7 @@ msgid "Select a new parent page for <span>%(title)s</span>" msgstr "Seleccionar unha nova páxina pai para <span>%(title)s</span>" #: templates/wagtailadmin/pages/search_results.html:6 -#, fuzzy, python-format +#, python-format msgid "" "\n" " There is one matching page\n" @@ -830,13 +830,7 @@ msgid_plural "" " There are %(counter)s matching pages\n" " " msgstr[0] "" -"\n" -" Hai unha coincidencia\n" -" " msgstr[1] "" -"\n" -" Hai %(counter)s coincidencias\n" -" " #: templates/wagtailadmin/pages/search_results.html:16 msgid "Other searches" @@ -861,10 +855,7 @@ msgid "" "\n" " Page %(page_number)s of %(num_pages)s.\n" " " -msgstr "" -"\n" -" Páxina %(page_number)s de %(num_pages)s.\n" -" " +msgstr "\n Páxina %(page_number)s de %(num_pages)s.\n " #: templates/wagtailadmin/pages/search_results.html:54 #, python-format @@ -876,9 +867,8 @@ msgid "Enter a search term above" msgstr "Introduce o termo de busca arriba" #: templates/wagtailadmin/pages/usage_results.html:24 -#, fuzzy msgid "No pages use" -msgstr "Páxinas usando" +msgstr "" #: templates/wagtailadmin/shared/breadcrumb.html:6 msgid "Home" @@ -893,9 +883,8 @@ msgid "February" msgstr "" #: templates/wagtailadmin/shared/datetimepicker_translations.html:8 -#, fuzzy msgid "March" -msgstr "Busca" +msgstr "" #: templates/wagtailadmin/shared/datetimepicker_translations.html:9 msgid "April" @@ -958,9 +947,15 @@ msgid "Fri" msgstr "" #: templates/wagtailadmin/shared/datetimepicker_translations.html:26 -#, fuzzy msgid "Sat" -msgstr "Estado" +msgstr "" + +#: templates/wagtailadmin/shared/header.html:23 +#, python-format +msgid "Used %(useage_count)s time" +msgid_plural "Used %(useage_count)s times" +msgstr[0] "" +msgstr[1] "" #: templates/wagtailadmin/shared/main_nav.html:10 msgid "Account settings" @@ -976,9 +971,8 @@ msgid "Page %(page_num)s of %(total_pages)s." msgstr "Páxina %(page_num)s de %(total_pages)s." #: templates/wagtailadmin/userbar/base.html:4 -#, fuzzy msgid "User bar" -msgstr "Usuarios" +msgstr "" #: templates/wagtailadmin/userbar/base.html:14 msgid "Go to Wagtail admin interface" @@ -997,122 +991,69 @@ msgid "Your password has been changed successfully!" msgstr "¡O teu contrasinal foi cambiado correctamente!" #: views/account.py:60 -#, fuzzy msgid "Your preferences have been updated successfully!" -msgstr "¡O teu contrasinal foi cambiado correctamente!" +msgstr "" -#: views/pages.py:146 views/pages.py:263 -msgid "This slug is already in use" -msgstr "Este slug ya está en uso" - -#: views/pages.py:160 views/pages.py:277 +#: views/pages.py:169 views/pages.py:286 msgid "Go live date/time must be before expiry date/time" msgstr "" -#: views/pages.py:170 views/pages.py:287 +#: views/pages.py:179 views/pages.py:296 msgid "Expiry date/time must be in the future" msgstr "" -#: views/pages.py:210 views/pages.py:334 views/pages.py:707 +#: views/pages.py:219 views/pages.py:351 views/pages.py:791 msgid "Page '{0}' published." msgstr "Páxina '{0}' publicada." -#: views/pages.py:212 views/pages.py:336 +#: views/pages.py:221 views/pages.py:353 msgid "Page '{0}' submitted for moderation." msgstr "Páxina '{0}' enviada para ser moderada." -#: views/pages.py:215 +#: views/pages.py:224 msgid "Page '{0}' created." msgstr "Páxina '{0}' creada." -#: views/pages.py:224 -#, fuzzy +#: views/pages.py:233 msgid "The page could not be created due to validation errors" -msgstr "A páxina non puido ser gardada debido a erros de validación" +msgstr "" -#: views/pages.py:339 +#: views/pages.py:356 msgid "Page '{0}' updated." msgstr "Páxina '{0}' actualizada." -#: views/pages.py:348 +#: views/pages.py:365 msgid "The page could not be saved due to validation errors" msgstr "A páxina non puido ser gardada debido a erros de validación" -#: views/pages.py:361 +#: views/pages.py:378 msgid "This page is currently awaiting moderation" msgstr "A páxina está á espera de ser moderada" -#: views/pages.py:381 +#: views/pages.py:409 msgid "Page '{0}' deleted." msgstr "Páxina '{0}' eliminada." -#: views/pages.py:543 +#: views/pages.py:575 msgid "Page '{0}' unpublished." msgstr "Páxina '{0}' non publicada." -#: views/pages.py:594 +#: views/pages.py:627 msgid "Page '{0}' moved." msgstr "Páxina '{0}' movida." -#: views/pages.py:701 views/pages.py:720 views/pages.py:740 +#: views/pages.py:709 +msgid "Page '{0}' and {1} subpages copied." +msgstr "" + +#: views/pages.py:711 +msgid "Page '{0}' copied." +msgstr "" + +#: views/pages.py:785 views/pages.py:804 views/pages.py:824 msgid "The page '{0}' is not currently awaiting moderation." msgstr "A páxina '{0}' non está esperando a ser moderada." -#: views/pages.py:726 +#: views/pages.py:810 msgid "Page '{0}' rejected for publication." msgstr "Rexeitada a publicación da página '{0}'." - -#~ msgid "Please type a valid time" -#~ msgstr "Por favor, escribe unha hora válida" - -#~ msgid "View draft" -#~ msgstr "Ver borrador" - -#~ msgid "View live" -#~ msgstr "Ver en vivo" - -#~ msgid "Status:" -#~ msgstr "Estado:" - -#~ msgid "Where do you want to create a %(page_type)s" -#~ msgstr "¿Onde queres crear unha %(page_type)s" - -#~ msgid "Where do you want to create this" -#~ msgstr "Onde queres crear isto" - -#~ msgid "Create a new page" -#~ msgstr "Crear unha nova páxina" - -#~ msgid "" -#~ "Your new page will be saved in the <em>top level</em> of your website. " -#~ "You can move it after saving." -#~ msgstr "" -#~ "A túa nova páxina sera gardada no <em>nivel superior</em> do teu sitio " -#~ "web. Podes movela despois de gardar." - -#~ msgid "More" -#~ msgstr "Máis" - -#~ msgid "Redirects" -#~ msgstr "Redireccións" - -#~ msgid "Editors Picks" -#~ msgstr "Seleccións do Editor" - -#~ msgid "Snippets" -#~ msgstr "Fragmentos" - -#~ msgid "" -#~ "Sorry, you do not have access to create a page of type <em>'{0}'</em>." -#~ msgstr "" -#~ "Sentímolo, non tes permiso para crear unha páxina de tipo <em>'{0}'</em>." - -#~ msgid "" -#~ "Pages of this type can only be created as children of <em>'{0}'</em>. " -#~ "This new page will be saved there." -#~ msgstr "" -#~ "Páxinas deste tipo só poden ser creadas como fillas de <em>'{0}'</em>. " -#~ "Esta nova páxina será gardada ahí." - -#~ msgid "The page could not be created due to errors." -#~ msgstr "A páxina non puido ser creada debido a erros." diff --git a/wagtail/wagtailadmin/locale/mn/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/mn/LC_MESSAGES/django.po index 953be6566..e8d0f5045 100644 --- a/wagtail/wagtailadmin/locale/mn/LC_MESSAGES/django.po +++ b/wagtail/wagtailadmin/locale/mn/LC_MESSAGES/django.po @@ -1,22 +1,21 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: -# delgermurun <info@delgermurun.com>, 2014 +# Delgermurun Purevkhuuu <info@delgermurun.com>, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:41+0000\n" -"PO-Revision-Date: 2014-03-14 21:12+0000\n" -"Last-Translator: serafeim <serafeim@torchbox.com>\n" -"Language-Team: Mongolian (http://www.transifex.com/projects/p/wagtail/" -"language/mn/)\n" -"Language: mn\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Mongolian (http://www.transifex.com/projects/p/wagtail/language/mn/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: mn\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: edit_handlers.py:627 @@ -27,46 +26,92 @@ msgstr "" msgid "Common page configuration" msgstr "" -#: forms.py:18 +#: forms.py:19 msgid "Search term" msgstr "" -#: forms.py:42 +#: forms.py:43 msgid "Enter your username" msgstr "" -#: forms.py:45 +#: forms.py:46 msgid "Enter password" msgstr "" -#: forms.py:50 +#: forms.py:51 msgid "Enter your email address to reset your password" msgstr "" -#: forms.py:59 +#: forms.py:60 msgid "Please fill your email address." msgstr "Цахим шуудангийн хаягаа оруулна уу." -#: forms.py:72 +#: forms.py:73 msgid "" "Sorry, you cannot reset your password here as your user account is managed " "by another server." msgstr "" -#: forms.py:75 +#: forms.py:76 msgid "This email address is not recognised." msgstr "" -#: forms.py:82 templates/wagtailadmin/pages/_privacy_indicator.html:13 +#: forms.py:88 +msgid "New title" +msgstr "" + +#: forms.py:89 +msgid "New slug" +msgstr "" + +#: forms.py:95 +msgid "Copy subpages" +msgstr "" + +#: forms.py:97 +#, python-format +msgid "This will copy %(count)s subpage." +msgid_plural "This will copy %(count)s subpages." +msgstr[0] "" +msgstr[1] "" + +#: forms.py:106 +msgid "Publish copied page" +msgstr "" + +#: forms.py:107 +msgid "This page is live. Would you like to publish its copy as well?" +msgstr "" + +#: forms.py:109 +msgid "Publish copies" +msgstr "" + +#: forms.py:111 +#, python-format +msgid "" +"%(count)s of the pages being copied is live. Would you like to publish its " +"copy?" +msgid_plural "" +"%(count)s of the pages being copied are live. Would you like to publish " +"their copies?" +msgstr[0] "" +msgstr[1] "" + +#: forms.py:124 views/pages.py:155 views/pages.py:272 +msgid "This slug is already in use" +msgstr "" + +#: forms.py:130 templates/wagtailadmin/pages/_privacy_indicator.html:13 #: templates/wagtailadmin/pages/_privacy_indicator.html:18 msgid "Public" msgstr "" -#: forms.py:83 +#: forms.py:131 msgid "Private, accessible with the following password" msgstr "" -#: forms.py:91 +#: forms.py:139 msgid "This field is required." msgstr "" @@ -74,7 +119,7 @@ msgstr "" msgid "Dashboard" msgstr "Хянах самбар" -#: templates/wagtailadmin/base.html:31 +#: templates/wagtailadmin/base.html:27 msgid "Menu" msgstr "" @@ -220,12 +265,12 @@ msgstr "" #: templates/wagtailadmin/chooser/_search_form.html:7 #: templates/wagtailadmin/pages/search.html:3 #: templates/wagtailadmin/pages/search.html:16 -#: templatetags/wagtailadmin_tags.py:35 +#: templatetags/wagtailadmin_tags.py:36 msgid "Search" msgstr "" #: templates/wagtailadmin/chooser/_search_results.html:3 -#: templatetags/wagtailadmin_tags.py:34 +#: templatetags/wagtailadmin_tags.py:35 msgid "Explorer" msgstr "" @@ -285,7 +330,7 @@ msgstr "" #: templates/wagtailadmin/pages/confirm_delete.html:7 #: templates/wagtailadmin/pages/edit.html:45 #: templates/wagtailadmin/pages/list.html:84 -#: templates/wagtailadmin/pages/list.html:202 +#: templates/wagtailadmin/pages/list.html:205 msgid "Delete" msgstr "" @@ -494,8 +539,7 @@ msgstr "" #, python-format msgid "" "\n" -" Previewing '%(title)s', submitted by %(submitted_by)s on " -"%(submitted_on)s.\n" +" Previewing '%(title)s', submitted by %(submitted_by)s on %(submitted_on)s.\n" " " msgstr "" @@ -543,8 +587,7 @@ msgid "" " " msgid_plural "" "\n" -" This will also delete %(descendant_count)s more " -"subpages.\n" +" This will also delete %(descendant_count)s more subpages.\n" " " msgstr[0] "" msgstr[1] "" @@ -598,7 +641,7 @@ msgstr "" #: templates/wagtailadmin/pages/confirm_unpublish.html:6 #: templates/wagtailadmin/pages/edit.html:42 #: templates/wagtailadmin/pages/list.html:87 -#: templates/wagtailadmin/pages/list.html:205 +#: templates/wagtailadmin/pages/list.html:208 msgid "Unpublish" msgstr "" @@ -614,6 +657,20 @@ msgstr "" msgid "Pages using" msgstr "" +#: templates/wagtailadmin/pages/copy.html:3 +#, python-format +msgid "Copy %(title)s" +msgstr "" + +#: templates/wagtailadmin/pages/copy.html:6 +#: templates/wagtailadmin/pages/list.html:202 +msgid "Copy" +msgstr "" + +#: templates/wagtailadmin/pages/copy.html:26 +msgid "Copy this page" +msgstr "" + #: templates/wagtailadmin/pages/create.html:5 #, python-format msgid "New %(page_type)s" @@ -667,7 +724,7 @@ msgid "Exploring %(title)s" msgstr "" #: templates/wagtailadmin/pages/list.html:90 -#: templates/wagtailadmin/pages/list.html:208 +#: templates/wagtailadmin/pages/list.html:211 msgid "Add child page" msgstr "" @@ -688,42 +745,42 @@ msgstr "" msgid "Drag" msgstr "" -#: templates/wagtailadmin/pages/list.html:234 -#: templates/wagtailadmin/pages/list.html:238 +#: templates/wagtailadmin/pages/list.html:237 +#: templates/wagtailadmin/pages/list.html:241 #, python-format msgid "Explorer subpages of '%(title)s'" msgstr "" -#: templates/wagtailadmin/pages/list.html:234 -#: templates/wagtailadmin/pages/list.html:238 -#: templates/wagtailadmin/pages/list.html:242 +#: templates/wagtailadmin/pages/list.html:237 +#: templates/wagtailadmin/pages/list.html:241 +#: templates/wagtailadmin/pages/list.html:245 msgid "Explore" msgstr "" -#: templates/wagtailadmin/pages/list.html:242 +#: templates/wagtailadmin/pages/list.html:245 #, python-format -msgid "Explorer child pages of '%(title)s'" +msgid "Explore child pages of '%(title)s'" msgstr "" -#: templates/wagtailadmin/pages/list.html:244 +#: templates/wagtailadmin/pages/list.html:247 #, python-format msgid "Add a child page to '%(title)s'" msgstr "" -#: templates/wagtailadmin/pages/list.html:244 +#: templates/wagtailadmin/pages/list.html:247 msgid "Add subpage" msgstr "" -#: templates/wagtailadmin/pages/list.html:253 +#: templates/wagtailadmin/pages/list.html:256 msgid "No pages have been created." msgstr "" -#: templates/wagtailadmin/pages/list.html:253 +#: templates/wagtailadmin/pages/list.html:256 #, python-format msgid "Why not <a href=\"%(add_page_url)s\">add one</a>?" msgstr "" -#: templates/wagtailadmin/pages/list.html:260 +#: templates/wagtailadmin/pages/list.html:263 #, python-format msgid "" "\n" @@ -731,7 +788,7 @@ msgid "" " " msgstr "" -#: templates/wagtailadmin/pages/list.html:266 +#: templates/wagtailadmin/pages/list.html:269 #: templates/wagtailadmin/pages/search_results.html:35 #: templates/wagtailadmin/pages/search_results.html:37 #: templates/wagtailadmin/pages/usage_results.html:13 @@ -741,7 +798,7 @@ msgstr "" msgid "Previous" msgstr "" -#: templates/wagtailadmin/pages/list.html:271 +#: templates/wagtailadmin/pages/list.html:274 #: templates/wagtailadmin/pages/search_results.html:44 #: templates/wagtailadmin/pages/search_results.html:46 #: templates/wagtailadmin/pages/usage_results.html:18 @@ -892,6 +949,13 @@ msgstr "" msgid "Sat" msgstr "" +#: templates/wagtailadmin/shared/header.html:23 +#, python-format +msgid "Used %(useage_count)s time" +msgid_plural "Used %(useage_count)s times" +msgstr[0] "" +msgstr[1] "" + #: templates/wagtailadmin/shared/main_nav.html:10 msgid "Account settings" msgstr "" @@ -929,62 +993,66 @@ msgstr "" msgid "Your preferences have been updated successfully!" msgstr "" -#: views/pages.py:146 views/pages.py:263 -msgid "This slug is already in use" -msgstr "" - -#: views/pages.py:160 views/pages.py:277 +#: views/pages.py:169 views/pages.py:286 msgid "Go live date/time must be before expiry date/time" msgstr "" -#: views/pages.py:170 views/pages.py:287 +#: views/pages.py:179 views/pages.py:296 msgid "Expiry date/time must be in the future" msgstr "" -#: views/pages.py:210 views/pages.py:334 views/pages.py:707 +#: views/pages.py:219 views/pages.py:351 views/pages.py:791 msgid "Page '{0}' published." msgstr "" -#: views/pages.py:212 views/pages.py:336 +#: views/pages.py:221 views/pages.py:353 msgid "Page '{0}' submitted for moderation." msgstr "" -#: views/pages.py:215 +#: views/pages.py:224 msgid "Page '{0}' created." msgstr "" -#: views/pages.py:224 +#: views/pages.py:233 msgid "The page could not be created due to validation errors" msgstr "" -#: views/pages.py:339 +#: views/pages.py:356 msgid "Page '{0}' updated." msgstr "" -#: views/pages.py:348 +#: views/pages.py:365 msgid "The page could not be saved due to validation errors" msgstr "" -#: views/pages.py:361 +#: views/pages.py:378 msgid "This page is currently awaiting moderation" msgstr "" -#: views/pages.py:381 +#: views/pages.py:409 msgid "Page '{0}' deleted." msgstr "" -#: views/pages.py:543 +#: views/pages.py:575 msgid "Page '{0}' unpublished." msgstr "" -#: views/pages.py:594 +#: views/pages.py:627 msgid "Page '{0}' moved." msgstr "" -#: views/pages.py:701 views/pages.py:720 views/pages.py:740 +#: views/pages.py:709 +msgid "Page '{0}' and {1} subpages copied." +msgstr "" + +#: views/pages.py:711 +msgid "Page '{0}' copied." +msgstr "" + +#: views/pages.py:785 views/pages.py:804 views/pages.py:824 msgid "The page '{0}' is not currently awaiting moderation." msgstr "" -#: views/pages.py:726 +#: views/pages.py:810 msgid "Page '{0}' rejected for publication." msgstr "" diff --git a/wagtail/wagtailadmin/locale/pl/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/pl/LC_MESSAGES/django.po index 72ae54ca4..b2a49d04f 100644 --- a/wagtail/wagtailadmin/locale/pl/LC_MESSAGES/django.po +++ b/wagtail/wagtailadmin/locale/pl/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # utek <mail@utek.pl>, 2014 # utek <mail@utek.pl>, 2014 @@ -9,17 +9,15 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:41+0000\n" -"PO-Revision-Date: 2014-03-14 22:16+0000\n" -"Last-Translator: utek <mail@utek.pl>\n" -"Language-Team: Polish (http://www.transifex.com/projects/p/wagtail/language/" -"pl/)\n" -"Language: pl\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Polish (http://www.transifex.com/projects/p/wagtail/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2);\n" +"Language: pl\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: edit_handlers.py:627 msgid "Scheduled publishing" @@ -29,58 +27,102 @@ msgstr "" msgid "Common page configuration" msgstr "Wspólna konfiguracja stron" -#: forms.py:18 +#: forms.py:19 msgid "Search term" msgstr "Wyszukiwania fraza" -#: forms.py:42 +#: forms.py:43 msgid "Enter your username" msgstr "Wpisz nazwę użytkownika" -#: forms.py:45 +#: forms.py:46 msgid "Enter password" msgstr "Wpisz hasło" -#: forms.py:50 +#: forms.py:51 msgid "Enter your email address to reset your password" msgstr "Podaj swój adres email aby zresetować hasło" -#: forms.py:59 +#: forms.py:60 msgid "Please fill your email address." msgstr "Podaj swój adres email." -#: forms.py:72 +#: forms.py:73 msgid "" "Sorry, you cannot reset your password here as your user account is managed " "by another server." -msgstr "" -"Przepraszamy, nie możesz zresetować hasła tutaj ponieważ Twoje konto jest " -"zarządzane przez inny serwer." +msgstr "Przepraszamy, nie możesz zresetować hasła tutaj ponieważ Twoje konto jest zarządzane przez inny serwer." -#: forms.py:75 +#: forms.py:76 msgid "This email address is not recognised." msgstr "Ten adres email nie został rozpoznany." -#: forms.py:82 templates/wagtailadmin/pages/_privacy_indicator.html:13 -#: templates/wagtailadmin/pages/_privacy_indicator.html:18 -#, fuzzy -msgid "Public" -msgstr "Opublikuj" +#: forms.py:88 +msgid "New title" +msgstr "" -#: forms.py:83 +#: forms.py:89 +msgid "New slug" +msgstr "" + +#: forms.py:95 +msgid "Copy subpages" +msgstr "" + +#: forms.py:97 +#, python-format +msgid "This will copy %(count)s subpage." +msgid_plural "This will copy %(count)s subpages." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: forms.py:106 +msgid "Publish copied page" +msgstr "" + +#: forms.py:107 +msgid "This page is live. Would you like to publish its copy as well?" +msgstr "" + +#: forms.py:109 +msgid "Publish copies" +msgstr "" + +#: forms.py:111 +#, python-format +msgid "" +"%(count)s of the pages being copied is live. Would you like to publish its " +"copy?" +msgid_plural "" +"%(count)s of the pages being copied are live. Would you like to publish " +"their copies?" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: forms.py:124 views/pages.py:155 views/pages.py:272 +msgid "This slug is already in use" +msgstr "Ten slug jest już w użyciu" + +#: forms.py:130 templates/wagtailadmin/pages/_privacy_indicator.html:13 +#: templates/wagtailadmin/pages/_privacy_indicator.html:18 +msgid "Public" +msgstr "" + +#: forms.py:131 msgid "Private, accessible with the following password" msgstr "" -#: forms.py:91 -#, fuzzy +#: forms.py:139 msgid "This field is required." -msgstr "Ten adres email nie został rozpoznany." +msgstr "" #: templates/wagtailadmin/base.html:7 templates/wagtailadmin/home.html:4 msgid "Dashboard" msgstr "Kokpit" -#: templates/wagtailadmin/base.html:31 +#: templates/wagtailadmin/base.html:27 msgid "Menu" msgstr "Menu" @@ -93,9 +135,7 @@ msgstr "Witamy na %(site_name)s Wagtail CMS" msgid "" "This is your dashboard on which helpful information about content you've " "created will be displayed." -msgstr "" -"To jest twój kokpit, na którym będą wyświetlane pomocne informacje o treści, " -"którą stworzono." +msgstr "To jest twój kokpit, na którym będą wyświetlane pomocne informacje o treści, którą stworzono." #: templates/wagtailadmin/login.html:4 templates/wagtailadmin/login.html:59 msgid "Sign in" @@ -127,10 +167,7 @@ msgid "" "Your avatar image is provided by Gravatar and is connected to your email " "address. With a Gravatar account you can set an avatar for any number of " "other email addresses you use." -msgstr "" -"Twoje zdjęcie jest dostarczane przez Gravatar i jest skojarzone z Twoim " -"adresem email. Z konta Gravatar możesz ustawić zdjęcie dla dowolnej ilości " -"adresów email, których używasz." +msgstr "Twoje zdjęcie jest dostarczane przez Gravatar i jest skojarzone z Twoim adresem email. Z konta Gravatar możesz ustawić zdjęcie dla dowolnej ilości adresów email, których używasz." #: templates/wagtailadmin/account/account.html:25 #: templates/wagtailadmin/account/change_password.html:4 @@ -157,9 +194,7 @@ msgstr "Zmień hasło" #: templates/wagtailadmin/account/change_password.html:21 msgid "" "Your password can't be changed here. Please contact a site administrator." -msgstr "" -"Twoje hasło nie może być zmienione. Proszę skontaktować się z " -"administratorem." +msgstr "Twoje hasło nie może być zmienione. Proszę skontaktować się z administratorem." #: templates/wagtailadmin/account/notification_preferences.html:4 #: templates/wagtailadmin/account/notification_preferences.html:6 @@ -233,12 +268,12 @@ msgstr "Wyślij link pocztą email" #: templates/wagtailadmin/chooser/_search_form.html:7 #: templates/wagtailadmin/pages/search.html:3 #: templates/wagtailadmin/pages/search.html:16 -#: templatetags/wagtailadmin_tags.py:35 +#: templatetags/wagtailadmin_tags.py:36 msgid "Search" msgstr "Szukaj" #: templates/wagtailadmin/chooser/_search_results.html:3 -#: templatetags/wagtailadmin_tags.py:34 +#: templatetags/wagtailadmin_tags.py:35 msgid "Explorer" msgstr "Przeglądarka" @@ -252,18 +287,9 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "" -"\n" -" Jedno dopasowanie\n" -" " -msgstr[1] "" -"\n" -" Są %(counter)s dopasowania\n" -" " -msgstr[2] "" -"\n" -" Jest %(counter)s dopasowań\n" -" " +msgstr[0] "\n Jedno dopasowanie\n " +msgstr[1] "\n Są %(counter)s dopasowania\n " +msgstr[2] "\n Jest %(counter)s dopasowań\n " #: templates/wagtailadmin/chooser/browse.html:2 #: templates/wagtailadmin/chooser/search.html:2 @@ -308,7 +334,7 @@ msgstr "Przesuń w dół" #: templates/wagtailadmin/pages/confirm_delete.html:7 #: templates/wagtailadmin/pages/edit.html:45 #: templates/wagtailadmin/pages/list.html:84 -#: templates/wagtailadmin/pages/list.html:202 +#: templates/wagtailadmin/pages/list.html:205 msgid "Delete" msgstr "Usuń" @@ -420,18 +446,9 @@ msgid_plural "" "\n" " <span>%(total_pages)s</span> Pages\n" " " -msgstr[0] "" -"\n" -" <span>%(total_pages)s</span> Strona\n" -" " -msgstr[1] "" -"\n" -" <span>%(total_pages)s</span> Strony\n" -" " -msgstr[2] "" -"\n" -" <span>%(total_pages)s</span> Stron\n" -" " +msgstr[0] "\n <span>%(total_pages)s</span> Strona\n " +msgstr[1] "\n <span>%(total_pages)s</span> Strony\n " +msgstr[2] "\n <span>%(total_pages)s</span> Stron\n " #: templates/wagtailadmin/home/site_summary.html:16 #, python-format @@ -443,18 +460,9 @@ msgid_plural "" "\n" " <span>%(total_images)s</span> Images\n" " " -msgstr[0] "" -"\n" -" <span>%(total_images)s</span> Obraz\n" -" " -msgstr[1] "" -"\n" -" <span>%(total_images)s</span> Obrazy\n" -" " -msgstr[2] "" -"\n" -" <span>%(total_images)s</span> Obrazów\n" -" " +msgstr[0] "\n <span>%(total_images)s</span> Obraz\n " +msgstr[1] "\n <span>%(total_images)s</span> Obrazy\n " +msgstr[2] "\n <span>%(total_images)s</span> Obrazów\n " #: templates/wagtailadmin/home/site_summary.html:25 #, python-format @@ -466,18 +474,9 @@ msgid_plural "" "\n" " <span>%(total_docs)s</span> Documents\n" " " -msgstr[0] "" -"\n" -" <span>%(total_docs)s</span> Dokument\n" -" " -msgstr[1] "" -"\n" -" <span>%(total_docs)s</span> Dokumenty\n" -" " -msgstr[2] "" -"\n" -" <span>%(total_docs)s</span> Dokumentów\n" -" " +msgstr[0] "\n <span>%(total_docs)s</span> Dokument\n " +msgstr[1] "\n <span>%(total_docs)s</span> Dokumenty\n " +msgstr[2] "\n <span>%(total_docs)s</span> Dokumentów\n " #: templates/wagtailadmin/notifications/approved.html:1 #, python-format @@ -536,9 +535,8 @@ msgid "This page has been made private by a parent page." msgstr "" #: templates/wagtailadmin/page_privacy/ancestor_privacy.html:7 -#, fuzzy msgid "You can edit the privacy settings on:" -msgstr "Możesz edytować stronę tutaj:" +msgstr "" #: templates/wagtailadmin/page_privacy/set_privacy.html:6 msgid "<b>Note:</b> privacy changes apply to all children of this page too." @@ -548,12 +546,9 @@ msgstr "" #, python-format msgid "" "\n" -" Previewing '%(title)s', submitted by %(submitted_by)s on " -"%(submitted_on)s.\n" +" Previewing '%(title)s', submitted by %(submitted_by)s on %(submitted_on)s.\n" " " -msgstr "" -"\n" -"Podgląd '%(title)s', Wysłano przez %(submitted_by)s, %(submitted_on)s." +msgstr "\nPodgląd '%(title)s', Wysłano przez %(submitted_by)s, %(submitted_on)s." #: templates/wagtailadmin/pages/_privacy_indicator.html:9 msgid "Privacy" @@ -599,32 +594,17 @@ msgid "" " " msgid_plural "" "\n" -" This will also delete %(descendant_count)s more " -"subpages.\n" -" " -msgstr[0] "" -"\n" -" Zostanie usunięta również jedna strona podrzędna\n" -" " -msgstr[1] "" -"\n" -" Zostaną usunięte również %(descendant_count)s strony " -"podrzędne.\n" -" " -msgstr[2] "" -"\n" -" Zostanie usuniętych również %(descendant_count)s stron " -"podrzędnych.\n" +" This will also delete %(descendant_count)s more subpages.\n" " " +msgstr[0] "\n Zostanie usunięta również jedna strona podrzędna\n " +msgstr[1] "\n Zostaną usunięte również %(descendant_count)s strony podrzędne.\n " +msgstr[2] "\n Zostanie usuniętych również %(descendant_count)s stron podrzędnych.\n " #: templates/wagtailadmin/pages/confirm_delete.html:22 msgid "" "Alternatively you can unpublish the page. This removes the page from public " "view and you can edit or publish it again later." -msgstr "" -"Możesz dodatkowo cofnąć publikację tej strony. To spowoduje usunięcie jej z " -"widoku publicznego. Istnieje możliwość późniejszej edycji lub ponownej " -"publikacji." +msgstr "Możesz dodatkowo cofnąć publikację tej strony. To spowoduje usunięcie jej z widoku publicznego. Istnieje możliwość późniejszej edycji lub ponownej publikacji." #: templates/wagtailadmin/pages/confirm_delete.html:26 msgid "Delete it" @@ -655,9 +635,7 @@ msgstr "Czy na pewno chcesz przesunąć tę stronę do '%(title)s'?" msgid "" "Are you sure you want to move this page and all of its children into " "'%(title)s'?" -msgstr "" -"Czy na pewno chcesz przesunąć tę stronę i wszystkie strony podrzędne do " -"'%(title)s'?" +msgstr "Czy na pewno chcesz przesunąć tę stronę i wszystkie strony podrzędne do '%(title)s'?" #: templates/wagtailadmin/pages/confirm_move.html:18 msgid "Yes, move this page" @@ -671,7 +649,7 @@ msgstr "Cofnij publikację %(title)s" #: templates/wagtailadmin/pages/confirm_unpublish.html:6 #: templates/wagtailadmin/pages/edit.html:42 #: templates/wagtailadmin/pages/list.html:87 -#: templates/wagtailadmin/pages/list.html:205 +#: templates/wagtailadmin/pages/list.html:208 msgid "Unpublish" msgstr "Cofnij publikację" @@ -687,6 +665,20 @@ msgstr "Tak, cofnij publikację" msgid "Pages using" msgstr "Strony używające" +#: templates/wagtailadmin/pages/copy.html:3 +#, python-format +msgid "Copy %(title)s" +msgstr "" + +#: templates/wagtailadmin/pages/copy.html:6 +#: templates/wagtailadmin/pages/list.html:202 +msgid "Copy" +msgstr "" + +#: templates/wagtailadmin/pages/copy.html:26 +msgid "Copy this page" +msgstr "" + #: templates/wagtailadmin/pages/create.html:5 #, python-format msgid "New %(page_type)s" @@ -740,7 +732,7 @@ msgid "Exploring %(title)s" msgstr "Przeglądaj %(title)s" #: templates/wagtailadmin/pages/list.html:90 -#: templates/wagtailadmin/pages/list.html:208 +#: templates/wagtailadmin/pages/list.html:211 msgid "Add child page" msgstr "Dodaj stronę podrzędną" @@ -761,53 +753,50 @@ msgstr "Włącz sortowanie stron podrzędnych" msgid "Drag" msgstr "Przeciągnij" -#: templates/wagtailadmin/pages/list.html:234 -#: templates/wagtailadmin/pages/list.html:238 +#: templates/wagtailadmin/pages/list.html:237 +#: templates/wagtailadmin/pages/list.html:241 #, python-format msgid "Explorer subpages of '%(title)s'" msgstr "Przeglądarka podstron '%(title)s'" -#: templates/wagtailadmin/pages/list.html:234 -#: templates/wagtailadmin/pages/list.html:238 -#: templates/wagtailadmin/pages/list.html:242 +#: templates/wagtailadmin/pages/list.html:237 +#: templates/wagtailadmin/pages/list.html:241 +#: templates/wagtailadmin/pages/list.html:245 msgid "Explore" msgstr "Przeglądaj" -#: templates/wagtailadmin/pages/list.html:242 +#: templates/wagtailadmin/pages/list.html:245 #, python-format -msgid "Explorer child pages of '%(title)s'" -msgstr "Przeglądarka stron podrzędnych '%(title)s'" +msgid "Explore child pages of '%(title)s'" +msgstr "" -#: templates/wagtailadmin/pages/list.html:244 +#: templates/wagtailadmin/pages/list.html:247 #, python-format msgid "Add a child page to '%(title)s'" msgstr "Dodaj stronę podrzędną do '%(title)s'" -#: templates/wagtailadmin/pages/list.html:244 +#: templates/wagtailadmin/pages/list.html:247 msgid "Add subpage" msgstr "Dodaj podstronę" -#: templates/wagtailadmin/pages/list.html:253 +#: templates/wagtailadmin/pages/list.html:256 msgid "No pages have been created." msgstr "Żadna strona nie została stworzona" -#: templates/wagtailadmin/pages/list.html:253 +#: templates/wagtailadmin/pages/list.html:256 #, python-format msgid "Why not <a href=\"%(add_page_url)s\">add one</a>?" msgstr "Czemu nie <a href=\"%(add_page_url)s\">dodać kilku</a>?" -#: templates/wagtailadmin/pages/list.html:260 -#, fuzzy, python-format +#: templates/wagtailadmin/pages/list.html:263 +#, python-format msgid "" "\n" " Page %(page_number)s of %(num_pages)s.\n" " " msgstr "" -"\n" -" Strona %(page_number)s z %(num_pages)s.\n" -" " -#: templates/wagtailadmin/pages/list.html:266 +#: templates/wagtailadmin/pages/list.html:269 #: templates/wagtailadmin/pages/search_results.html:35 #: templates/wagtailadmin/pages/search_results.html:37 #: templates/wagtailadmin/pages/usage_results.html:13 @@ -817,7 +806,7 @@ msgstr "" msgid "Previous" msgstr "Wstecz" -#: templates/wagtailadmin/pages/list.html:271 +#: templates/wagtailadmin/pages/list.html:274 #: templates/wagtailadmin/pages/search_results.html:44 #: templates/wagtailadmin/pages/search_results.html:46 #: templates/wagtailadmin/pages/usage_results.html:18 @@ -838,7 +827,7 @@ msgid "Select a new parent page for <span>%(title)s</span>" msgstr "Wybierz nową stronę nadrzędną dla <span>%(title)s</span>" #: templates/wagtailadmin/pages/search_results.html:6 -#, fuzzy, python-format +#, python-format msgid "" "\n" " There is one matching page\n" @@ -848,17 +837,8 @@ msgid_plural "" " There are %(counter)s matching pages\n" " " msgstr[0] "" -"\n" -" Jedno dopasowanie\n" -" " msgstr[1] "" -"\n" -" Są %(counter)s dopasowania\n" -" " msgstr[2] "" -"\n" -" Jest %(counter)s dopasowań\n" -" " #: templates/wagtailadmin/pages/search_results.html:16 msgid "Other searches" @@ -883,10 +863,7 @@ msgid "" "\n" " Page %(page_number)s of %(num_pages)s.\n" " " -msgstr "" -"\n" -" Strona %(page_number)s z %(num_pages)s.\n" -" " +msgstr "\n Strona %(page_number)s z %(num_pages)s.\n " #: templates/wagtailadmin/pages/search_results.html:54 #, python-format @@ -898,9 +875,8 @@ msgid "Enter a search term above" msgstr "Wpisz wyszukiwany ciąg powyżej" #: templates/wagtailadmin/pages/usage_results.html:24 -#, fuzzy msgid "No pages use" -msgstr "Strony używające" +msgstr "" #: templates/wagtailadmin/shared/breadcrumb.html:6 msgid "Home" @@ -915,9 +891,8 @@ msgid "February" msgstr "" #: templates/wagtailadmin/shared/datetimepicker_translations.html:8 -#, fuzzy msgid "March" -msgstr "Szukaj" +msgstr "" #: templates/wagtailadmin/shared/datetimepicker_translations.html:9 msgid "April" @@ -980,9 +955,16 @@ msgid "Fri" msgstr "" #: templates/wagtailadmin/shared/datetimepicker_translations.html:26 -#, fuzzy msgid "Sat" -msgstr "Status" +msgstr "" + +#: templates/wagtailadmin/shared/header.html:23 +#, python-format +msgid "Used %(useage_count)s time" +msgid_plural "Used %(useage_count)s times" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" #: templates/wagtailadmin/shared/main_nav.html:10 msgid "Account settings" @@ -998,9 +980,8 @@ msgid "Page %(page_num)s of %(total_pages)s." msgstr "Strona %(page_num)s z %(total_pages)s." #: templates/wagtailadmin/userbar/base.html:4 -#, fuzzy msgid "User bar" -msgstr "Użytkownicy" +msgstr "" #: templates/wagtailadmin/userbar/base.html:14 msgid "Go to Wagtail admin interface" @@ -1019,122 +1000,69 @@ msgid "Your password has been changed successfully!" msgstr "Twoje hasło zostało zmienione poprawnie!" #: views/account.py:60 -#, fuzzy msgid "Your preferences have been updated successfully!" -msgstr "Twoje hasło zostało zmienione poprawnie!" +msgstr "" -#: views/pages.py:146 views/pages.py:263 -msgid "This slug is already in use" -msgstr "Ten slug jest już w użyciu" - -#: views/pages.py:160 views/pages.py:277 +#: views/pages.py:169 views/pages.py:286 msgid "Go live date/time must be before expiry date/time" msgstr "" -#: views/pages.py:170 views/pages.py:287 +#: views/pages.py:179 views/pages.py:296 msgid "Expiry date/time must be in the future" msgstr "" -#: views/pages.py:210 views/pages.py:334 views/pages.py:707 +#: views/pages.py:219 views/pages.py:351 views/pages.py:791 msgid "Page '{0}' published." msgstr "Strona '{0}' została opublikowana." -#: views/pages.py:212 views/pages.py:336 +#: views/pages.py:221 views/pages.py:353 msgid "Page '{0}' submitted for moderation." msgstr "Przesłano stronę '{0}' do przeglądu." -#: views/pages.py:215 +#: views/pages.py:224 msgid "Page '{0}' created." msgstr "Stworzono stronę '{0}'." -#: views/pages.py:224 -#, fuzzy +#: views/pages.py:233 msgid "The page could not be created due to validation errors" -msgstr "Strona nie mogła zostać zapisana z powodu błędów poprawności." +msgstr "" -#: views/pages.py:339 +#: views/pages.py:356 msgid "Page '{0}' updated." msgstr "Uaktualniono stronę '{0}'." -#: views/pages.py:348 +#: views/pages.py:365 msgid "The page could not be saved due to validation errors" msgstr "Strona nie mogła zostać zapisana z powodu błędów poprawności." -#: views/pages.py:361 +#: views/pages.py:378 msgid "This page is currently awaiting moderation" msgstr "Ta strona oczekuje na przejrzenie." -#: views/pages.py:381 +#: views/pages.py:409 msgid "Page '{0}' deleted." msgstr "Usunięto stronę '{0}'." -#: views/pages.py:543 +#: views/pages.py:575 msgid "Page '{0}' unpublished." msgstr "Cofnięto publikację strony '{0}'." -#: views/pages.py:594 +#: views/pages.py:627 msgid "Page '{0}' moved." msgstr "Przesunięto stronę '{0}'." -#: views/pages.py:701 views/pages.py:720 views/pages.py:740 +#: views/pages.py:709 +msgid "Page '{0}' and {1} subpages copied." +msgstr "" + +#: views/pages.py:711 +msgid "Page '{0}' copied." +msgstr "" + +#: views/pages.py:785 views/pages.py:804 views/pages.py:824 msgid "The page '{0}' is not currently awaiting moderation." msgstr "Strona '{0}' nie oczekuje na przejrzenie." -#: views/pages.py:726 +#: views/pages.py:810 msgid "Page '{0}' rejected for publication." msgstr "Strona '{0}' została odrzucona." - -#~ msgid "Please type a valid time" -#~ msgstr "Proszę wpisać poprawny czas" - -#~ msgid "View draft" -#~ msgstr "Pokaż szkic" - -#~ msgid "View live" -#~ msgstr "Pokaż na żywo" - -#~ msgid "Status:" -#~ msgstr "Status:" - -#~ msgid "Where do you want to create a %(page_type)s" -#~ msgstr "Gdzie chcesz stworzyć %(page_type)s" - -#~ msgid "Where do you want to create this" -#~ msgstr "Gdzie chcesz stworzyć" - -#~ msgid "Create a new page" -#~ msgstr "Stwórz nową stronę" - -#~ msgid "" -#~ "Your new page will be saved in the <em>top level</em> of your website. " -#~ "You can move it after saving." -#~ msgstr "" -#~ "Twoja nowa strona zostanie zapisana w <em>najwyższym poziomie</em>. " -#~ "Możesz ją przesunąć po zapisaniu." - -#~ msgid "More" -#~ msgstr "Więcej" - -#~ msgid "Redirects" -#~ msgstr "Przekierowania" - -#~ msgid "Editors Picks" -#~ msgstr "Wybór redakcji" - -#~ msgid "Snippets" -#~ msgstr "Snippety" - -#~ msgid "" -#~ "Sorry, you do not have access to create a page of type <em>'{0}'</em>." -#~ msgstr "" -#~ "Przepraszamy, nie masz uprawnień do stworzenia strony typu <em>'{0}'</em>." - -#~ msgid "" -#~ "Pages of this type can only be created as children of <em>'{0}'</em>. " -#~ "This new page will be saved there." -#~ msgstr "" -#~ "Strony tego typu mogą zostać stworzone tylko jako strony podrzędne " -#~ "<em>'{0}'</em>. Ta strona zostanie tam zapisana." - -#~ msgid "The page could not be created due to errors." -#~ msgstr "Strona nie mogła zostać stworzona z powodu błędów." diff --git a/wagtail/wagtailadmin/locale/pt_BR/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/pt_BR/LC_MESSAGES/django.po index 47de826c3..d30aaa5f0 100644 --- a/wagtail/wagtailadmin/locale/pt_BR/LC_MESSAGES/django.po +++ b/wagtail/wagtailadmin/locale/pt_BR/LC_MESSAGES/django.po @@ -1,21 +1,22 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -#, fuzzy +# +# Translators: +# Douglas Miranda <douglasmirandasilva@gmail.com>, 2014 +# Gladson <gladsonbrito@gmail.com>, 2014 msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:41+0000\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/wagtail/language/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: edit_handlers.py:627 @@ -26,58 +27,100 @@ msgstr "" msgid "Common page configuration" msgstr "Configuração comum de página" -#: forms.py:18 +#: forms.py:19 msgid "Search term" msgstr "Termo de pesquisa" -#: forms.py:42 +#: forms.py:43 msgid "Enter your username" msgstr "Digite seu usuário" -#: forms.py:45 +#: forms.py:46 msgid "Enter password" msgstr "Digite sua senha" -#: forms.py:50 +#: forms.py:51 msgid "Enter your email address to reset your password" msgstr "Entre com seu email para resetar sua senha" -#: forms.py:59 +#: forms.py:60 msgid "Please fill your email address." -msgstr "Por favor, insira o seu e-mail" +msgstr "Por favor, insira o seu e-mail." -#: forms.py:72 +#: forms.py:73 msgid "" "Sorry, you cannot reset your password here as your user account is managed " "by another server." -msgstr "" -"Desculpe, você não pode resetar sua senha aqui com seu usuário, que é " -"gerenciado por outro servidor." +msgstr "Desculpe, você não pode redefinir sua senha aqui com seu usuário, que é gerenciado por outro servidor." -#: forms.py:75 +#: forms.py:76 msgid "This email address is not recognised." msgstr "Esse e-mail não é reconhecido." -#: forms.py:82 templates/wagtailadmin/pages/_privacy_indicator.html:13 -#: templates/wagtailadmin/pages/_privacy_indicator.html:18 -#, fuzzy -msgid "Public" -msgstr "Publicar" - -#: forms.py:83 -msgid "Private, accessible with the following password" +#: forms.py:88 +msgid "New title" msgstr "" -#: forms.py:91 -#, fuzzy +#: forms.py:89 +msgid "New slug" +msgstr "" + +#: forms.py:95 +msgid "Copy subpages" +msgstr "" + +#: forms.py:97 +#, python-format +msgid "This will copy %(count)s subpage." +msgid_plural "This will copy %(count)s subpages." +msgstr[0] "" +msgstr[1] "" + +#: forms.py:106 +msgid "Publish copied page" +msgstr "" + +#: forms.py:107 +msgid "This page is live. Would you like to publish its copy as well?" +msgstr "" + +#: forms.py:109 +msgid "Publish copies" +msgstr "" + +#: forms.py:111 +#, python-format +msgid "" +"%(count)s of the pages being copied is live. Would you like to publish its " +"copy?" +msgid_plural "" +"%(count)s of the pages being copied are live. Would you like to publish " +"their copies?" +msgstr[0] "" +msgstr[1] "" + +#: forms.py:124 views/pages.py:155 views/pages.py:272 +msgid "This slug is already in use" +msgstr "Esse endereço já existe" + +#: forms.py:130 templates/wagtailadmin/pages/_privacy_indicator.html:13 +#: templates/wagtailadmin/pages/_privacy_indicator.html:18 +msgid "Public" +msgstr "Público" + +#: forms.py:131 +msgid "Private, accessible with the following password" +msgstr "Privado, acessível com a seguinte senha" + +#: forms.py:139 msgid "This field is required." -msgstr "Esse e-mail não é reconhecido." +msgstr "Este campo é obrigatório." #: templates/wagtailadmin/base.html:7 templates/wagtailadmin/home.html:4 msgid "Dashboard" msgstr "Painel" -#: templates/wagtailadmin/base.html:31 +#: templates/wagtailadmin/base.html:27 msgid "Menu" msgstr "Menu" @@ -90,9 +133,7 @@ msgstr "Bem vindo ao %(site_name)s Wagtail CMS" msgid "" "This is your dashboard on which helpful information about content you've " "created will be displayed." -msgstr "" -"Este é o seu painel aonde possui informações úteis sobre os conteúdos que " -"criou." +msgstr "Este é o seu painel aonde possui informações úteis sobre os conteúdos que criou." #: templates/wagtailadmin/login.html:4 templates/wagtailadmin/login.html:59 msgid "Sign in" @@ -124,10 +165,7 @@ msgid "" "Your avatar image is provided by Gravatar and is connected to your email " "address. With a Gravatar account you can set an avatar for any number of " "other email addresses you use." -msgstr "" -"Sua imagem é fornecido pelo Gravatar e está ligado ao seu e-mail. Com sua " -"conta do Gravatar você pode definir um avatar para qualquer quantidade de e-" -"mails que você usa." +msgstr "Sua imagem é fornecido pelo Gravatar e está ligado ao seu e-mail. Com sua conta do Gravatar você pode definir um avatar para qualquer quantidade de e-mails que você usa." #: templates/wagtailadmin/account/account.html:25 #: templates/wagtailadmin/account/change_password.html:4 @@ -141,7 +179,7 @@ msgstr "Altere sua senha para entrar." #: templates/wagtailadmin/account/account.html:36 msgid "Notification preferences" -msgstr "" +msgstr "Preferências de notificação" #: templates/wagtailadmin/account/account.html:40 msgid "Choose which email notifications to receive." @@ -159,11 +197,11 @@ msgstr "Sua senha não pode ser alterada. Contacte o administrador do site." #: templates/wagtailadmin/account/notification_preferences.html:4 #: templates/wagtailadmin/account/notification_preferences.html:6 msgid "Notification Preferences" -msgstr "" +msgstr "Preferências de notificação" #: templates/wagtailadmin/account/notification_preferences.html:16 msgid "Update" -msgstr "" +msgstr "Atualizar" #: templates/wagtailadmin/account/password_reset/complete.html:4 #: templates/wagtailadmin/account/password_reset/confirm.html:42 @@ -228,12 +266,12 @@ msgstr "Link de e-mail" #: templates/wagtailadmin/chooser/_search_form.html:7 #: templates/wagtailadmin/pages/search.html:3 #: templates/wagtailadmin/pages/search.html:16 -#: templatetags/wagtailadmin_tags.py:35 +#: templatetags/wagtailadmin_tags.py:36 msgid "Search" msgstr "Pesquisa" #: templates/wagtailadmin/chooser/_search_results.html:3 -#: templatetags/wagtailadmin_tags.py:34 +#: templatetags/wagtailadmin_tags.py:35 msgid "Explorer" msgstr "Explorar" @@ -247,14 +285,8 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "" -"\n" -" Existe uma combinação\n" -" " -msgstr[1] "" -"\n" -" Existem %(counter)s combinações\n" -" " +msgstr[0] "\n Existe uma combinação\n " +msgstr[1] "\n Existem %(counter)s combinações\n " #: templates/wagtailadmin/chooser/browse.html:2 #: templates/wagtailadmin/chooser/search.html:2 @@ -299,7 +331,7 @@ msgstr "Mover abaixo" #: templates/wagtailadmin/pages/confirm_delete.html:7 #: templates/wagtailadmin/pages/edit.html:45 #: templates/wagtailadmin/pages/list.html:84 -#: templates/wagtailadmin/pages/list.html:202 +#: templates/wagtailadmin/pages/list.html:205 msgid "Delete" msgstr "Excluir" @@ -395,7 +427,7 @@ msgstr "Rascunho" #: templates/wagtailadmin/pages/list.html:78 #: templates/wagtailadmin/pages/list.html:196 msgid "Live" -msgstr "Aplicado" +msgstr "Ao vivo" #: templates/wagtailadmin/home/site_summary.html:3 msgid "Site summary" @@ -411,14 +443,8 @@ msgid_plural "" "\n" " <span>%(total_pages)s</span> Pages\n" " " -msgstr[0] "" -"\n" -" <span>%(total_pages)s</span> Página\n" -" " -msgstr[1] "" -"\n" -" <span>%(total_pages)s</span> Páginas\n" -" " +msgstr[0] "\n <span>%(total_pages)s</span> Página\n " +msgstr[1] "\n <span>%(total_pages)s</span> Páginas\n " #: templates/wagtailadmin/home/site_summary.html:16 #, python-format @@ -430,14 +456,8 @@ msgid_plural "" "\n" " <span>%(total_images)s</span> Images\n" " " -msgstr[0] "" -"\n" -" <span>%(total_images)s</span> Imagem\n" -" " -msgstr[1] "" -"\n" -" <span>%(total_images)s</span> Imagens\n" -" " +msgstr[0] "\n <span>%(total_images)s</span> Imagem\n " +msgstr[1] "\n <span>%(total_images)s</span> Imagens\n " #: templates/wagtailadmin/home/site_summary.html:25 #, python-format @@ -449,14 +469,8 @@ msgid_plural "" "\n" " <span>%(total_docs)s</span> Documents\n" " " -msgstr[0] "" -"\n" -" <span>%(total_docs)s</span> Documento\n" -" " -msgstr[1] "" -"\n" -" <span>%(total_docs)s</span> Documentos\n" -" " +msgstr[0] "\n <span>%(total_docs)s</span> Documento\n " +msgstr[1] "\n <span>%(total_docs)s</span> Documentos\n " #: templates/wagtailadmin/notifications/approved.html:1 #, python-format @@ -474,7 +488,7 @@ msgstr "Você pode visualizar a página aqui:" #: templates/wagtailadmin/notifications/base_notification.html:3 msgid "Edit your notification preferences here:" -msgstr "" +msgstr "Edite suas preferências de notificação aqui:" #: templates/wagtailadmin/notifications/rejected.html:1 #, python-format @@ -508,16 +522,15 @@ msgstr "Você pode visualizar a página aqui:" #: templates/wagtailadmin/page_privacy/ancestor_privacy.html:2 #: templates/wagtailadmin/page_privacy/set_privacy.html:2 msgid "Page privacy" -msgstr "" +msgstr "Página privada" #: templates/wagtailadmin/page_privacy/ancestor_privacy.html:6 msgid "This page has been made private by a parent page." msgstr "" #: templates/wagtailadmin/page_privacy/ancestor_privacy.html:7 -#, fuzzy msgid "You can edit the privacy settings on:" -msgstr "Você pode editar sua página:" +msgstr "Você pode editar as configurações de privacidade em:" #: templates/wagtailadmin/page_privacy/set_privacy.html:6 msgid "<b>Note:</b> privacy changes apply to all children of this page too." @@ -527,14 +540,9 @@ msgstr "" #, python-format msgid "" "\n" -" Previewing '%(title)s', submitted by %(submitted_by)s on " -"%(submitted_on)s.\n" -" " -msgstr "" -"\n" -" Visualizando '%(title)s', enviado por %(submitted_by)s em " -"%(submitted_on)s.\n" +" Previewing '%(title)s', submitted by %(submitted_by)s on %(submitted_on)s.\n" " " +msgstr "\n Visualizando '%(title)s', enviado por %(submitted_by)s em %(submitted_on)s.\n " #: templates/wagtailadmin/pages/_privacy_indicator.html:9 msgid "Privacy" @@ -580,26 +588,16 @@ msgid "" " " msgid_plural "" "\n" -" This will also delete %(descendant_count)s more " -"subpages.\n" -" " -msgstr[0] "" -"\n" -" Isso deverá excluir mais de uma sub-página.\n" -" " -msgstr[1] "" -"\n" -" Isso deverá excluir mais de %(descendant_count)s sub-" -"páginas.\n" +" This will also delete %(descendant_count)s more subpages.\n" " " +msgstr[0] "\n Isso deverá excluir mais de uma sub-página.\n " +msgstr[1] "\n Isso deverá excluir mais de %(descendant_count)s sub-páginas.\n " #: templates/wagtailadmin/pages/confirm_delete.html:22 msgid "" "Alternatively you can unpublish the page. This removes the page from public " "view and you can edit or publish it again later." -msgstr "" -"Você pode cancelar a publicaçåo da página de outra forma. Isso vai remover a " -"página de publicação e então pode editar e publicá-lo mais tarde." +msgstr "Você pode cancelar a publicaçåo da página de outra forma. Isso vai remover a página de publicação e então pode editar e publicá-lo mais tarde." #: templates/wagtailadmin/pages/confirm_delete.html:26 msgid "Delete it" @@ -630,8 +628,7 @@ msgstr "Tem certeza que deseja mover a página dentro de '%(title)s'?" msgid "" "Are you sure you want to move this page and all of its children into " "'%(title)s'?" -msgstr "" -"Tem certeza que deseja mover essa página e suas filhas dentro de '%(title)s'?" +msgstr "Tem certeza que deseja mover essa página e suas filhas dentro de '%(title)s'?" #: templates/wagtailadmin/pages/confirm_move.html:18 msgid "Yes, move this page" @@ -645,7 +642,7 @@ msgstr "Despublicar %(title)s" #: templates/wagtailadmin/pages/confirm_unpublish.html:6 #: templates/wagtailadmin/pages/edit.html:42 #: templates/wagtailadmin/pages/list.html:87 -#: templates/wagtailadmin/pages/list.html:205 +#: templates/wagtailadmin/pages/list.html:208 msgid "Unpublish" msgstr "Despublicar" @@ -661,6 +658,20 @@ msgstr "Sim, quero despublicar" msgid "Pages using" msgstr "Usando páginas" +#: templates/wagtailadmin/pages/copy.html:3 +#, python-format +msgid "Copy %(title)s" +msgstr "" + +#: templates/wagtailadmin/pages/copy.html:6 +#: templates/wagtailadmin/pages/list.html:202 +msgid "Copy" +msgstr "" + +#: templates/wagtailadmin/pages/copy.html:26 +msgid "Copy this page" +msgstr "" + #: templates/wagtailadmin/pages/create.html:5 #, python-format msgid "New %(page_type)s" @@ -714,7 +725,7 @@ msgid "Exploring %(title)s" msgstr "Explorando %(title)s" #: templates/wagtailadmin/pages/list.html:90 -#: templates/wagtailadmin/pages/list.html:208 +#: templates/wagtailadmin/pages/list.html:211 msgid "Add child page" msgstr "Adicionar página filha" @@ -735,53 +746,50 @@ msgstr "Habilitar ordenação de páginas filhas" msgid "Drag" msgstr "Arrastar" -#: templates/wagtailadmin/pages/list.html:234 -#: templates/wagtailadmin/pages/list.html:238 +#: templates/wagtailadmin/pages/list.html:237 +#: templates/wagtailadmin/pages/list.html:241 #, python-format msgid "Explorer subpages of '%(title)s'" msgstr "Explorar sub-páginas de %(title)s" -#: templates/wagtailadmin/pages/list.html:234 -#: templates/wagtailadmin/pages/list.html:238 -#: templates/wagtailadmin/pages/list.html:242 +#: templates/wagtailadmin/pages/list.html:237 +#: templates/wagtailadmin/pages/list.html:241 +#: templates/wagtailadmin/pages/list.html:245 msgid "Explore" msgstr "Explorar" -#: templates/wagtailadmin/pages/list.html:242 +#: templates/wagtailadmin/pages/list.html:245 #, python-format -msgid "Explorer child pages of '%(title)s'" -msgstr "Explorar páginas filhas de %(title)s" +msgid "Explore child pages of '%(title)s'" +msgstr "" -#: templates/wagtailadmin/pages/list.html:244 +#: templates/wagtailadmin/pages/list.html:247 #, python-format msgid "Add a child page to '%(title)s'" msgstr "Adicionar página filha de %(title)s" -#: templates/wagtailadmin/pages/list.html:244 +#: templates/wagtailadmin/pages/list.html:247 msgid "Add subpage" msgstr "Adicionar sub-página" -#: templates/wagtailadmin/pages/list.html:253 +#: templates/wagtailadmin/pages/list.html:256 msgid "No pages have been created." msgstr "Nenhuma página foi criada." -#: templates/wagtailadmin/pages/list.html:253 +#: templates/wagtailadmin/pages/list.html:256 #, python-format msgid "Why not <a href=\"%(add_page_url)s\">add one</a>?" msgstr "Porque não <a href=\"%(add_page_url)s\">adicionar uma</a>?" -#: templates/wagtailadmin/pages/list.html:260 -#, fuzzy, python-format +#: templates/wagtailadmin/pages/list.html:263 +#, python-format msgid "" "\n" " Page %(page_number)s of %(num_pages)s.\n" " " -msgstr "" -"\n" -" Página %(page_number)s de %(num_pages)s.\n" -" " +msgstr "\n Página %(page_number)s de %(num_pages)s.\n " -#: templates/wagtailadmin/pages/list.html:266 +#: templates/wagtailadmin/pages/list.html:269 #: templates/wagtailadmin/pages/search_results.html:35 #: templates/wagtailadmin/pages/search_results.html:37 #: templates/wagtailadmin/pages/usage_results.html:13 @@ -791,7 +799,7 @@ msgstr "" msgid "Previous" msgstr "Anterior" -#: templates/wagtailadmin/pages/list.html:271 +#: templates/wagtailadmin/pages/list.html:274 #: templates/wagtailadmin/pages/search_results.html:44 #: templates/wagtailadmin/pages/search_results.html:46 #: templates/wagtailadmin/pages/usage_results.html:18 @@ -821,18 +829,12 @@ msgid_plural "" "\n" " There are %(counter)s matching pages\n" " " -msgstr[0] "" -"\n" -" Existe uma página correspondente\n" -" " -msgstr[1] "" -"\n" -" Existe %(counter)s páginas correspondentes\n" -" " +msgstr[0] "\n Há uma página correspondente\n " +msgstr[1] "\n Existem %(counter)s páginas que correspondem\n " #: templates/wagtailadmin/pages/search_results.html:16 msgid "Other searches" -msgstr "Outras pesquisas" +msgstr "Outras buscas" #: templates/wagtailadmin/pages/search_results.html:18 msgid "Images" @@ -853,10 +855,7 @@ msgid "" "\n" " Page %(page_number)s of %(num_pages)s.\n" " " -msgstr "" -"\n" -" Página %(page_number)s de %(num_pages)s.\n" -" " +msgstr "\n Página %(page_number)s de %(num_pages)s.\n " #: templates/wagtailadmin/pages/search_results.html:54 #, python-format @@ -868,9 +867,8 @@ msgid "Enter a search term above" msgstr "Entre com termo de pesquisa acima" #: templates/wagtailadmin/pages/usage_results.html:24 -#, fuzzy msgid "No pages use" -msgstr "Usando páginas" +msgstr "" #: templates/wagtailadmin/shared/breadcrumb.html:6 msgid "Home" @@ -878,81 +876,86 @@ msgstr "Início" #: templates/wagtailadmin/shared/datetimepicker_translations.html:6 msgid "January" -msgstr "" +msgstr "Janeiro" #: templates/wagtailadmin/shared/datetimepicker_translations.html:7 msgid "February" -msgstr "" +msgstr "Fevereiro" #: templates/wagtailadmin/shared/datetimepicker_translations.html:8 -#, fuzzy msgid "March" -msgstr "Pesquisa" +msgstr "Março" #: templates/wagtailadmin/shared/datetimepicker_translations.html:9 msgid "April" -msgstr "" +msgstr "Abril" #: templates/wagtailadmin/shared/datetimepicker_translations.html:10 msgid "May" -msgstr "" +msgstr "Maio" #: templates/wagtailadmin/shared/datetimepicker_translations.html:11 msgid "June" -msgstr "" +msgstr "Junho" #: templates/wagtailadmin/shared/datetimepicker_translations.html:12 msgid "July" -msgstr "" +msgstr "Julho" #: templates/wagtailadmin/shared/datetimepicker_translations.html:13 msgid "August" -msgstr "" +msgstr "Agosto" #: templates/wagtailadmin/shared/datetimepicker_translations.html:14 msgid "September" -msgstr "" +msgstr "Setembro" #: templates/wagtailadmin/shared/datetimepicker_translations.html:15 msgid "October" -msgstr "" +msgstr "Outubro" #: templates/wagtailadmin/shared/datetimepicker_translations.html:16 msgid "November" -msgstr "" +msgstr "Novembro" #: templates/wagtailadmin/shared/datetimepicker_translations.html:17 msgid "December" -msgstr "" +msgstr "Dezembro" #: templates/wagtailadmin/shared/datetimepicker_translations.html:20 msgid "Sun" -msgstr "" +msgstr "Dom" #: templates/wagtailadmin/shared/datetimepicker_translations.html:21 msgid "Mon" -msgstr "" +msgstr "Seg" #: templates/wagtailadmin/shared/datetimepicker_translations.html:22 msgid "Tue" -msgstr "" +msgstr "Ter" #: templates/wagtailadmin/shared/datetimepicker_translations.html:23 msgid "Wed" -msgstr "" +msgstr "Qua" #: templates/wagtailadmin/shared/datetimepicker_translations.html:24 msgid "Thu" -msgstr "" +msgstr "Qui" #: templates/wagtailadmin/shared/datetimepicker_translations.html:25 msgid "Fri" -msgstr "" +msgstr "Sex" #: templates/wagtailadmin/shared/datetimepicker_translations.html:26 -#, fuzzy msgid "Sat" -msgstr "Status" +msgstr "Sáb" + +#: templates/wagtailadmin/shared/header.html:23 +#, python-format +msgid "Used %(useage_count)s time" +msgid_plural "Used %(useage_count)s times" +msgstr[0] "" +msgstr[1] "" #: templates/wagtailadmin/shared/main_nav.html:10 msgid "Account settings" @@ -969,139 +972,88 @@ msgstr "Página %(page_num)s de %(total_pages)s." #: templates/wagtailadmin/userbar/base.html:4 msgid "User bar" -msgstr "Barra do Usuário" +msgstr "" #: templates/wagtailadmin/userbar/base.html:14 msgid "Go to Wagtail admin interface" -msgstr "Ir para Interface Administrativa" +msgstr "" #: templates/wagtailadmin/userbar/item_page_add.html:5 msgid "Add another page at this level" -msgstr "Adicionar outra página neste nivel" +msgstr "" #: templates/wagtailadmin/userbar/item_page_add.html:5 msgid "Add" -msgstr "Adicionar" +msgstr "Add" #: views/account.py:39 msgid "Your password has been changed successfully!" msgstr "Sua senha foi alterada com sucesso!" #: views/account.py:60 -#, fuzzy msgid "Your preferences have been updated successfully!" -msgstr "Sua senha foi alterada com sucesso!" +msgstr "" -#: views/pages.py:146 views/pages.py:263 -msgid "This slug is already in use" -msgstr "Esse endereço já existe" - -#: views/pages.py:160 views/pages.py:277 +#: views/pages.py:169 views/pages.py:286 msgid "Go live date/time must be before expiry date/time" msgstr "" -#: views/pages.py:170 views/pages.py:287 +#: views/pages.py:179 views/pages.py:296 msgid "Expiry date/time must be in the future" msgstr "" -#: views/pages.py:210 views/pages.py:334 views/pages.py:707 +#: views/pages.py:219 views/pages.py:351 views/pages.py:791 msgid "Page '{0}' published." msgstr "Página '{0}' publicada." -#: views/pages.py:212 views/pages.py:336 +#: views/pages.py:221 views/pages.py:353 msgid "Page '{0}' submitted for moderation." msgstr "Página '{0}' enviada para moderação." -#: views/pages.py:215 +#: views/pages.py:224 msgid "Page '{0}' created." msgstr "Página '{0}' criada." -#: views/pages.py:224 -#, fuzzy +#: views/pages.py:233 msgid "The page could not be created due to validation errors" -msgstr "A página não pode ser salva devido a erros de validação" +msgstr "" -#: views/pages.py:339 +#: views/pages.py:356 msgid "Page '{0}' updated." msgstr "Página '{0}' atualizada." -#: views/pages.py:348 +#: views/pages.py:365 msgid "The page could not be saved due to validation errors" msgstr "A página não pode ser salva devido a erros de validação" -#: views/pages.py:361 +#: views/pages.py:378 msgid "This page is currently awaiting moderation" msgstr "Essa página está atualmente esperando moderação" -#: views/pages.py:381 +#: views/pages.py:409 msgid "Page '{0}' deleted." msgstr "Página '{0}' excluida." -#: views/pages.py:543 +#: views/pages.py:575 msgid "Page '{0}' unpublished." msgstr "Página '{0}' despublicada." -#: views/pages.py:594 +#: views/pages.py:627 msgid "Page '{0}' moved." msgstr "Página '{0}' movida." -#: views/pages.py:701 views/pages.py:720 views/pages.py:740 +#: views/pages.py:709 +msgid "Page '{0}' and {1} subpages copied." +msgstr "" + +#: views/pages.py:711 +msgid "Page '{0}' copied." +msgstr "" + +#: views/pages.py:785 views/pages.py:804 views/pages.py:824 msgid "The page '{0}' is not currently awaiting moderation." msgstr "A página '{0}' não está mais esperando moderação." -#: views/pages.py:726 +#: views/pages.py:810 msgid "Page '{0}' rejected for publication." msgstr "Página '{0}' rejeitada para publicação." - -#~ msgid "Please type a valid time" -#~ msgstr "Por favor, insira um hora válida" - -#~ msgid "Status:" -#~ msgstr "Status:" - -#~ msgid "Where do you want to create a %(page_type)s" -#~ msgstr "Aonde você deseja criar um %(page_type)s" - -#~ msgid "Where do you want to create this" -#~ msgstr "Aonde deseje criar isto" - -#~ msgid "Create a new page" -#~ msgstr "Criar nova página" - -#~ msgid "" -#~ "Your new page will be saved in the <em>top level</em> of your website. " -#~ "You can move it after saving." -#~ msgstr "" -#~ "Sua nova página será salva no <em>nível superior</em> do seu site. Você " -#~ "pode mover depois de salvar." - -#~ msgid "Less" -#~ msgstr "Menos" - -#~ msgid "More" -#~ msgstr "Mais" - -#~ msgid "Redirects" -#~ msgstr "Redirecionamentos" - -#~ msgid "Editors Picks" -#~ msgstr "Dicas de Redação" - -#~ msgid "Snippets" -#~ msgstr "Trechos" - -#~ msgid "" -#~ "Sorry, you do not have access to create a page of type <em>'{0}'</em>." -#~ msgstr "" -#~ "Desculpe, você não tem permissão para criar uma página do tipo <em>{0}</" -#~ "em>" - -#~ msgid "" -#~ "Pages of this type can only be created as children of <em>'{0}'</em>. " -#~ "This new page will be saved there." -#~ msgstr "" -#~ "Páginas desse tipo somente pode ser criada como filho de <em>{0}</em>. " -#~ "Esta nova página será salva lá." - -#~ msgid "The page could not be created due to errors." -#~ msgstr "A página não pode ser criado devido a erros." diff --git a/wagtail/wagtailadmin/locale/ro/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/ro/LC_MESSAGES/django.po index 0bccf350a..4967b5f5f 100644 --- a/wagtail/wagtailadmin/locale/ro/LC_MESSAGES/django.po +++ b/wagtail/wagtailadmin/locale/ro/LC_MESSAGES/django.po @@ -1,24 +1,22 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: -# zerolab, 2014 +# Dan Braghis, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:41+0000\n" -"PO-Revision-Date: 2014-03-18 13:19+0000\n" -"Last-Translator: zerolab\n" -"Language-Team: Romanian (http://www.transifex.com/projects/p/wagtail/" -"language/ro/)\n" -"Language: ro\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Romanian (http://www.transifex.com/projects/p/wagtail/language/ro/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?" -"2:1));\n" +"Language: ro\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" #: edit_handlers.py:627 msgid "Scheduled publishing" @@ -28,58 +26,102 @@ msgstr "" msgid "Common page configuration" msgstr "Configurație de pagini generală" -#: forms.py:18 +#: forms.py:19 msgid "Search term" msgstr "Termen de căutare" -#: forms.py:42 +#: forms.py:43 msgid "Enter your username" msgstr "Introduceți numele de utilizator" -#: forms.py:45 +#: forms.py:46 msgid "Enter password" msgstr "Introduceți parola" -#: forms.py:50 +#: forms.py:51 msgid "Enter your email address to reset your password" msgstr "Introduceți adresa de e-mail pentru a reseta parola" -#: forms.py:59 +#: forms.py:60 msgid "Please fill your email address." msgstr "Introduceți adresa de e-mail." -#: forms.py:72 +#: forms.py:73 msgid "" "Sorry, you cannot reset your password here as your user account is managed " "by another server." -msgstr "" -"Ne pare rău, dar nu puteți reseta parola aici. Contul dvs. de utilizator " -"este gestionat de un alt server." +msgstr "Ne pare rău, dar nu puteți reseta parola aici. Contul dvs. de utilizator este gestionat de un alt server." -#: forms.py:75 +#: forms.py:76 msgid "This email address is not recognised." msgstr "Adresa e-mail nu este recunoscută." -#: forms.py:82 templates/wagtailadmin/pages/_privacy_indicator.html:13 -#: templates/wagtailadmin/pages/_privacy_indicator.html:18 -#, fuzzy -msgid "Public" -msgstr "Publică" +#: forms.py:88 +msgid "New title" +msgstr "" -#: forms.py:83 +#: forms.py:89 +msgid "New slug" +msgstr "" + +#: forms.py:95 +msgid "Copy subpages" +msgstr "" + +#: forms.py:97 +#, python-format +msgid "This will copy %(count)s subpage." +msgid_plural "This will copy %(count)s subpages." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: forms.py:106 +msgid "Publish copied page" +msgstr "" + +#: forms.py:107 +msgid "This page is live. Would you like to publish its copy as well?" +msgstr "" + +#: forms.py:109 +msgid "Publish copies" +msgstr "" + +#: forms.py:111 +#, python-format +msgid "" +"%(count)s of the pages being copied is live. Would you like to publish its " +"copy?" +msgid_plural "" +"%(count)s of the pages being copied are live. Would you like to publish " +"their copies?" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: forms.py:124 views/pages.py:155 views/pages.py:272 +msgid "This slug is already in use" +msgstr "Această fisă a fost deja folosită" + +#: forms.py:130 templates/wagtailadmin/pages/_privacy_indicator.html:13 +#: templates/wagtailadmin/pages/_privacy_indicator.html:18 +msgid "Public" +msgstr "" + +#: forms.py:131 msgid "Private, accessible with the following password" msgstr "" -#: forms.py:91 -#, fuzzy +#: forms.py:139 msgid "This field is required." -msgstr "Adresa e-mail nu este recunoscută." +msgstr "" #: templates/wagtailadmin/base.html:7 templates/wagtailadmin/home.html:4 msgid "Dashboard" msgstr "Bord" -#: templates/wagtailadmin/base.html:31 +#: templates/wagtailadmin/base.html:27 msgid "Menu" msgstr "Meniu" @@ -100,8 +142,7 @@ msgstr "Conectare" #: templates/wagtailadmin/login.html:18 msgid "Your username and password didn't match. Please try again." -msgstr "" -"Numele de utilizator și parola nu corespund. Vă rugăm să încercați din nou." +msgstr "Numele de utilizator și parola nu corespund. Vă rugăm să încercați din nou." #: templates/wagtailadmin/login.html:26 msgid "Sign in to Wagtail" @@ -125,10 +166,7 @@ msgid "" "Your avatar image is provided by Gravatar and is connected to your email " "address. With a Gravatar account you can set an avatar for any number of " "other email addresses you use." -msgstr "" -"Avatarul este oferit de Gravatar și este legat de adresa dvs. de e-mail. " -"Având un cont Gravatar, puteți seta un avatar pentru orice număr de adrese e-" -"mail folosite." +msgstr "Avatarul este oferit de Gravatar și este legat de adresa dvs. de e-mail. Având un cont Gravatar, puteți seta un avatar pentru orice număr de adrese e-mail folosite." #: templates/wagtailadmin/account/account.html:25 #: templates/wagtailadmin/account/change_password.html:4 @@ -155,9 +193,7 @@ msgstr "Schimbă parola" #: templates/wagtailadmin/account/change_password.html:21 msgid "" "Your password can't be changed here. Please contact a site administrator." -msgstr "" -"Parola nu poate fi schimbată aici. Vă rugăm să contactați administratorii " -"sitului." +msgstr "Parola nu poate fi schimbată aici. Vă rugăm să contactați administratorii sitului." #: templates/wagtailadmin/account/notification_preferences.html:4 #: templates/wagtailadmin/account/notification_preferences.html:6 @@ -231,12 +267,12 @@ msgstr "Link e-mail" #: templates/wagtailadmin/chooser/_search_form.html:7 #: templates/wagtailadmin/pages/search.html:3 #: templates/wagtailadmin/pages/search.html:16 -#: templatetags/wagtailadmin_tags.py:35 +#: templatetags/wagtailadmin_tags.py:36 msgid "Search" msgstr "Căutare" #: templates/wagtailadmin/chooser/_search_results.html:3 -#: templatetags/wagtailadmin_tags.py:34 +#: templatetags/wagtailadmin_tags.py:35 msgid "Explorer" msgstr "Explorator" @@ -250,15 +286,9 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "" -"\n" -"Există o potrivire" -msgstr[1] "" -"\n" -"Sunt %(counter)s potriviri" -msgstr[2] "" -"\n" -"Sunt %(counter)s potriviri" +msgstr[0] "\nExistă o potrivire" +msgstr[1] "\nSunt %(counter)s potriviri" +msgstr[2] "\nSunt %(counter)s potriviri" #: templates/wagtailadmin/chooser/browse.html:2 #: templates/wagtailadmin/chooser/search.html:2 @@ -303,7 +333,7 @@ msgstr "Deplasează în jos" #: templates/wagtailadmin/pages/confirm_delete.html:7 #: templates/wagtailadmin/pages/edit.html:45 #: templates/wagtailadmin/pages/list.html:84 -#: templates/wagtailadmin/pages/list.html:202 +#: templates/wagtailadmin/pages/list.html:205 msgid "Delete" msgstr "Șterge" @@ -415,15 +445,9 @@ msgid_plural "" "\n" " <span>%(total_pages)s</span> Pages\n" " " -msgstr[0] "" -"\n" -"<span>%(total_pages)s</span> pagină" -msgstr[1] "" -"\n" -"<span>%(total_pages)s</span> pagini" -msgstr[2] "" -"\n" -"<span>%(total_pages)s</span> pagini" +msgstr[0] "\n<span>%(total_pages)s</span> pagină" +msgstr[1] "\n<span>%(total_pages)s</span> pagini" +msgstr[2] "\n<span>%(total_pages)s</span> pagini" #: templates/wagtailadmin/home/site_summary.html:16 #, python-format @@ -435,15 +459,9 @@ msgid_plural "" "\n" " <span>%(total_images)s</span> Images\n" " " -msgstr[0] "" -"\n" -"<span>%(total_images)s</span> imagine" -msgstr[1] "" -"\n" -"<span>%(total_images)s</span> imagini" -msgstr[2] "" -"\n" -"<span>%(total_images)s</span> imagini" +msgstr[0] "\n<span>%(total_images)s</span> imagine" +msgstr[1] "\n<span>%(total_images)s</span> imagini" +msgstr[2] "\n<span>%(total_images)s</span> imagini" #: templates/wagtailadmin/home/site_summary.html:25 #, python-format @@ -455,15 +473,9 @@ msgid_plural "" "\n" " <span>%(total_docs)s</span> Documents\n" " " -msgstr[0] "" -"\n" -"<span>%(total_docs)s</span> document" -msgstr[1] "" -"\n" -"<span>%(total_docs)s</span> documente" -msgstr[2] "" -"\n" -"<span>%(total_docs)s</span> documente" +msgstr[0] "\n<span>%(total_docs)s</span> document" +msgstr[1] "\n<span>%(total_docs)s</span> documente" +msgstr[2] "\n<span>%(total_docs)s</span> documente" #: templates/wagtailadmin/notifications/approved.html:1 #, python-format @@ -522,9 +534,8 @@ msgid "This page has been made private by a parent page." msgstr "" #: templates/wagtailadmin/page_privacy/ancestor_privacy.html:7 -#, fuzzy msgid "You can edit the privacy settings on:" -msgstr "Puteți edita pagina aici:" +msgstr "" #: templates/wagtailadmin/page_privacy/set_privacy.html:6 msgid "<b>Note:</b> privacy changes apply to all children of this page too." @@ -534,13 +545,9 @@ msgstr "" #, python-format msgid "" "\n" -" Previewing '%(title)s', submitted by %(submitted_by)s on " -"%(submitted_on)s.\n" +" Previewing '%(title)s', submitted by %(submitted_by)s on %(submitted_on)s.\n" " " -msgstr "" -"\n" -"Examinare '%(title)s', trimisă de %(submitted_by)s pe data de " -"%(submitted_on)s." +msgstr "\nExaminare '%(title)s', trimisă de %(submitted_by)s pe data de %(submitted_on)s." #: templates/wagtailadmin/pages/_privacy_indicator.html:9 msgid "Privacy" @@ -586,26 +593,17 @@ msgid "" " " msgid_plural "" "\n" -" This will also delete %(descendant_count)s more " -"subpages.\n" +" This will also delete %(descendant_count)s more subpages.\n" " " -msgstr[0] "" -"\n" -"Această acțiune va șterge și o subpagină." -msgstr[1] "" -"\n" -"Această acțiune va șterge %(descendant_count)s subpagini." -msgstr[2] "" -"\n" -"Această acțiune va șterge %(descendant_count)s subpagini." +msgstr[0] "\nAceastă acțiune va șterge și o subpagină." +msgstr[1] "\nAceastă acțiune va șterge %(descendant_count)s subpagini." +msgstr[2] "\nAceastă acțiune va șterge %(descendant_count)s subpagini." #: templates/wagtailadmin/pages/confirm_delete.html:22 msgid "" "Alternatively you can unpublish the page. This removes the page from public " "view and you can edit or publish it again later." -msgstr "" -"Puteți să anulați pagina ca alternativă. Această acțiune retrage pagina din " -"domeniul public, dar puteți edita sau publica pagina ulterior." +msgstr "Puteți să anulați pagina ca alternativă. Această acțiune retrage pagina din domeniul public, dar puteți edita sau publica pagina ulterior." #: templates/wagtailadmin/pages/confirm_delete.html:26 msgid "Delete it" @@ -636,8 +634,7 @@ msgstr "Sigur doriți să mutați această pagină în '%(title)s'?" msgid "" "Are you sure you want to move this page and all of its children into " "'%(title)s'?" -msgstr "" -"Sigur doriți să mutați această pagină și paginile dependente în '%(title)s'?" +msgstr "Sigur doriți să mutați această pagină și paginile dependente în '%(title)s'?" #: templates/wagtailadmin/pages/confirm_move.html:18 msgid "Yes, move this page" @@ -651,7 +648,7 @@ msgstr "Anulează publicarea %(title)s" #: templates/wagtailadmin/pages/confirm_unpublish.html:6 #: templates/wagtailadmin/pages/edit.html:42 #: templates/wagtailadmin/pages/list.html:87 -#: templates/wagtailadmin/pages/list.html:205 +#: templates/wagtailadmin/pages/list.html:208 msgid "Unpublish" msgstr "Anulează publicarea" @@ -667,6 +664,20 @@ msgstr "Da, anulează publicarea" msgid "Pages using" msgstr "Pagini cu" +#: templates/wagtailadmin/pages/copy.html:3 +#, python-format +msgid "Copy %(title)s" +msgstr "" + +#: templates/wagtailadmin/pages/copy.html:6 +#: templates/wagtailadmin/pages/list.html:202 +msgid "Copy" +msgstr "" + +#: templates/wagtailadmin/pages/copy.html:26 +msgid "Copy this page" +msgstr "" + #: templates/wagtailadmin/pages/create.html:5 #, python-format msgid "New %(page_type)s" @@ -720,7 +731,7 @@ msgid "Exploring %(title)s" msgstr "Explorare %(title)s" #: templates/wagtailadmin/pages/list.html:90 -#: templates/wagtailadmin/pages/list.html:208 +#: templates/wagtailadmin/pages/list.html:211 msgid "Add child page" msgstr "Adaugă pagină dependentă" @@ -741,52 +752,50 @@ msgstr "Activează rânduirea paginilor dependente" msgid "Drag" msgstr "Glisează" -#: templates/wagtailadmin/pages/list.html:234 -#: templates/wagtailadmin/pages/list.html:238 +#: templates/wagtailadmin/pages/list.html:237 +#: templates/wagtailadmin/pages/list.html:241 #, python-format msgid "Explorer subpages of '%(title)s'" msgstr "Explorează subpaginile '%(title)s'" -#: templates/wagtailadmin/pages/list.html:234 -#: templates/wagtailadmin/pages/list.html:238 -#: templates/wagtailadmin/pages/list.html:242 +#: templates/wagtailadmin/pages/list.html:237 +#: templates/wagtailadmin/pages/list.html:241 +#: templates/wagtailadmin/pages/list.html:245 msgid "Explore" msgstr "Explorează" -#: templates/wagtailadmin/pages/list.html:242 +#: templates/wagtailadmin/pages/list.html:245 #, python-format -msgid "Explorer child pages of '%(title)s'" -msgstr "Explorează paginile dependente de '%(title)s'" +msgid "Explore child pages of '%(title)s'" +msgstr "" -#: templates/wagtailadmin/pages/list.html:244 +#: templates/wagtailadmin/pages/list.html:247 #, python-format msgid "Add a child page to '%(title)s'" msgstr "Adaugă o pagină dependentă de '%(title)s'" -#: templates/wagtailadmin/pages/list.html:244 +#: templates/wagtailadmin/pages/list.html:247 msgid "Add subpage" msgstr "Adaugă subpagină" -#: templates/wagtailadmin/pages/list.html:253 +#: templates/wagtailadmin/pages/list.html:256 msgid "No pages have been created." msgstr "Nu a fost creată nici o pagină." -#: templates/wagtailadmin/pages/list.html:253 +#: templates/wagtailadmin/pages/list.html:256 #, python-format msgid "Why not <a href=\"%(add_page_url)s\">add one</a>?" msgstr "De ce să nu <a href=\"%(add_page_url)s\">adăugați una</a>?" -#: templates/wagtailadmin/pages/list.html:260 -#, fuzzy, python-format +#: templates/wagtailadmin/pages/list.html:263 +#, python-format msgid "" "\n" " Page %(page_number)s of %(num_pages)s.\n" " " msgstr "" -"\n" -"Pagina %(page_number)s din %(num_pages)s." -#: templates/wagtailadmin/pages/list.html:266 +#: templates/wagtailadmin/pages/list.html:269 #: templates/wagtailadmin/pages/search_results.html:35 #: templates/wagtailadmin/pages/search_results.html:37 #: templates/wagtailadmin/pages/usage_results.html:13 @@ -796,7 +805,7 @@ msgstr "" msgid "Previous" msgstr "Precedent" -#: templates/wagtailadmin/pages/list.html:271 +#: templates/wagtailadmin/pages/list.html:274 #: templates/wagtailadmin/pages/search_results.html:44 #: templates/wagtailadmin/pages/search_results.html:46 #: templates/wagtailadmin/pages/usage_results.html:18 @@ -817,7 +826,7 @@ msgid "Select a new parent page for <span>%(title)s</span>" msgstr "Selectează o pagină de bază nouă pentru <span>%(title)s</span>" #: templates/wagtailadmin/pages/search_results.html:6 -#, fuzzy, python-format +#, python-format msgid "" "\n" " There is one matching page\n" @@ -827,14 +836,8 @@ msgid_plural "" " There are %(counter)s matching pages\n" " " msgstr[0] "" -"\n" -"Există o potrivire" msgstr[1] "" -"\n" -"Sunt %(counter)s potriviri" msgstr[2] "" -"\n" -"Sunt %(counter)s potriviri" #: templates/wagtailadmin/pages/search_results.html:16 msgid "Other searches" @@ -859,24 +862,20 @@ msgid "" "\n" " Page %(page_number)s of %(num_pages)s.\n" " " -msgstr "" -"\n" -"Pagina %(page_number)s din %(num_pages)s." +msgstr "\nPagina %(page_number)s din %(num_pages)s." #: templates/wagtailadmin/pages/search_results.html:54 #, python-format msgid "Sorry, no pages match <em>\"%(query_string)s\"</em>" -msgstr "" -"Ne pare rău, \"<em>%(query_string)s</em>\" nu se potrivește cu nici o pagină" +msgstr "Ne pare rău, \"<em>%(query_string)s</em>\" nu se potrivește cu nici o pagină" #: templates/wagtailadmin/pages/search_results.html:56 msgid "Enter a search term above" msgstr "Introduceți termenii de căutare mai sus" #: templates/wagtailadmin/pages/usage_results.html:24 -#, fuzzy msgid "No pages use" -msgstr "Pagini cu" +msgstr "" #: templates/wagtailadmin/shared/breadcrumb.html:6 msgid "Home" @@ -891,9 +890,8 @@ msgid "February" msgstr "" #: templates/wagtailadmin/shared/datetimepicker_translations.html:8 -#, fuzzy msgid "March" -msgstr "Căutare" +msgstr "" #: templates/wagtailadmin/shared/datetimepicker_translations.html:9 msgid "April" @@ -956,9 +954,16 @@ msgid "Fri" msgstr "" #: templates/wagtailadmin/shared/datetimepicker_translations.html:26 -#, fuzzy msgid "Sat" -msgstr "Status" +msgstr "" + +#: templates/wagtailadmin/shared/header.html:23 +#, python-format +msgid "Used %(useage_count)s time" +msgid_plural "Used %(useage_count)s times" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" #: templates/wagtailadmin/shared/main_nav.html:10 msgid "Account settings" @@ -974,9 +979,8 @@ msgid "Page %(page_num)s of %(total_pages)s." msgstr "Pagina %(page_num)s din %(total_pages)s." #: templates/wagtailadmin/userbar/base.html:4 -#, fuzzy msgid "User bar" -msgstr "Utilizatori" +msgstr "" #: templates/wagtailadmin/userbar/base.html:14 msgid "Go to Wagtail admin interface" @@ -995,123 +999,69 @@ msgid "Your password has been changed successfully!" msgstr "Parola a fost schimbată cu succes!" #: views/account.py:60 -#, fuzzy msgid "Your preferences have been updated successfully!" -msgstr "Parola a fost schimbată cu succes!" +msgstr "" -#: views/pages.py:146 views/pages.py:263 -msgid "This slug is already in use" -msgstr "Această fisă a fost deja folosită" - -#: views/pages.py:160 views/pages.py:277 +#: views/pages.py:169 views/pages.py:286 msgid "Go live date/time must be before expiry date/time" msgstr "" -#: views/pages.py:170 views/pages.py:287 +#: views/pages.py:179 views/pages.py:296 msgid "Expiry date/time must be in the future" msgstr "" -#: views/pages.py:210 views/pages.py:334 views/pages.py:707 +#: views/pages.py:219 views/pages.py:351 views/pages.py:791 msgid "Page '{0}' published." msgstr "Pagina '{0}' a fost publicată." -#: views/pages.py:212 views/pages.py:336 +#: views/pages.py:221 views/pages.py:353 msgid "Page '{0}' submitted for moderation." msgstr "Pagina '{0}' a fost trimisă pentru moderare." -#: views/pages.py:215 +#: views/pages.py:224 msgid "Page '{0}' created." msgstr "Pagina '{0}' a fost creată." -#: views/pages.py:224 -#, fuzzy +#: views/pages.py:233 msgid "The page could not be created due to validation errors" -msgstr "Pagina nu a fost salvată din cauza erorilor de validare." +msgstr "" -#: views/pages.py:339 +#: views/pages.py:356 msgid "Page '{0}' updated." msgstr "Pagina '{0}' a fost actualizată." -#: views/pages.py:348 +#: views/pages.py:365 msgid "The page could not be saved due to validation errors" msgstr "Pagina nu a fost salvată din cauza erorilor de validare." -#: views/pages.py:361 +#: views/pages.py:378 msgid "This page is currently awaiting moderation" msgstr "Această pagină este în moderare" -#: views/pages.py:381 +#: views/pages.py:409 msgid "Page '{0}' deleted." msgstr "Pagina '{0}' a fost ștearsă." -#: views/pages.py:543 +#: views/pages.py:575 msgid "Page '{0}' unpublished." msgstr "Publicare anulată pentru pagina '{0}'." -#: views/pages.py:594 +#: views/pages.py:627 msgid "Page '{0}' moved." msgstr "Pagina '{0}' a fost mutată." -#: views/pages.py:701 views/pages.py:720 views/pages.py:740 +#: views/pages.py:709 +msgid "Page '{0}' and {1} subpages copied." +msgstr "" + +#: views/pages.py:711 +msgid "Page '{0}' copied." +msgstr "" + +#: views/pages.py:785 views/pages.py:804 views/pages.py:824 msgid "The page '{0}' is not currently awaiting moderation." msgstr "Pagina '{0}' nu este în moderare la moment." -#: views/pages.py:726 +#: views/pages.py:810 msgid "Page '{0}' rejected for publication." msgstr "Publicare paginii '{0}' a fost refuzată." - -#~ msgid "Please type a valid time" -#~ msgstr "Introduceți o oră validă" - -#~ msgid "View draft" -#~ msgstr "Vezi ciornă" - -#~ msgid "View live" -#~ msgstr "Vezi în direct" - -#~ msgid "Status:" -#~ msgstr "Stare:" - -#~ msgid "Where do you want to create a %(page_type)s" -#~ msgstr "Unde doriți să creați %(page_type)s" - -#~ msgid "Where do you want to create this" -#~ msgstr "Unde doriți să creați" - -#~ msgid "Create a new page" -#~ msgstr "Crează pagină nouă" - -#~ msgid "" -#~ "Your new page will be saved in the <em>top level</em> of your website. " -#~ "You can move it after saving." -#~ msgstr "" -#~ "Pagina va fi salvată în <em>nivelul de sus</em> al sitului. După care " -#~ "puteți să o mutați." - -#~ msgid "More" -#~ msgstr "Mai mult" - -#~ msgid "Redirects" -#~ msgstr "Redirecționări" - -#~ msgid "Editors Picks" -#~ msgstr "Selecții editoriale" - -#~ msgid "Snippets" -#~ msgstr "Fragmente" - -#~ msgid "" -#~ "Sorry, you do not have access to create a page of type <em>'{0}'</em>." -#~ msgstr "" -#~ "Ne pare rău, dar nu aveți nivelul de acces potrivit pentru a crea pagini " -#~ "de tipul <em>'{0}'</em>." - -#~ msgid "" -#~ "Pages of this type can only be created as children of <em>'{0}'</em>. " -#~ "This new page will be saved there." -#~ msgstr "" -#~ "Paginile de acest tip pot fi create numai ca fiind dependente de " -#~ "<em>'{0}'</em>. Această pagină va fi salvată acolo." - -#~ msgid "The page could not be created due to errors." -#~ msgstr "Pagina nu a fost creată din cauza erorilor." diff --git a/wagtail/wagtailadmin/locale/zh/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/zh/LC_MESSAGES/django.po index 2aaaee23e..7aa5b5fec 100644 --- a/wagtail/wagtailadmin/locale/zh/LC_MESSAGES/django.po +++ b/wagtail/wagtailadmin/locale/zh/LC_MESSAGES/django.po @@ -1,21 +1,20 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:41+0000\n" -"PO-Revision-Date: 2014-03-14 21:12+0000\n" -"Last-Translator: serafeim <serafeim@torchbox.com>\n" -"Language-Team: Chinese (http://www.transifex.com/projects/p/wagtail/language/" -"zh/)\n" -"Language: zh\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Chinese (http://www.transifex.com/projects/p/wagtail/language/zh/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: zh\n" "Plural-Forms: nplurals=1; plural=0;\n" #: edit_handlers.py:627 @@ -26,56 +25,98 @@ msgstr "" msgid "Common page configuration" msgstr "" -#: forms.py:18 +#: forms.py:19 msgid "Search term" msgstr "搜索词" -#: forms.py:42 +#: forms.py:43 msgid "Enter your username" -msgstr "请输入用户名" +msgstr "" -#: forms.py:45 +#: forms.py:46 msgid "Enter password" -msgstr "请输入密码" +msgstr "" -#: forms.py:50 +#: forms.py:51 msgid "Enter your email address to reset your password" msgstr "输入您的电子邮箱来重置您的密码" -#: forms.py:59 +#: forms.py:60 msgid "Please fill your email address." msgstr "请输入你的电子邮件地址。" -#: forms.py:72 +#: forms.py:73 msgid "" "Sorry, you cannot reset your password here as your user account is managed " "by another server." msgstr "对不起,你不能在此够重置你的密码,因为您的账号是由其他服务所管理的。" -#: forms.py:75 +#: forms.py:76 msgid "This email address is not recognised." msgstr "没有找到这个电子邮件地址。" -#: forms.py:82 templates/wagtailadmin/pages/_privacy_indicator.html:13 -#: templates/wagtailadmin/pages/_privacy_indicator.html:18 -#, fuzzy -msgid "Public" -msgstr "发布" +#: forms.py:88 +msgid "New title" +msgstr "" -#: forms.py:83 +#: forms.py:89 +msgid "New slug" +msgstr "" + +#: forms.py:95 +msgid "Copy subpages" +msgstr "" + +#: forms.py:97 +#, python-format +msgid "This will copy %(count)s subpage." +msgid_plural "This will copy %(count)s subpages." +msgstr[0] "" + +#: forms.py:106 +msgid "Publish copied page" +msgstr "" + +#: forms.py:107 +msgid "This page is live. Would you like to publish its copy as well?" +msgstr "" + +#: forms.py:109 +msgid "Publish copies" +msgstr "" + +#: forms.py:111 +#, python-format +msgid "" +"%(count)s of the pages being copied is live. Would you like to publish its " +"copy?" +msgid_plural "" +"%(count)s of the pages being copied are live. Would you like to publish " +"their copies?" +msgstr[0] "" + +#: forms.py:124 views/pages.py:155 views/pages.py:272 +msgid "This slug is already in use" +msgstr "这个唯一的地址已被占用" + +#: forms.py:130 templates/wagtailadmin/pages/_privacy_indicator.html:13 +#: templates/wagtailadmin/pages/_privacy_indicator.html:18 +msgid "Public" +msgstr "" + +#: forms.py:131 msgid "Private, accessible with the following password" msgstr "" -#: forms.py:91 -#, fuzzy +#: forms.py:139 msgid "This field is required." -msgstr "没有找到这个电子邮件地址。" +msgstr "" #: templates/wagtailadmin/base.html:7 templates/wagtailadmin/home.html:4 msgid "Dashboard" msgstr "仪表板" -#: templates/wagtailadmin/base.html:31 +#: templates/wagtailadmin/base.html:27 msgid "Menu" msgstr "菜单" @@ -104,7 +145,7 @@ msgstr "登录Wagtail" #: templates/wagtailadmin/login.html:46 msgid "Forgotten it?" -msgstr "忘记密码?" +msgstr "忘记了?" #: templates/wagtailadmin/account/account.html:4 #: templates/wagtailadmin/account/account.html:6 @@ -120,9 +161,7 @@ msgid "" "Your avatar image is provided by Gravatar and is connected to your email " "address. With a Gravatar account you can set an avatar for any number of " "other email addresses you use." -msgstr "" -"您的头像图片是由Gravatar提供的,并且关联了您的电子邮箱。一个Gravatar账号可以" -"设置多个电子邮箱的头像图片。" +msgstr "您的头像图片是由Gravatar提供的,并且关联了您的电子邮件地址。一个Gravatar账号可以设置多个电子邮件地址的头像图片。" #: templates/wagtailadmin/account/account.html:25 #: templates/wagtailadmin/account/change_password.html:4 @@ -132,7 +171,7 @@ msgstr "修改密码" #: templates/wagtailadmin/account/account.html:29 msgid "Change the password you use to log in." -msgstr "修改登录密码。" +msgstr "修改您用于登录的密码。" #: templates/wagtailadmin/account/account.html:36 msgid "Notification preferences" @@ -223,12 +262,12 @@ msgstr "电子邮件链接" #: templates/wagtailadmin/chooser/_search_form.html:7 #: templates/wagtailadmin/pages/search.html:3 #: templates/wagtailadmin/pages/search.html:16 -#: templatetags/wagtailadmin_tags.py:35 +#: templatetags/wagtailadmin_tags.py:36 msgid "Search" msgstr "搜索" #: templates/wagtailadmin/chooser/_search_results.html:3 -#: templatetags/wagtailadmin_tags.py:34 +#: templatetags/wagtailadmin_tags.py:35 msgid "Explorer" msgstr "浏览" @@ -287,7 +326,7 @@ msgstr "向下移动" #: templates/wagtailadmin/pages/confirm_delete.html:7 #: templates/wagtailadmin/pages/edit.html:45 #: templates/wagtailadmin/pages/list.html:84 -#: templates/wagtailadmin/pages/list.html:202 +#: templates/wagtailadmin/pages/list.html:205 msgid "Delete" msgstr "删除" @@ -482,9 +521,8 @@ msgid "This page has been made private by a parent page." msgstr "" #: templates/wagtailadmin/page_privacy/ancestor_privacy.html:7 -#, fuzzy msgid "You can edit the privacy settings on:" -msgstr "你可以在此编辑这个页面:" +msgstr "" #: templates/wagtailadmin/page_privacy/set_privacy.html:6 msgid "<b>Note:</b> privacy changes apply to all children of this page too." @@ -494,13 +532,9 @@ msgstr "" #, python-format msgid "" "\n" -" Previewing '%(title)s', submitted by %(submitted_by)s on " -"%(submitted_on)s.\n" -" " -msgstr "" -"\n" -" 预览 '%(title)s', %(submitted_by)s 在 %(submitted_on)s 提交.\n" +" Previewing '%(title)s', submitted by %(submitted_by)s on %(submitted_on)s.\n" " " +msgstr "\n 预览 '%(title)s', %(submitted_by)s 在 %(submitted_on)s 提交.\n " #: templates/wagtailadmin/pages/_privacy_indicator.html:9 msgid "Privacy" @@ -546,8 +580,7 @@ msgid "" " " msgid_plural "" "\n" -" This will also delete %(descendant_count)s more " -"subpages.\n" +" This will also delete %(descendant_count)s more subpages.\n" " " msgstr[0] "" @@ -600,7 +633,7 @@ msgstr "停止发布%(title)s" #: templates/wagtailadmin/pages/confirm_unpublish.html:6 #: templates/wagtailadmin/pages/edit.html:42 #: templates/wagtailadmin/pages/list.html:87 -#: templates/wagtailadmin/pages/list.html:205 +#: templates/wagtailadmin/pages/list.html:208 msgid "Unpublish" msgstr "停止发布" @@ -616,6 +649,20 @@ msgstr "是的,停止发布" msgid "Pages using" msgstr "页面在用" +#: templates/wagtailadmin/pages/copy.html:3 +#, python-format +msgid "Copy %(title)s" +msgstr "" + +#: templates/wagtailadmin/pages/copy.html:6 +#: templates/wagtailadmin/pages/list.html:202 +msgid "Copy" +msgstr "" + +#: templates/wagtailadmin/pages/copy.html:26 +msgid "Copy this page" +msgstr "" + #: templates/wagtailadmin/pages/create.html:5 #, python-format msgid "New %(page_type)s" @@ -669,7 +716,7 @@ msgid "Exploring %(title)s" msgstr "浏览%(title)s" #: templates/wagtailadmin/pages/list.html:90 -#: templates/wagtailadmin/pages/list.html:208 +#: templates/wagtailadmin/pages/list.html:211 msgid "Add child page" msgstr "添加子页面" @@ -690,53 +737,50 @@ msgstr "开启子页面顺序" msgid "Drag" msgstr "拖动" -#: templates/wagtailadmin/pages/list.html:234 -#: templates/wagtailadmin/pages/list.html:238 +#: templates/wagtailadmin/pages/list.html:237 +#: templates/wagtailadmin/pages/list.html:241 #, python-format msgid "Explorer subpages of '%(title)s'" msgstr "浏览 '%(title)s' 的子页面" -#: templates/wagtailadmin/pages/list.html:234 -#: templates/wagtailadmin/pages/list.html:238 -#: templates/wagtailadmin/pages/list.html:242 +#: templates/wagtailadmin/pages/list.html:237 +#: templates/wagtailadmin/pages/list.html:241 +#: templates/wagtailadmin/pages/list.html:245 msgid "Explore" msgstr "浏览" -#: templates/wagtailadmin/pages/list.html:242 +#: templates/wagtailadmin/pages/list.html:245 #, python-format -msgid "Explorer child pages of '%(title)s'" -msgstr "浏览 '%(title)s' 的子页面" +msgid "Explore child pages of '%(title)s'" +msgstr "" -#: templates/wagtailadmin/pages/list.html:244 +#: templates/wagtailadmin/pages/list.html:247 #, python-format msgid "Add a child page to '%(title)s'" msgstr "添加子页面至'%(title)s'" -#: templates/wagtailadmin/pages/list.html:244 +#: templates/wagtailadmin/pages/list.html:247 msgid "Add subpage" msgstr "添加子页面" -#: templates/wagtailadmin/pages/list.html:253 +#: templates/wagtailadmin/pages/list.html:256 msgid "No pages have been created." msgstr "没有已保存的页面" -#: templates/wagtailadmin/pages/list.html:253 +#: templates/wagtailadmin/pages/list.html:256 #, python-format msgid "Why not <a href=\"%(add_page_url)s\">add one</a>?" msgstr "为什么不<a href=\"%(add_page_url)s\">添加一页</a>?" -#: templates/wagtailadmin/pages/list.html:260 -#, fuzzy, python-format +#: templates/wagtailadmin/pages/list.html:263 +#, python-format msgid "" "\n" " Page %(page_number)s of %(num_pages)s.\n" " " msgstr "" -"\n" -" 第 %(page_number)s / %(num_pages)s页.\n" -" " -#: templates/wagtailadmin/pages/list.html:266 +#: templates/wagtailadmin/pages/list.html:269 #: templates/wagtailadmin/pages/search_results.html:35 #: templates/wagtailadmin/pages/search_results.html:37 #: templates/wagtailadmin/pages/usage_results.html:13 @@ -746,7 +790,7 @@ msgstr "" msgid "Previous" msgstr "向前" -#: templates/wagtailadmin/pages/list.html:271 +#: templates/wagtailadmin/pages/list.html:274 #: templates/wagtailadmin/pages/search_results.html:44 #: templates/wagtailadmin/pages/search_results.html:46 #: templates/wagtailadmin/pages/usage_results.html:18 @@ -767,7 +811,7 @@ msgid "Select a new parent page for <span>%(title)s</span>" msgstr "为<span>%(title)s</span>选择一个新的根页面" #: templates/wagtailadmin/pages/search_results.html:6 -#, fuzzy, python-format +#, python-format msgid "" "\n" " There is one matching page\n" @@ -777,9 +821,6 @@ msgid_plural "" " There are %(counter)s matching pages\n" " " msgstr[0] "" -"\n" -" 第 %(page_number)s / %(num_pages)s页.\n" -" " #: templates/wagtailadmin/pages/search_results.html:16 msgid "Other searches" @@ -804,10 +845,7 @@ msgid "" "\n" " Page %(page_number)s of %(num_pages)s.\n" " " -msgstr "" -"\n" -" 第 %(page_number)s / %(num_pages)s页.\n" -" " +msgstr "\n 第 %(page_number)s / %(num_pages)s页.\n " #: templates/wagtailadmin/pages/search_results.html:54 #, python-format @@ -819,9 +857,8 @@ msgid "Enter a search term above" msgstr "请在上面输入搜索词" #: templates/wagtailadmin/pages/usage_results.html:24 -#, fuzzy msgid "No pages use" -msgstr "页面在用" +msgstr "" #: templates/wagtailadmin/shared/breadcrumb.html:6 msgid "Home" @@ -836,9 +873,8 @@ msgid "February" msgstr "" #: templates/wagtailadmin/shared/datetimepicker_translations.html:8 -#, fuzzy msgid "March" -msgstr "搜索" +msgstr "" #: templates/wagtailadmin/shared/datetimepicker_translations.html:9 msgid "April" @@ -901,9 +937,14 @@ msgid "Fri" msgstr "" #: templates/wagtailadmin/shared/datetimepicker_translations.html:26 -#, fuzzy msgid "Sat" -msgstr "状态" +msgstr "" + +#: templates/wagtailadmin/shared/header.html:23 +#, python-format +msgid "Used %(useage_count)s time" +msgid_plural "Used %(useage_count)s times" +msgstr[0] "" #: templates/wagtailadmin/shared/main_nav.html:10 msgid "Account settings" @@ -919,9 +960,8 @@ msgid "Page %(page_num)s of %(total_pages)s." msgstr "第%(page_num)s页 共%(total_pages)s页" #: templates/wagtailadmin/userbar/base.html:4 -#, fuzzy msgid "User bar" -msgstr "用户" +msgstr "" #: templates/wagtailadmin/userbar/base.html:14 msgid "Go to Wagtail admin interface" @@ -940,117 +980,69 @@ msgid "Your password has been changed successfully!" msgstr "您的密码已经更改成功。" #: views/account.py:60 -#, fuzzy msgid "Your preferences have been updated successfully!" -msgstr "您的密码已经更改成功。" +msgstr "" -#: views/pages.py:146 views/pages.py:263 -msgid "This slug is already in use" -msgstr "这个唯一的地址已被占用" - -#: views/pages.py:160 views/pages.py:277 +#: views/pages.py:169 views/pages.py:286 msgid "Go live date/time must be before expiry date/time" msgstr "" -#: views/pages.py:170 views/pages.py:287 +#: views/pages.py:179 views/pages.py:296 msgid "Expiry date/time must be in the future" msgstr "" -#: views/pages.py:210 views/pages.py:334 views/pages.py:707 +#: views/pages.py:219 views/pages.py:351 views/pages.py:791 msgid "Page '{0}' published." msgstr "第 '{0}' 页已发布。" -#: views/pages.py:212 views/pages.py:336 +#: views/pages.py:221 views/pages.py:353 msgid "Page '{0}' submitted for moderation." msgstr "第 '{0}' 页已提交审核。" -#: views/pages.py:215 +#: views/pages.py:224 msgid "Page '{0}' created." msgstr "第 '{0}' 页已创建。" -#: views/pages.py:224 -#, fuzzy +#: views/pages.py:233 msgid "The page could not be created due to validation errors" -msgstr "这页无法保存,因为页面发生验证错误" +msgstr "" -#: views/pages.py:339 +#: views/pages.py:356 msgid "Page '{0}' updated." msgstr "第 '{0}' 页已更新" -#: views/pages.py:348 +#: views/pages.py:365 msgid "The page could not be saved due to validation errors" msgstr "这页无法保存,因为页面发生验证错误" -#: views/pages.py:361 +#: views/pages.py:378 msgid "This page is currently awaiting moderation" msgstr "这页正在等待审核" -#: views/pages.py:381 +#: views/pages.py:409 msgid "Page '{0}' deleted." msgstr "第 '{0}' 页已删除" -#: views/pages.py:543 +#: views/pages.py:575 msgid "Page '{0}' unpublished." msgstr "第 '{0}' 页已停止发布" -#: views/pages.py:594 +#: views/pages.py:627 msgid "Page '{0}' moved." msgstr "第 '{0}' 页已移动。" -#: views/pages.py:701 views/pages.py:720 views/pages.py:740 +#: views/pages.py:709 +msgid "Page '{0}' and {1} subpages copied." +msgstr "" + +#: views/pages.py:711 +msgid "Page '{0}' copied." +msgstr "" + +#: views/pages.py:785 views/pages.py:804 views/pages.py:824 msgid "The page '{0}' is not currently awaiting moderation." msgstr "第 '{0}' 页当前不需要等待审核。" -#: views/pages.py:726 +#: views/pages.py:810 msgid "Page '{0}' rejected for publication." msgstr "第 '{0}' 页已被拒绝发布。" - -#~ msgid "Please type a valid time" -#~ msgstr "请输入一个有效的时间" - -#~ msgid "View draft" -#~ msgstr "查看草稿" - -#~ msgid "View live" -#~ msgstr "查看在线版" - -#~ msgid "Status:" -#~ msgstr "状态:" - -#~ msgid "Where do you want to create a %(page_type)s" -#~ msgstr "你想在哪创建 %(page_type)s" - -#~ msgid "Where do you want to create this" -#~ msgstr "你想在哪创建这个" - -#~ msgid "Create a new page" -#~ msgstr "创建一个新页面" - -#~ msgid "" -#~ "Your new page will be saved in the <em>top level</em> of your website. " -#~ "You can move it after saving." -#~ msgstr "你的新页面将会保存到网站的<em>顶级</em> 你 在保存后可以移动." - -#~ msgid "More" -#~ msgstr "更多" - -#~ msgid "Redirects" -#~ msgstr "转向" - -#~ msgid "Editors Picks" -#~ msgstr "编辑手摘" - -#~ msgid "Snippets" -#~ msgstr "片段" - -#~ msgid "" -#~ "Sorry, you do not have access to create a page of type <em>'{0}'</em>." -#~ msgstr "对不起,你没有创建<em>'{0}'</em>类型页面的权限。" - -#~ msgid "" -#~ "Pages of this type can only be created as children of <em>'{0}'</em>. " -#~ "This new page will be saved there." -#~ msgstr "这一类的页面只能创建为<em>'{0}'</em>的子页面。这一页将会保存在那。" - -#~ msgid "The page could not be created due to errors." -#~ msgstr "这一页因有错误发生而无法创建。" diff --git a/wagtail/wagtailadmin/locale/zh_TW/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/zh_TW/LC_MESSAGES/django.po index 6dba63056..95b8e929d 100644 --- a/wagtail/wagtailadmin/locale/zh_TW/LC_MESSAGES/django.po +++ b/wagtail/wagtailadmin/locale/zh_TW/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:41+0000\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" "PO-Revision-Date: 2014-05-01 12:09+0000\n" "Last-Translator: wdv4758h <wdv4758h@gmail.com>\n" "Language-Team: \n" @@ -25,47 +25,94 @@ msgstr "" msgid "Common page configuration" msgstr "一般頁面設定" -#: forms.py:18 +#: forms.py:19 msgid "Search term" msgstr "搜尋關鍵字" -#: forms.py:42 +#: forms.py:43 msgid "Enter your username" msgstr "請輸入您的帳號" -#: forms.py:45 +#: forms.py:46 msgid "Enter password" msgstr "請輸入密碼" -#: forms.py:50 +#: forms.py:51 msgid "Enter your email address to reset your password" msgstr "請輸入您的電子信箱來重新設定密碼" -#: forms.py:59 +#: forms.py:60 msgid "Please fill your email address." msgstr "請輸入您的電子信箱" -#: forms.py:72 +#: forms.py:73 msgid "" "Sorry, you cannot reset your password here as your user account is managed " "by another server." msgstr "對不起,您不能在此重新設定您的密碼,因為您的帳號是由其他伺服器所管理。" -#: forms.py:75 +#: forms.py:76 msgid "This email address is not recognised." msgstr "找不到這個電子信箱。" -#: forms.py:82 templates/wagtailadmin/pages/_privacy_indicator.html:13 +#: forms.py:88 +#, fuzzy +msgid "New title" +msgstr "移動 %(title)s" + +#: forms.py:89 +msgid "New slug" +msgstr "" + +#: forms.py:95 +#, fuzzy +msgid "Copy subpages" +msgstr "新增子頁面" + +#: forms.py:97 +#, python-format +msgid "This will copy %(count)s subpage." +msgid_plural "This will copy %(count)s subpages." +msgstr[0] "" + +#: forms.py:106 +msgid "Publish copied page" +msgstr "" + +#: forms.py:107 +msgid "This page is live. Would you like to publish its copy as well?" +msgstr "" + +#: forms.py:109 +#, fuzzy +msgid "Publish copies" +msgstr "發佈" + +#: forms.py:111 +#, python-format +msgid "" +"%(count)s of the pages being copied is live. Would you like to publish its " +"copy?" +msgid_plural "" +"%(count)s of the pages being copied are live. Would you like to publish " +"their copies?" +msgstr[0] "" + +#: forms.py:124 views/pages.py:155 views/pages.py:272 +msgid "This slug is already in use" +msgstr "這個地址已被使用" + +#: forms.py:130 templates/wagtailadmin/pages/_privacy_indicator.html:13 #: templates/wagtailadmin/pages/_privacy_indicator.html:18 #, fuzzy msgid "Public" msgstr "發佈" -#: forms.py:83 +#: forms.py:131 msgid "Private, accessible with the following password" msgstr "" -#: forms.py:91 +#: forms.py:139 #, fuzzy msgid "This field is required." msgstr "找不到這個電子信箱。" @@ -74,7 +121,7 @@ msgstr "找不到這個電子信箱。" msgid "Dashboard" msgstr "Dashboard" -#: templates/wagtailadmin/base.html:31 +#: templates/wagtailadmin/base.html:27 msgid "Menu" msgstr "選單" @@ -222,12 +269,12 @@ msgstr "電子信箱連結" #: templates/wagtailadmin/chooser/_search_form.html:7 #: templates/wagtailadmin/pages/search.html:3 #: templates/wagtailadmin/pages/search.html:16 -#: templatetags/wagtailadmin_tags.py:35 +#: templatetags/wagtailadmin_tags.py:36 msgid "Search" msgstr "搜尋" #: templates/wagtailadmin/chooser/_search_results.html:3 -#: templatetags/wagtailadmin_tags.py:34 +#: templatetags/wagtailadmin_tags.py:35 msgid "Explorer" msgstr "瀏覽" @@ -291,7 +338,7 @@ msgstr "往下移動" #: templates/wagtailadmin/pages/confirm_delete.html:7 #: templates/wagtailadmin/pages/edit.html:45 #: templates/wagtailadmin/pages/list.html:84 -#: templates/wagtailadmin/pages/list.html:202 +#: templates/wagtailadmin/pages/list.html:205 msgid "Delete" msgstr "刪除" @@ -632,7 +679,7 @@ msgstr "取消發佈 %(title)s" #: templates/wagtailadmin/pages/confirm_unpublish.html:6 #: templates/wagtailadmin/pages/edit.html:42 #: templates/wagtailadmin/pages/list.html:87 -#: templates/wagtailadmin/pages/list.html:205 +#: templates/wagtailadmin/pages/list.html:208 msgid "Unpublish" msgstr "取消發佈" @@ -648,6 +695,21 @@ msgstr "是的,取消發佈" msgid "Pages using" msgstr "頁面正在使用" +#: templates/wagtailadmin/pages/copy.html:3 +#, fuzzy, python-format +msgid "Copy %(title)s" +msgstr "移動 %(title)s" + +#: templates/wagtailadmin/pages/copy.html:6 +#: templates/wagtailadmin/pages/list.html:202 +msgid "Copy" +msgstr "" + +#: templates/wagtailadmin/pages/copy.html:26 +#, fuzzy +msgid "Copy this page" +msgstr "編輯這個頁面" + #: templates/wagtailadmin/pages/create.html:5 #, python-format msgid "New %(page_type)s" @@ -701,7 +763,7 @@ msgid "Exploring %(title)s" msgstr "瀏覽%(title)s" #: templates/wagtailadmin/pages/list.html:90 -#: templates/wagtailadmin/pages/list.html:208 +#: templates/wagtailadmin/pages/list.html:211 msgid "Add child page" msgstr "新增子頁面" @@ -722,42 +784,42 @@ msgstr "開啟子頁面排序" msgid "Drag" msgstr "拖曳" -#: templates/wagtailadmin/pages/list.html:234 -#: templates/wagtailadmin/pages/list.html:238 +#: templates/wagtailadmin/pages/list.html:237 +#: templates/wagtailadmin/pages/list.html:241 #, python-format msgid "Explorer subpages of '%(title)s'" msgstr "瀏覽 '%(title)s' 的子頁面" -#: templates/wagtailadmin/pages/list.html:234 -#: templates/wagtailadmin/pages/list.html:238 -#: templates/wagtailadmin/pages/list.html:242 +#: templates/wagtailadmin/pages/list.html:237 +#: templates/wagtailadmin/pages/list.html:241 +#: templates/wagtailadmin/pages/list.html:245 msgid "Explore" msgstr "瀏覽" -#: templates/wagtailadmin/pages/list.html:242 -#, python-format -msgid "Explorer child pages of '%(title)s'" +#: templates/wagtailadmin/pages/list.html:245 +#, fuzzy, python-format +msgid "Explore child pages of '%(title)s'" msgstr "瀏覽 '%(title)s' 的子頁面" -#: templates/wagtailadmin/pages/list.html:244 +#: templates/wagtailadmin/pages/list.html:247 #, python-format msgid "Add a child page to '%(title)s'" msgstr "新增子頁面至 '%(title)s'" -#: templates/wagtailadmin/pages/list.html:244 +#: templates/wagtailadmin/pages/list.html:247 msgid "Add subpage" msgstr "新增子頁面" -#: templates/wagtailadmin/pages/list.html:253 +#: templates/wagtailadmin/pages/list.html:256 msgid "No pages have been created." msgstr "沒有已儲存的頁面" -#: templates/wagtailadmin/pages/list.html:253 +#: templates/wagtailadmin/pages/list.html:256 #, python-format msgid "Why not <a href=\"%(add_page_url)s\">add one</a>?" msgstr "為什麼不 <a href=\"%(add_page_url)s\"> 新增一個頁面呢</a>?" -#: templates/wagtailadmin/pages/list.html:260 +#: templates/wagtailadmin/pages/list.html:263 #, fuzzy, python-format msgid "" "\n" @@ -768,7 +830,7 @@ msgstr "" " 第 %(page_number)s / %(num_pages)s頁。\n" " " -#: templates/wagtailadmin/pages/list.html:266 +#: templates/wagtailadmin/pages/list.html:269 #: templates/wagtailadmin/pages/search_results.html:35 #: templates/wagtailadmin/pages/search_results.html:37 #: templates/wagtailadmin/pages/usage_results.html:13 @@ -778,7 +840,7 @@ msgstr "" msgid "Previous" msgstr "往前" -#: templates/wagtailadmin/pages/list.html:271 +#: templates/wagtailadmin/pages/list.html:274 #: templates/wagtailadmin/pages/search_results.html:44 #: templates/wagtailadmin/pages/search_results.html:46 #: templates/wagtailadmin/pages/usage_results.html:18 @@ -939,6 +1001,12 @@ msgstr "" msgid "Sat" msgstr "狀態" +#: templates/wagtailadmin/shared/header.html:23 +#, python-format +msgid "Used %(useage_count)s time" +msgid_plural "Used %(useage_count)s times" +msgstr[0] "" + #: templates/wagtailadmin/shared/main_nav.html:10 msgid "Account settings" msgstr "帳號設定" @@ -978,64 +1046,70 @@ msgstr "您的密碼已經更改成功。" msgid "Your preferences have been updated successfully!" msgstr "您的密碼已經更改成功。" -#: views/pages.py:146 views/pages.py:263 -msgid "This slug is already in use" -msgstr "這個地址已被使用" - -#: views/pages.py:160 views/pages.py:277 +#: views/pages.py:169 views/pages.py:286 msgid "Go live date/time must be before expiry date/time" msgstr "" -#: views/pages.py:170 views/pages.py:287 +#: views/pages.py:179 views/pages.py:296 msgid "Expiry date/time must be in the future" msgstr "" -#: views/pages.py:210 views/pages.py:334 views/pages.py:707 +#: views/pages.py:219 views/pages.py:351 views/pages.py:791 msgid "Page '{0}' published." msgstr "第 '{0}' 頁已發佈。" -#: views/pages.py:212 views/pages.py:336 +#: views/pages.py:221 views/pages.py:353 msgid "Page '{0}' submitted for moderation." msgstr "第 '{0}' 頁已送審。" -#: views/pages.py:215 +#: views/pages.py:224 msgid "Page '{0}' created." msgstr "第 '{0}' 頁已建立。" -#: views/pages.py:224 +#: views/pages.py:233 #, fuzzy msgid "The page could not be created due to validation errors" msgstr "這頁面因有驗證錯誤而無法儲存。" -#: views/pages.py:339 +#: views/pages.py:356 msgid "Page '{0}' updated." msgstr "第 '{0}' 頁已更新" -#: views/pages.py:348 +#: views/pages.py:365 msgid "The page could not be saved due to validation errors" msgstr "這頁面因有驗證錯誤而無法儲存。" -#: views/pages.py:361 +#: views/pages.py:378 msgid "This page is currently awaiting moderation" msgstr "這頁正等待審核" -#: views/pages.py:381 +#: views/pages.py:409 msgid "Page '{0}' deleted." msgstr "第 '{0}' 頁已刪除" -#: views/pages.py:543 +#: views/pages.py:575 msgid "Page '{0}' unpublished." msgstr "第 '{0}' 頁已取消發佈" -#: views/pages.py:594 +#: views/pages.py:627 msgid "Page '{0}' moved." msgstr "第 '{0}' 頁已移動。" -#: views/pages.py:701 views/pages.py:720 views/pages.py:740 +#: views/pages.py:709 +#, fuzzy +msgid "Page '{0}' and {1} subpages copied." +msgstr "第 '{0}' 頁已更新" + +#: views/pages.py:711 +#, fuzzy +msgid "Page '{0}' copied." +msgstr "第 '{0}' 頁已移動。" + +#: views/pages.py:785 views/pages.py:804 views/pages.py:824 msgid "The page '{0}' is not currently awaiting moderation." msgstr "第 '{0}' 頁目前不需要等待審核。" -#: views/pages.py:726 +#: views/pages.py:810 msgid "Page '{0}' rejected for publication." msgstr "第 '{0}' 頁已被拒絕發佈。" diff --git a/wagtail/wagtailadmin/migrations/0001_create_admin_access_permissions.py b/wagtail/wagtailadmin/south_migrations/0001_create_admin_access_permissions.py similarity index 100% rename from wagtail/wagtailadmin/migrations/0001_create_admin_access_permissions.py rename to wagtail/wagtailadmin/south_migrations/0001_create_admin_access_permissions.py diff --git a/wagtail/wagtailembeds/migrations/__init__.py b/wagtail/wagtailadmin/south_migrations/__init__.py similarity index 100% rename from wagtail/wagtailembeds/migrations/__init__.py rename to wagtail/wagtailadmin/south_migrations/__init__.py diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/core.js b/wagtail/wagtailadmin/static/wagtailadmin/js/core.js index 51056d446..5729e75fe 100644 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/core.js +++ b/wagtail/wagtailadmin/static/wagtailadmin/js/core.js @@ -12,7 +12,7 @@ $(function(){ $('body').addClass('ready'); // Enable toggle to open/close nav - $('#nav-toggle').click(function(){ + $(document).on('click', '#nav-toggle', function(){ $('body').toggleClass('nav-open'); if(!$('body').hasClass('nav-open')){ $('body').addClass('nav-closed'); @@ -22,20 +22,38 @@ $(function(){ }); $('.nav-main a').on('click', function(){ - $(this).closest('li').toggleClass('active'); - - if($(this).closest('li').find('.submenu')){ + if($(this).closest('li').find('.submenu').length){ + $(this).closest('li').toggleClass('active'); $('.nav-wrapper').toggleClass('submenu-active') return false } + }) - // Enable swishy section navigation menu - $('.explorer').addClass('dl-menuwrapper').dlmenu({ - animationClasses : { - classin : 'dl-animate-in-2', - classout : 'dl-animate-out-2' + // Dynamically load menu on request. + $(document).on('click', '.dl-trigger', function(){ + var $this = $(this); + var $explorer = $('#explorer'); + + $this.addClass('icon-spinner'); + + if(!$explorer.children().length){ + $explorer.load(window.explorer_menu_url, function() { + $this.removeClass('icon-spinner'); + + $explorer.addClass('dl-menuwrapper').dlmenu({ + animationClasses : { + classin : 'dl-animate-in-2', + classout : 'dl-animate-out-2' + } + }); + $explorer.dlmenu('openMenu'); + }); + }else{ + $explorer.dlmenu('openMenu'); } + + return false; }); // Resize nav to fit height of window. This is an unimportant bell/whistle to make it look nice @@ -44,9 +62,6 @@ $(function(){ $('.nav-main').each(function(){ var thisHeight = $(this).height(); var footerHeight = $('.footer', $(this)).height(); - - // $(this).css({'height':thisHeight - footerHeight, 'overflow-y':'scroll'}); - // $('> ul', $(this)).height(thisHeight) }); }; fitNav(); @@ -95,20 +110,11 @@ $(function(){ } }); - /* Bulk-selection */ - $(document).on('click', 'thead .bulk', function(){ - $(this).closest('table').find('tbody .bulk input').each(function(){ - $(this).prop('checked', !$(this).prop('checked')); - }); - }); - - $('#menu-search input').bind('focus', function(){ - $('#menu-search').addClass('focussed'); - }).bind('blur', function(){ - $('#menu-search').removeClass('focussed'); - }); - $('#menu-search').bind('focus click', function(){ - $(this).addClass('focussed'); + /* Dropzones */ + $('.drop-zone').on('dragover', function(){ + $(this).addClass('hovered'); + }).on('dragleave dragend drop', function(){ + $(this).removeClass('hovered'); }); /* Header search behaviour */ diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/page-editor.js b/wagtail/wagtailadmin/static/wagtailadmin/js/page-editor.js index a5dd67eeb..d900d8d0c 100644 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/page-editor.js +++ b/wagtail/wagtailadmin/static/wagtailadmin/js/page-editor.js @@ -98,7 +98,7 @@ function initTimeChooser(id) { function initDateTimeChooser(id) { if (window.dateTimePickerTranslations) { $('#' + id).datetimepicker({ - format: 'Y-m-d H:i', + format: 'Y-m-d H:i:s', scrollInput:false, i18n: { lang: window.dateTimePickerTranslations @@ -106,8 +106,8 @@ function initDateTimeChooser(id) { language: 'lang' }); } else { - $('#' + id).datetimepicker({ - format: 'Y-m-d H:i', + $('#' + id).datetimepicker({ + format: 'Y-m-d H:i:s', }); } } diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/jquery.ba-throttle-debounce.min.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/jquery.ba-throttle-debounce.min.js new file mode 100644 index 000000000..07205508e --- /dev/null +++ b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/jquery.ba-throttle-debounce.min.js @@ -0,0 +1,9 @@ +/* + * jQuery throttle / debounce - v1.1 - 3/7/2010 + * http://benalman.com/projects/jquery-throttle-debounce-plugin/ + * + * Copyright (c) 2010 "Cowboy" Ben Alman + * Dual licensed under the MIT and GPL licenses. + * http://benalman.com/about/license/ + */ +(function(b,c){var $=b.jQuery||b.Cowboy||(b.Cowboy={}),a;$.throttle=a=function(e,f,j,i){var h,d=0;if(typeof f!=="boolean"){i=j;j=f;f=c}function g(){var o=this,m=+new Date()-d,n=arguments;function l(){d=+new Date();j.apply(o,n)}function k(){h=c}if(i&&!h){l()}h&&clearTimeout(h);if(i===c&&m>e){l()}else{if(f!==true){h=setTimeout(i?k:l,i===c?e-m:e)}}}if($.guid){g.guid=j.guid=j.guid||$.guid++}return g};$.debounce=function(d,e,f){return f===c?a(d,e,false):a(d,f,e!==false)}})(this); \ No newline at end of file diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/modernizr-2.6.2.min.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/modernizr-2.6.2.min.js index abfe536b1..7eb2abe75 100644 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/modernizr-2.6.2.min.js +++ b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/modernizr-2.6.2.min.js @@ -1,4 +1,4 @@ -/* Modernizr 2.6.2 (Custom Build) | MIT & BSD - * Build: http://modernizr.com/download/#-fontface-backgroundsize-borderimage-borderradius-boxshadow-flexbox-hsla-multiplebgs-opacity-rgba-textshadow-cssanimations-csscolumns-generatedcontent-cssgradients-cssreflections-csstransforms-csstransforms3d-csstransitions-applicationcache-canvas-canvastext-draganddrop-hashchange-history-audio-video-indexeddb-input-inputtypes-localstorage-postmessage-sessionstorage-websockets-websqldatabase-webworkers-geolocation-inlinesvg-smil-svg-svgclippaths-touch-webgl-shiv-mq-cssclasses-addtest-prefixed-teststyles-testprop-testallprops-hasevent-prefixes-domprefixes-load +/* Modernizr 2.8.3 (Custom Build) | MIT & BSD + * Build: http://modernizr.com/download/#-cssanimations-cssreflections-csstransforms-csstransforms3d-csstransitions-draganddrop-shiv-mq-cssclasses-addtest-prefixed-teststyles-testprop-testallprops-hasevent-prefixes-domprefixes-file_api-load */ -;window.Modernizr=function(a,b,c){function D(a){j.cssText=a}function E(a,b){return D(n.join(a+";")+(b||""))}function F(a,b){return typeof a===b}function G(a,b){return!!~(""+a).indexOf(b)}function H(a,b){for(var d in a){var e=a[d];if(!G(e,"-")&&j[e]!==c)return b=="pfx"?e:!0}return!1}function I(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:F(f,"function")?f.bind(d||b):f}return!1}function J(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+p.join(d+" ")+d).split(" ");return F(b,"string")||F(b,"undefined")?H(e,b):(e=(a+" "+q.join(d+" ")+d).split(" "),I(e,b,c))}function K(){e.input=function(c){for(var d=0,e=c.length;d<e;d++)u[c[d]]=c[d]in k;return u.list&&(u.list=!!b.createElement("datalist")&&!!a.HTMLDataListElement),u}("autocomplete autofocus list placeholder max min multiple pattern required step".split(" ")),e.inputtypes=function(a){for(var d=0,e,f,h,i=a.length;d<i;d++)k.setAttribute("type",f=a[d]),e=k.type!=="text",e&&(k.value=l,k.style.cssText="position:absolute;visibility:hidden;",/^range$/.test(f)&&k.style.WebkitAppearance!==c?(g.appendChild(k),h=b.defaultView,e=h.getComputedStyle&&h.getComputedStyle(k,null).WebkitAppearance!=="textfield"&&k.offsetHeight!==0,g.removeChild(k)):/^(search|tel)$/.test(f)||(/^(url|email)$/.test(f)?e=k.checkValidity&&k.checkValidity()===!1:e=k.value!=l)),t[a[d]]=!!e;return t}("search tel url email datetime date month week time datetime-local number range color".split(" "))}var d="2.6.2",e={},f=!0,g=b.documentElement,h="modernizr",i=b.createElement(h),j=i.style,k=b.createElement("input"),l=":)",m={}.toString,n=" -webkit- -moz- -o- -ms- ".split(" "),o="Webkit Moz O ms",p=o.split(" "),q=o.toLowerCase().split(" "),r={svg:"http://www.w3.org/2000/svg"},s={},t={},u={},v=[],w=v.slice,x,y=function(a,c,d,e){var f,i,j,k,l=b.createElement("div"),m=b.body,n=m||b.createElement("body");if(parseInt(d,10))while(d--)j=b.createElement("div"),j.id=e?e[d]:h+(d+1),l.appendChild(j);return f=["­",'<style id="s',h,'">',a,"</style>"].join(""),l.id=h,(m?l:n).innerHTML+=f,n.appendChild(l),m||(n.style.background="",n.style.overflow="hidden",k=g.style.overflow,g.style.overflow="hidden",g.appendChild(n)),i=c(l,a),m?l.parentNode.removeChild(l):(n.parentNode.removeChild(n),g.style.overflow=k),!!i},z=function(b){var c=a.matchMedia||a.msMatchMedia;if(c)return c(b).matches;var d;return y("@media "+b+" { #"+h+" { position: absolute; } }",function(b){d=(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle)["position"]=="absolute"}),d},A=function(){function d(d,e){e=e||b.createElement(a[d]||"div"),d="on"+d;var f=d in e;return f||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(d,""),f=F(e[d],"function"),F(e[d],"undefined")||(e[d]=c),e.removeAttribute(d))),e=null,f}var a={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return d}(),B={}.hasOwnProperty,C;!F(B,"undefined")&&!F(B.call,"undefined")?C=function(a,b){return B.call(a,b)}:C=function(a,b){return b in a&&F(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=w.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(w.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(w.call(arguments)))};return e}),s.flexbox=function(){return J("flexWrap")},s.canvas=function(){var a=b.createElement("canvas");return!!a.getContext&&!!a.getContext("2d")},s.canvastext=function(){return!!e.canvas&&!!F(b.createElement("canvas").getContext("2d").fillText,"function")},s.webgl=function(){return!!a.WebGLRenderingContext},s.touch=function(){var c;return"ontouchstart"in a||a.DocumentTouch&&b instanceof DocumentTouch?c=!0:y(["@media (",n.join("touch-enabled),("),h,")","{#modernizr{top:9px;position:absolute}}"].join(""),function(a){c=a.offsetTop===9}),c},s.geolocation=function(){return"geolocation"in navigator},s.postmessage=function(){return!!a.postMessage},s.websqldatabase=function(){return!!a.openDatabase},s.indexedDB=function(){return!!J("indexedDB",a)},s.hashchange=function(){return A("hashchange",a)&&(b.documentMode===c||b.documentMode>7)},s.history=function(){return!!a.history&&!!history.pushState},s.draganddrop=function(){var a=b.createElement("div");return"draggable"in a||"ondragstart"in a&&"ondrop"in a},s.websockets=function(){return"WebSocket"in a||"MozWebSocket"in a},s.rgba=function(){return D("background-color:rgba(150,255,150,.5)"),G(j.backgroundColor,"rgba")},s.hsla=function(){return D("background-color:hsla(120,40%,100%,.5)"),G(j.backgroundColor,"rgba")||G(j.backgroundColor,"hsla")},s.multiplebgs=function(){return D("background:url(https://),url(https://),red url(https://)"),/(url\s*\(.*?){3}/.test(j.background)},s.backgroundsize=function(){return J("backgroundSize")},s.borderimage=function(){return J("borderImage")},s.borderradius=function(){return J("borderRadius")},s.boxshadow=function(){return J("boxShadow")},s.textshadow=function(){return b.createElement("div").style.textShadow===""},s.opacity=function(){return E("opacity:.55"),/^0.55$/.test(j.opacity)},s.cssanimations=function(){return J("animationName")},s.csscolumns=function(){return J("columnCount")},s.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";return D((a+"-webkit- ".split(" ").join(b+a)+n.join(c+a)).slice(0,-a.length)),G(j.backgroundImage,"gradient")},s.cssreflections=function(){return J("boxReflect")},s.csstransforms=function(){return!!J("transform")},s.csstransforms3d=function(){var a=!!J("perspective");return a&&"webkitPerspective"in g.style&&y("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(b,c){a=b.offsetLeft===9&&b.offsetHeight===3}),a},s.csstransitions=function(){return J("transition")},s.fontface=function(){var a;return y('@font-face {font-family:"font";src:url("https://")}',function(c,d){var e=b.getElementById("smodernizr"),f=e.sheet||e.styleSheet,g=f?f.cssRules&&f.cssRules[0]?f.cssRules[0].cssText:f.cssText||"":"";a=/src/i.test(g)&&g.indexOf(d.split(" ")[0])===0}),a},s.generatedcontent=function(){var a;return y(["#",h,"{font:0/0 a}#",h,':after{content:"',l,'";visibility:hidden;font:3px/1 a}'].join(""),function(b){a=b.offsetHeight>=3}),a},s.video=function(){var a=b.createElement("video"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"').replace(/^no$/,""),c.h264=a.canPlayType('video/mp4; codecs="avc1.42E01E"').replace(/^no$/,""),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,"")}catch(d){}return c},s.audio=function(){var a=b.createElement("audio"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),c.mp3=a.canPlayType("audio/mpeg;").replace(/^no$/,""),c.wav=a.canPlayType('audio/wav; codecs="1"').replace(/^no$/,""),c.m4a=(a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;")).replace(/^no$/,"")}catch(d){}return c},s.localstorage=function(){try{return localStorage.setItem(h,h),localStorage.removeItem(h),!0}catch(a){return!1}},s.sessionstorage=function(){try{return sessionStorage.setItem(h,h),sessionStorage.removeItem(h),!0}catch(a){return!1}},s.webworkers=function(){return!!a.Worker},s.applicationcache=function(){return!!a.applicationCache},s.svg=function(){return!!b.createElementNS&&!!b.createElementNS(r.svg,"svg").createSVGRect},s.inlinesvg=function(){var a=b.createElement("div");return a.innerHTML="<svg/>",(a.firstChild&&a.firstChild.namespaceURI)==r.svg},s.smil=function(){return!!b.createElementNS&&/SVGAnimate/.test(m.call(b.createElementNS(r.svg,"animate")))},s.svgclippaths=function(){return!!b.createElementNS&&/SVGClipPath/.test(m.call(b.createElementNS(r.svg,"clipPath")))};for(var L in s)C(s,L)&&(x=L.toLowerCase(),e[x]=s[L](),v.push((e[x]?"":"no-")+x));return e.input||K(),e.addTest=function(a,b){if(typeof a=="object")for(var d in a)C(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},D(""),i=k=null,function(a,b){function k(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function l(){var a=r.elements;return typeof a=="string"?a.split(" "):a}function m(a){var b=i[a[g]];return b||(b={},h++,a[g]=h,i[h]=b),b}function n(a,c,f){c||(c=b);if(j)return c.createElement(a);f||(f=m(c));var g;return f.cache[a]?g=f.cache[a].cloneNode():e.test(a)?g=(f.cache[a]=f.createElem(a)).cloneNode():g=f.createElem(a),g.canHaveChildren&&!d.test(a)?f.frag.appendChild(g):g}function o(a,c){a||(a=b);if(j)return a.createDocumentFragment();c=c||m(a);var d=c.frag.cloneNode(),e=0,f=l(),g=f.length;for(;e<g;e++)d.createElement(f[e]);return d}function p(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return r.shivMethods?n(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+l().join().replace(/\w+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(r,b.frag)}function q(a){a||(a=b);var c=m(a);return r.shivCSS&&!f&&!c.hasCSS&&(c.hasCSS=!!k(a,"article,aside,figcaption,figure,footer,header,hgroup,nav,section{display:block}mark{background:#FF0;color:#000}")),j||p(a,c),a}var c=a.html5||{},d=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,e=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,f,g="_html5shiv",h=0,i={},j;(function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",f="hidden"in a,j=a.childNodes.length==1||function(){b.createElement("a");var a=b.createDocumentFragment();return typeof a.cloneNode=="undefined"||typeof a.createDocumentFragment=="undefined"||typeof a.createElement=="undefined"}()}catch(c){f=!0,j=!0}})();var r={elements:c.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",shivCSS:c.shivCSS!==!1,supportsUnknownElements:j,shivMethods:c.shivMethods!==!1,type:"default",shivDocument:q,createElement:n,createDocumentFragment:o};a.html5=r,q(b)}(this,b),e._version=d,e._prefixes=n,e._domPrefixes=q,e._cssomPrefixes=p,e.mq=z,e.hasEvent=A,e.testProp=function(a){return H([a])},e.testAllProps=J,e.testStyles=y,e.prefixed=function(a,b,c){return b?J(a,b,c):J(a,"pfx")},g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+v.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f<d;f++)g=a[f].split("="),(e=z[g.shift()])&&(c=e(c,g));for(f=0;f<b;f++)c=x[f](c);return c}function g(a,e,f,g,h){var i=b(a),j=i.autoCallback;i.url.split(".").pop().split("?").shift(),i.bypass||(e&&(e=d(e)?e:e[a]||e[g]||e[a.split("/").pop().split("?")[0]]),i.instead?i.instead(a,e,f,g,h):(y[i.url]?i.noexec=!0:y[i.url]=1,f.load(i.url,i.forceCSS||!i.forceJS&&"css"==i.url.split(".").pop().split("?").shift()?"c":c,i.noexec,i.attrs,i.timeout),(d(e)||d(j))&&f.load(function(){k(),e&&e(i.origUrl,h,g),j&&j(i.origUrl,h,g),y[i.url]=2})))}function h(a,b){function c(a,c){if(a){if(e(a))c||(j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}),g(a,j,b,0,h);else if(Object(a)===a)for(n in m=function(){var b=0,c;for(c in a)a.hasOwnProperty(c)&&b++;return b}(),a)a.hasOwnProperty(n)&&(!c&&!--m&&(d(j)?j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}:j[n]=function(a){return function(){var b=[].slice.call(arguments);a&&a.apply(this,b),l()}}(k[n])),g(a[n],j,b,n,h))}else!c&&l()}var h=!!a.test,i=a.load||a.both,j=a.callback||f,k=j,l=a.complete||f,m,n;c(h?a.yep:a.nope,!!i),i&&c(i)}var i,j,l=this.yepnope.loader;if(e(a))g(a,0,l,0);else if(w(a))for(i=0;i<a.length;i++)j=a[i],e(j)?g(j,0,l,0):w(j)?B(j):Object(j)===j&&h(j,l);else Object(a)===a&&h(a,l)},B.addPrefix=function(a,b){z[a]=b},B.addFilter=function(a){x.push(a)},B.errorTimeout=1e4,null==b.readyState&&b.addEventListener&&(b.readyState="loading",b.addEventListener("DOMContentLoaded",A=function(){b.removeEventListener("DOMContentLoaded",A,0),b.readyState="complete"},0)),a.yepnope=k(),a.yepnope.executeStack=h,a.yepnope.injectJs=function(a,c,d,e,i,j){var k=b.createElement("script"),l,o,e=e||B.errorTimeout;k.src=a;for(o in d)k.setAttribute(o,d[o]);c=j?h:c||f,k.onreadystatechange=k.onload=function(){!l&&g(k.readyState)&&(l=1,c(),k.onload=k.onreadystatechange=null)},m(function(){l||(l=1,c(1))},e),i?k.onload():n.parentNode.insertBefore(k,n)},a.yepnope.injectCss=function(a,c,d,e,g,i){var e=b.createElement("link"),j,c=i?h:c||f;e.href=a,e.rel="stylesheet",e.type="text/css";for(j in d)e.setAttribute(j,d[j]);g||(n.parentNode.insertBefore(e,n),m(c,0))}}(this,document),Modernizr.load=function(){yepnope.apply(window,[].slice.call(arguments,0))}; \ No newline at end of file +;window.Modernizr=function(a,b,c){function B(a){j.cssText=a}function C(a,b){return B(m.join(a+";")+(b||""))}function D(a,b){return typeof a===b}function E(a,b){return!!~(""+a).indexOf(b)}function F(a,b){for(var d in a){var e=a[d];if(!E(e,"-")&&j[e]!==c)return b=="pfx"?e:!0}return!1}function G(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:D(f,"function")?f.bind(d||b):f}return!1}function H(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+o.join(d+" ")+d).split(" ");return D(b,"string")||D(b,"undefined")?F(e,b):(e=(a+" "+p.join(d+" ")+d).split(" "),G(e,b,c))}var d="2.8.3",e={},f=!0,g=b.documentElement,h="modernizr",i=b.createElement(h),j=i.style,k,l={}.toString,m=" -webkit- -moz- -o- -ms- ".split(" "),n="Webkit Moz O ms",o=n.split(" "),p=n.toLowerCase().split(" "),q={},r={},s={},t=[],u=t.slice,v,w=function(a,c,d,e){var f,i,j,k,l=b.createElement("div"),m=b.body,n=m||b.createElement("body");if(parseInt(d,10))while(d--)j=b.createElement("div"),j.id=e?e[d]:h+(d+1),l.appendChild(j);return f=["­",'<style id="s',h,'">',a,"</style>"].join(""),l.id=h,(m?l:n).innerHTML+=f,n.appendChild(l),m||(n.style.background="",n.style.overflow="hidden",k=g.style.overflow,g.style.overflow="hidden",g.appendChild(n)),i=c(l,a),m?l.parentNode.removeChild(l):(n.parentNode.removeChild(n),g.style.overflow=k),!!i},x=function(b){var c=a.matchMedia||a.msMatchMedia;if(c)return c(b)&&c(b).matches||!1;var d;return w("@media "+b+" { #"+h+" { position: absolute; } }",function(b){d=(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle)["position"]=="absolute"}),d},y=function(){function d(d,e){e=e||b.createElement(a[d]||"div"),d="on"+d;var f=d in e;return f||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(d,""),f=D(e[d],"function"),D(e[d],"undefined")||(e[d]=c),e.removeAttribute(d))),e=null,f}var a={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return d}(),z={}.hasOwnProperty,A;!D(z,"undefined")&&!D(z.call,"undefined")?A=function(a,b){return z.call(a,b)}:A=function(a,b){return b in a&&D(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=u.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(u.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(u.call(arguments)))};return e}),q.draganddrop=function(){var a=b.createElement("div");return"draggable"in a||"ondragstart"in a&&"ondrop"in a},q.cssanimations=function(){return H("animationName")},q.cssreflections=function(){return H("boxReflect")},q.csstransforms=function(){return!!H("transform")},q.csstransforms3d=function(){var a=!!H("perspective");return a&&"webkitPerspective"in g.style&&w("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(b,c){a=b.offsetLeft===9&&b.offsetHeight===3}),a},q.csstransitions=function(){return H("transition")};for(var I in q)A(q,I)&&(v=I.toLowerCase(),e[v]=q[I](),t.push((e[v]?"":"no-")+v));return e.addTest=function(a,b){if(typeof a=="object")for(var d in a)A(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},B(""),i=k=null,function(a,b){function l(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function m(){var a=s.elements;return typeof a=="string"?a.split(" "):a}function n(a){var b=j[a[h]];return b||(b={},i++,a[h]=i,j[i]=b),b}function o(a,c,d){c||(c=b);if(k)return c.createElement(a);d||(d=n(c));var g;return d.cache[a]?g=d.cache[a].cloneNode():f.test(a)?g=(d.cache[a]=d.createElem(a)).cloneNode():g=d.createElem(a),g.canHaveChildren&&!e.test(a)&&!g.tagUrn?d.frag.appendChild(g):g}function p(a,c){a||(a=b);if(k)return a.createDocumentFragment();c=c||n(a);var d=c.frag.cloneNode(),e=0,f=m(),g=f.length;for(;e<g;e++)d.createElement(f[e]);return d}function q(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return s.shivMethods?o(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+m().join().replace(/[\w\-]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(s,b.frag)}function r(a){a||(a=b);var c=n(a);return s.shivCSS&&!g&&!c.hasCSS&&(c.hasCSS=!!l(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),k||q(a,c),a}var c="3.7.0",d=a.html5||{},e=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,f=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,g,h="_html5shiv",i=0,j={},k;(function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",g="hidden"in a,k=a.childNodes.length==1||function(){b.createElement("a");var a=b.createDocumentFragment();return typeof a.cloneNode=="undefined"||typeof a.createDocumentFragment=="undefined"||typeof a.createElement=="undefined"}()}catch(c){g=!0,k=!0}})();var s={elements:d.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",version:c,shivCSS:d.shivCSS!==!1,supportsUnknownElements:k,shivMethods:d.shivMethods!==!1,type:"default",shivDocument:r,createElement:o,createDocumentFragment:p};a.html5=s,r(b)}(this,b),e._version=d,e._prefixes=m,e._domPrefixes=p,e._cssomPrefixes=o,e.mq=x,e.hasEvent=y,e.testProp=function(a){return F([a])},e.testAllProps=H,e.testStyles=w,e.prefixed=function(a,b,c){return b?H(a,b,c):H(a,"pfx")},g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+t.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f<d;f++)g=a[f].split("="),(e=z[g.shift()])&&(c=e(c,g));for(f=0;f<b;f++)c=x[f](c);return c}function g(a,e,f,g,h){var i=b(a),j=i.autoCallback;i.url.split(".").pop().split("?").shift(),i.bypass||(e&&(e=d(e)?e:e[a]||e[g]||e[a.split("/").pop().split("?")[0]]),i.instead?i.instead(a,e,f,g,h):(y[i.url]?i.noexec=!0:y[i.url]=1,f.load(i.url,i.forceCSS||!i.forceJS&&"css"==i.url.split(".").pop().split("?").shift()?"c":c,i.noexec,i.attrs,i.timeout),(d(e)||d(j))&&f.load(function(){k(),e&&e(i.origUrl,h,g),j&&j(i.origUrl,h,g),y[i.url]=2})))}function h(a,b){function c(a,c){if(a){if(e(a))c||(j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}),g(a,j,b,0,h);else if(Object(a)===a)for(n in m=function(){var b=0,c;for(c in a)a.hasOwnProperty(c)&&b++;return b}(),a)a.hasOwnProperty(n)&&(!c&&!--m&&(d(j)?j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}:j[n]=function(a){return function(){var b=[].slice.call(arguments);a&&a.apply(this,b),l()}}(k[n])),g(a[n],j,b,n,h))}else!c&&l()}var h=!!a.test,i=a.load||a.both,j=a.callback||f,k=j,l=a.complete||f,m,n;c(h?a.yep:a.nope,!!i),i&&c(i)}var i,j,l=this.yepnope.loader;if(e(a))g(a,0,l,0);else if(w(a))for(i=0;i<a.length;i++)j=a[i],e(j)?g(j,0,l,0):w(j)?B(j):Object(j)===j&&h(j,l);else Object(a)===a&&h(a,l)},B.addPrefix=function(a,b){z[a]=b},B.addFilter=function(a){x.push(a)},B.errorTimeout=1e4,null==b.readyState&&b.addEventListener&&(b.readyState="loading",b.addEventListener("DOMContentLoaded",A=function(){b.removeEventListener("DOMContentLoaded",A,0),b.readyState="complete"},0)),a.yepnope=k(),a.yepnope.executeStack=h,a.yepnope.injectJs=function(a,c,d,e,i,j){var k=b.createElement("script"),l,o,e=e||B.errorTimeout;k.src=a;for(o in d)k.setAttribute(o,d[o]);c=j?h:c||f,k.onreadystatechange=k.onload=function(){!l&&g(k.readyState)&&(l=1,c(),k.onload=k.onreadystatechange=null)},m(function(){l||(l=1,c(1))},e),i?k.onload():n.parentNode.insertBefore(k,n)},a.yepnope.injectCss=function(a,c,d,e,g,i){var e=b.createElement("link"),j,c=i?h:c||f;e.href=a,e.rel="stylesheet",e.type="text/css";for(j in d)e.setAttribute(j,d[j]);g||(n.parentNode.insertBefore(e,n),m(c,0))}}(this,document),Modernizr.load=function(){yepnope.apply(window,[].slice.call(arguments,0))},Modernizr.addTest("filereader",function(){return!!(window.File&&window.FileList&&window.FileReader)}); \ No newline at end of file diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/formatters.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/formatters.scss index b6f5ca03c..8f428225a 100644 --- a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/formatters.scss +++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/formatters.scss @@ -121,8 +121,8 @@ color:lighten($color-grey-2,30%); -webkit-font-smoothing: auto; font-size:0.80em; - margin:0 0.5em 0.5em; - background:white url( "#{$static-root}bg-dark-diag.svg"); + margin:0 0.5em; + background:white url("#{$static-root}bg-dark-diag.svg"); &.primary{ color:$color-grey-2; @@ -194,12 +194,62 @@ a.tag:hover{ } } +/* Loading mask: overlays a certain area with a loading spinner and a faded out cover to prevent interaction */ +.loading-mask{ + &.loading{ + position:relative; + + &:before, &:after{ + position:absolute; + display:block; + } + + &:before{ + content:""; + top:-5px;left:-5px;bottom:-5px;right:-5px; + z-index:1; + background-color:rgba(255,255,255,0.5); + } + &:after{ + font-size:30px; + width:30px; + line-height:30px; + left:50%; + top:50%; + margin:-15px 0 0 -15px; + font-family:wagtail; + animation: spin 0.5s infinite linear; + -webkit-animation: spin 0.5s infinite linear; + -moz-animation: spin 0.5s infinite linear; + content:"1"; + z-index:2; + color:$color-teal; + } + } +} + + +/* general image style */ +img{ + max-width:100%; + height:auto; + border: 3px solid $color-grey-4; + +} /* make a block-level element inline */ .inline{ display:inline; } +.inline-block{ + display:inline-block; +} + +.block{ + display:block; +} + .unlist{ @include unlist(); } @@ -207,4 +257,13 @@ a.tag:hover{ /* utility class to allow things to be scrollable if their contents can't wrap more nicely */ .overflow{ overflow:auto; -} \ No newline at end of file +} + +.status-msg{ + &.success{ + color:$color-green; + } + &.failure{ + color:$color-red; + } +} diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/forms.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/forms.scss index d71ff66da..534e4ec8d 100644 --- a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/forms.scss +++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/forms.scss @@ -72,6 +72,7 @@ input, textarea, select, .richtext, .tagit{ &:disabled, &[disabled], &:disabled:hover, &[disabled]:hover{ background-color:inherit; cursor:not-allowed; + color:$color-grey-4; } } @@ -172,7 +173,7 @@ input[type=checkbox]:before{ height:20px; background-color:white; border:1px solid $color-grey-4; - color:$color-grey-4; + color:white; } input[type=checkbox]:checked:before{ color:$color-teal; @@ -316,6 +317,7 @@ input[type=submit], input[type=reset], input[type=button], button{ > li{ @include row(); position:relative; + overflow:hidden; background-color:white; padding:1em 10em 1em 1.5em; /* 10em padding leaves room for controls */ margin-bottom:1em; @@ -532,6 +534,7 @@ li.focused > .help{ .field-row{ @include clearfix(); + /* negative margin the bottom so it doesn't add too much space */ margin-bottom:-1.2em; } @@ -726,6 +729,25 @@ ul.tagit li.tagit-choice-editable{ } } +/* file drop zones */ +.drop-zone{ + @include border-radius(5px); + border:2px dashed $color-grey-4; + padding:$mobile-nice-padding; + background-color:$color-grey-5; + margin-bottom:1em; + text-align:center; + + .drop-zone-help{ + border:0; + } + &.hovered{ + border-color:$color-teal; + background-color:$color-input-focus; + } +} + + /* Transitions */ fieldset, input, textarea, select{ @include transition(background-color 0.2s ease); @@ -819,14 +841,31 @@ input[type=submit], input[type=reset], input[type=button], .button, button{ @include row(); } + .field-content{ + @include column(10,0); + } + .field-col{ float:left; padding-left:0 !important; - } - .field-content{ - @include column(10); - padding-right:0; - padding-left:0; - } + /* anything less than 4 columns or greater than 6 is impractical */ + &.col4{ + label{ + @include column(2,0,4); + } + .field-content{ + @include column(2, $padding, 4); + } + } + &.col6{ + label{ + @include column(2,0,6); + } + .field-content{ + @include column(4, $padding, 6); + } + } + } + } \ No newline at end of file diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/listing.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/listing.scss index 537465083..e0f161fac 100644 --- a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/listing.scss +++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/listing.scss @@ -5,6 +5,9 @@ ul.listing{ .listing{ margin-bottom:2em; + color:lighten($color-text-base, 20%); + font-size:0.95em; + ul{ @include unlist(); } @@ -27,7 +30,8 @@ ul.listing{ } thead{ - color: $color-grey-2; + font-size:1.1em; + color: $color-text-base; border-bottom:1px solid $color-grey-4; th{ @@ -51,22 +55,6 @@ ul.listing{ right:0; } } - - /* - .dropdown{ - padding:0; - } - .dropdown-toggle{ - display:block; - padding:1.5em; - } - .dropdown:hover, - .dropdown.open{ - @include box-shadow(0px 0px 3px 0 rgba(0,0,0,0.2)); - background-color:white; - margin-left:-$grid-gutter-width * 2; - } - */ } &.full-width td:first-child, @@ -87,32 +75,56 @@ ul.listing{ tbody{ border-bottom:1px dashed $color-input-border; - } - tbody tr{ - border-top:1px dashed $color-input-border; - &:first-child{ + + + tr{ border-top:1px dashed $color-input-border; + + &:first-child{ + border-top:1px dashed $color-input-border; + } } - } + &.full-width tbody{ border:0; } &.full-width tbody tr:hover{ background-color:#FDFDFD; } - &.chooser tr.can-choose a{ - @include transition(none); - } - &.chooser tr.can-choose:hover{ - background-color:$color-teal; - color:white; - a,a:hover{ - color:white; + &.chooser { + tbody .title a{ + display:block; + @include transition(none); } - .status-tag{ - border-color:white; + tbody tr:hover{ + background-color:$color-teal; + color:white; + + .title a, .title a:hover{ + color:white; + } + .status-tag{ + border-color:white; + } + } + tbody tr.disabled td{ + opacity:0.25; + } + tbody tr.disabled td.children{ + opacity:1; + } + tbody tr.disabled:hover{ + background-color:inherit; + color:inherit; + + .title{ + cursor:not-allowed; + } + .status-tag{ + border-color:inherit; + } } } @@ -120,22 +132,10 @@ ul.listing{ font-size:1em; } - .divider{ - text-transform:uppercase; - font-size:0.8em; - background-color:$color-grey-3; - td{ - - padding-top:0.5em; - padding-bottom:0.5em; - } - } - &.full-width .divider td{ padding-left:20px; } - /* specific columns */ .bulk{ padding-right:0; @@ -159,9 +159,9 @@ ul.listing{ h2{ text-transform:none; margin:0; - font-size:1.1em; - font-weight:700; - color:$color-grey-2; + font-size:1.15em; + font-weight:600; + color:darken($color-grey-2, 10%); line-height:1.5em; a{ @@ -197,6 +197,7 @@ ul.listing{ color:$color-teal; border-color:$color-grey-3; background:white; + font-size:0.84em; /* 0.01em difference to regular small buttons */ &:hover{ border-color:$color-teal; @@ -213,27 +214,30 @@ ul.listing{ .children, .no-children{ padding:0 !important; - border-left:1px dashed $color-input-border; + &:hover{ background-color:$color-grey-5; } - } - .children a, - .no-children a{ - display:block; - padding:2em 0; + + a{ + display:block; + padding:2em 0; + } } .children a{ color:$color-teal; display:block; + &:before{ font-size:3rem; } } + .no-children a{ color:$color-grey-3; display:block; + &:before{ font-size:1.5rem; } @@ -241,6 +245,7 @@ ul.listing{ color:$color-teal; } } + &.small .children a:before{ font-size:30px; } @@ -273,7 +278,6 @@ ul.listing{ border:1px dashed $color-input-border; border-width:1px 0; - td{ display:none; @@ -297,20 +301,12 @@ ul.listing{ } } - td.children:hover{ - background-color:$color-teal; - - a:before{ - color:white; - } - } - table .no-results-message{ padding-left:20px; } - .inactive h2{ - opacity:0.5; + .unpublished h2{ + opacity:0.7; } .index { @@ -319,6 +315,7 @@ ul.listing{ .title h2{ font-size:1.2em; opacity:1; + a{ @include transition(opacity 0.2s ease); } @@ -379,7 +376,7 @@ table.listing{ h2{ color:white; font-size:1.8em; - font-weight:600; + font-weight:500; a:hover{ color:white; @@ -526,15 +523,27 @@ table.listing{ } .no-children { border-color:transparent; + + a{ + opacity:0; + } } - .no-children a{ - opacity:0; + tr:hover .no-children a{ + opacity:1; } - .no-children:hover{ - border-color:$color-input-border; - a{opacity:1;} + tr:hover .children{ + background-color:$color-teal; + + a:before{ + color:white; + } } + td.children:hover{ + background-color:$color-teal-darker; + } + + table .no-results-message{ padding-left:50px; } diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/messages.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/messages.scss index f5c32d8c5..7a05d31f8 100644 --- a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/messages.scss +++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/messages.scss @@ -1,3 +1,10 @@ +/* + Messages are specific to Django's "Messaging" system which adds messages into the session, + for display on the next page visited. These appear as an animated banner at the top of the page. + + For inline help text, see typography.scss +*/ + .messages{ position:relative; z-index:5; diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/progressbar.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/progressbar.scss new file mode 100644 index 000000000..472b55859 --- /dev/null +++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/progressbar.scss @@ -0,0 +1,25 @@ +.progress{ + @include border-radius(1.2em); + background-color:$color-teal-dark; + border:1px solid $color-teal; + opacity:0; + + &.active{ + opacity:1; + @include transition(opacity 0.3s ease); + } + + .bar{ + @include border-radius(1.5em); + @include transition(width 0.3s ease); + overflow:hidden; + box-sizing:border-box; + text-align:right; + line-height:1.2em; + color:white; + font-size:0.85em; + background-color:$color-teal; + height:1.2em; + padding-right:1em; + } +} \ No newline at end of file diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/typography.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/typography.scss new file mode 100644 index 000000000..1b7e36324 --- /dev/null +++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/typography.scss @@ -0,0 +1,111 @@ +h1,h2,h3,h4,h5,h6{ + font-weight:normal; +} + +h1{ + line-height:1.3em; + font-size:1.5em; + text-transform:uppercase; + color:$color-grey-1; + font-weight:600; + + span{ + text-transform:none; + font-weight:300; + } + + .homepage &{ + text-transform:none; + } +} +h2{ + text-transform:uppercase; + font-size:1.3em; + font-family:Open Sans; + font-weight:600; + color:$color-grey-2; + + .page-explorer &{ + text-transform:none; + } +} +a{ + outline:none; + color:$color-link; + text-decoration:none; + + &:hover{ + color:$color-link-hover; + } +} + +code{ + @include box-shadow(inset 0px 0px 4px 0px rgba(0, 0, 0, 0.2)); + background-color:$color-fieldset-hover; + padding:2px 5px; +} + +kbd{ + @include border-radius(3px); + font-family:Open Sans, Arial, sans-serif; + border:1px solid $color-grey-2; + border-color:rgba(0,0,0,0.2); + padding:0.3em 0.5em; +} + +/* Help text formatters */ + +.help-block{ + float:left; + padding:1em; + margin:1em 0; + clear:both; + + p{ + margin-top:0; + + &:last-child{ + margin-bottom:0; + } + } +} + .help-info, .help-warning, .help-critical{ + @include border-radius(3px); + padding-left:3.5em; + position:relative; + + &:before{ + font-family:wagtail; + position:absolute; + left:1em; + top:0.7em; + content:"?"; + font-size:1.4em; + } + } + .help-info{ + background-color:lighten($color-blue, 30%); + + &:before{ + color:$color-blue; + } + } + + .help-warning{ + background-color:lighten($color-orange, 30%); + + &:before{ + color:$color-orange; + content:"!"; + } + } + + .help-critical{ + background-color:lighten($color-red, 40%); + + &:before{ + color:$color-red; + content:"!"; + } + } + diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/core.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/core.scss index 4768ef9e4..6591ec262 100644 --- a/wagtail/wagtailadmin/static/wagtailadmin/scss/core.scss +++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/core.scss @@ -4,6 +4,7 @@ @import "components/explorer.scss"; @import "components/icons.scss"; +@import "components/typography.scss"; @import "components/tabs.scss"; @import "components/dropdowns.scss"; @import "components/modals.scss"; @@ -12,6 +13,7 @@ @import "components/messages.scss"; @import "components/formatters.scss"; @import "components/header.scss"; +@import "components/progressbar.scss"; @import "components/datetimepicker.scss"; @import "fonts.scss"; @@ -35,67 +37,6 @@ body{ } } -h1,h2,h3,h4,h5,h6{ - font-weight:normal; -} - -h1{ - line-height:1.3em; - font-size:1.5em; - text-transform:uppercase; - color:$color-grey-1; - font-weight:600; - - span{ - text-transform:none; - font-weight:300; - } - - .homepage &{ - text-transform:none; - } -} -h2{ - text-transform:uppercase; - font-size:1.3em; - font-family:Open Sans; - font-weight:600; - color:$color-grey-2; - - .page-explorer &{ - text-transform:none; - } -} -a{ - outline:none; - color:$color-link; - text-decoration:none; - - &:hover{ - color:$color-link-hover; - } -} - -code{ - @include box-shadow(inset 0px 0px 4px 0px rgba(0, 0, 0, 0.2)); - background-color:$color-fieldset-hover; - padding:2px 5px; -} - -kbd{ - @include border-radius(3px); - font-family:Open Sans, Arial, sans-serif; - border:1px solid $color-grey-2; - border-color:rgba(0,0,0,0.2); - padding:0.3em 0.5em; -} - -img{ - max-width:100%; - height:auto; - border: 3px solid $color-grey-4; -} - .browsermessage{ background-color:$color-red; color:white; @@ -164,6 +105,8 @@ img{ .nav-main{ $selected-highlight:darken($color-grey-1, 10%); + $submenu-color:darken($color-grey-1, 5%); + top: 43px; bottom: 0px; @@ -184,12 +127,12 @@ img{ border-bottom:1px solid rgba(100,100,100,0.2); position:relative; - &.selected, &.active{ + &.selected{ background:$selected-highlight; } - a:before{ - font-size:1.2rem; + &.active{ + background:$submenu-color; } .menu-snippets &.menu-snippets, @@ -210,42 +153,49 @@ img{ a { -webkit-font-smoothing: auto; text-decoration:none; - text-transform:uppercase; display: block; color: #AAA; - padding: 0.9em 1.2em; + padding: 0.8em 1.7em; position:relative; - font-size:0.85em; - font-weight:400; + font-size:0.9em; white-space:nowrap; text-shadow:-1px -1px 0px rgba(0,0,0,0.3); &:before{ + font-size:1rem; vertical-align:-20%; margin-right:0.5em; } &:hover{ + background-color:rgba(100,100,100,0.15); color:white; } - } - li.active > a{ - color:$color-orange; + /* only really used for spinners */ + &:after{ + font-size:1.5em; + margin:0; + position:absolute; + right:0.5em; + top:0.5em; + margin-top:0.15em; + } + } + li.active > a:hover{ + background-color:transparent; } - li.active .submenu{ @include transition(width 0.2s ease); } - .submenu{ - @include transition(width 0.2s ease); - background:$selected-highlight; + .submenu{ + background:$submenu-color; position:fixed; height:100%; width:0; padding:0; top:0; - left:150px; + left:$menu-width; overflow:auto; max-height:100%; border-right:1px solid rgba(0,0,0,0.1); @@ -253,11 +203,12 @@ img{ h2,ul{ float:right; - width:150px; + width:$menu-width; } h2{ padding:0.2em 0; + font-size:1.2em; font-weight:500; text-transform:none; text-align:center; @@ -269,15 +220,15 @@ img{ text-align:center; margin:0 0 0.2em 0; width:100%; - opacity:0.2; + opacity:0.15; } } a{ text-transform:none; - padding:1em 0; + white-space:normal; - padding-left:3em; + padding: 0.9em 0 0.9em 3.5em; &:before{ margin-left:-1.5em; @@ -287,11 +238,15 @@ img{ background-color:rgba(100,100,100,0.2); } } + + li{ + border:0; + } } li.active .submenu{ - width:150px; - padding:0 1.5em 1.5em 1.5em; + width:$menu-width; + padding:0 0 1.5em 0; } li .submenu{ width:0; diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/variables.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/variables.scss index e27817175..c016d50c3 100644 --- a/wagtail/wagtailadmin/static/wagtailadmin/scss/variables.scss +++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/variables.scss @@ -27,6 +27,7 @@ $breakpoint-desktop-larger: 100em; /* 1600px */ $color-teal: #43b1b0; $color-teal-darker: darken($color-teal, 10%); $color-teal-dark: #246060; +$color-blue: #71b2d4; $color-red: #cd3238; $color-orange:#e9b04d; $color-green: #189370; @@ -61,4 +62,4 @@ $color-text-input: $color-grey-1; /* misc sizing */ $thumbnail-width: 130px; -$menu-width: 150px; \ No newline at end of file +$menu-width: 180px; \ No newline at end of file diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/admin_base.html b/wagtail/wagtailadmin/templates/wagtailadmin/admin_base.html index 0cae459a2..1c26a8d14 100644 --- a/wagtail/wagtailadmin/templates/wagtailadmin/admin_base.html +++ b/wagtail/wagtailadmin/templates/wagtailadmin/admin_base.html @@ -22,6 +22,9 @@ <script src="{{ STATIC_URL }}wagtailadmin/js/vendor/bootstrap-tab.js"></script> <script src="{{ STATIC_URL }}wagtailadmin/js/vendor/jquery.dlmenu.js"></script> <script src="{{ STATIC_URL }}wagtailadmin/js/core.js"></script> + <script> + window.explorer_menu_url = "{% url 'wagtailadmin_explorer_nav' %}"; + </script> {% endcompress %} {% block extra_js %}{% endblock %} diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/base.html b/wagtail/wagtailadmin/templates/wagtailadmin/base.html index ef6f9d57a..c7a89def7 100644 --- a/wagtail/wagtailadmin/templates/wagtailadmin/base.html +++ b/wagtail/wagtailadmin/templates/wagtailadmin/base.html @@ -8,11 +8,7 @@ {% main_nav %} </div> - <nav class="explorer"> - <ul class="dl-menu"> - {% explorer_nav %} - </ul> - </nav> + <nav id="explorer" class="explorer"></nav> </div> <div class="content-wrapper"> diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/pages/copy.html b/wagtail/wagtailadmin/templates/wagtailadmin/pages/copy.html new file mode 100644 index 000000000..1a645c16f --- /dev/null +++ b/wagtail/wagtailadmin/templates/wagtailadmin/pages/copy.html @@ -0,0 +1,29 @@ +{% extends "wagtailadmin/base.html" %} +{% load i18n %} +{% block titletag %}{% blocktrans with title=page.title %}Copy {{ title }}{% endblocktrans %}{% endblock %} +{% block bodyclass %}menu-explorer{% endblock %} +{% block content %} + {% trans "Copy" as copy_str %} + {% include "wagtailadmin/shared/header.html" with title=copy_str subtitle=page.title icon="doc-empty-inverse" %} + + <div class="nice-padding"> + <form action="{% url 'wagtailadmin_pages_copy' page.id %}" method="POST"> + {% csrf_token %} + + <ul class="fields"> + {% include "wagtailadmin/shared/field_as_li.html" with field=form.new_title %} + {% include "wagtailadmin/shared/field_as_li.html" with field=form.new_slug %} + + {% if form.copy_subpages %} + {% include "wagtailadmin/shared/field_as_li.html" with field=form.copy_subpages %} + {% endif %} + + {% if form.publish_copies %} + {% include "wagtailadmin/shared/field_as_li.html" with field=form.publish_copies %} + {% endif %} + </ul> + + <input type="submit" value="{% trans 'Copy this page' %}"> + </form> + </div> +{% endblock %} diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/pages/list.html b/wagtail/wagtailadmin/templates/wagtailadmin/pages/list.html index 3c40d05f0..698aadeb8 100644 --- a/wagtail/wagtailadmin/templates/wagtailadmin/pages/list.html +++ b/wagtail/wagtailadmin/templates/wagtailadmin/pages/list.html @@ -23,12 +23,12 @@ {% endif %} <th class="type">{% trans 'Type' %}</th> <th class="status">{% trans 'Status' %}</th> - <th class="children"></th> + <th></th> </tr> {% endif %} {% if parent_page %} {% page_permissions parent_page as parent_page_perms %} - <tr class="index {% if not parent_page.live %} inactive{% endif %} {% if moving or choosing %}{% if parent_page.can_choose %}can-choose{% endif %}{% endif %}"> + <tr class="index {% if not parent_page.live %} unpublished{% endif %} {% if moving or choosing %}{% if parent_page.can_choose %}can-disabled{% endif %}{% endif %}"> <td class="title" {% if orderable %}colspan="2"{% endif %}> {% if moving %} <h2> @@ -145,7 +145,7 @@ {% trans 'Status' %} {% endif %} </th> - <th class="children"></th> + <th></th> </tr> {% endif %} </thead> @@ -153,7 +153,7 @@ {% if pages %} {% for page in pages %} {% page_permissions page as page_perms %} - <tr {% if ordering == "ord" %}id="page_{{ page.id }}" data-page-title="{{ page.title }}"{% endif %} class="{% if not page.live %} inactive{% endif %}{% if moving and page.can_choose %} can-choose{% elif choosing and page.can_choose %} can-choose{% else %} cant-choose{% endif %}"> + <tr {% if ordering == "ord" %}id="page_{{ page.id }}" data-page-title="{{ page.title }}"{% endif %} class="{% if not page.live %} unpublished{% endif %}{% if moving or choosing %}{% if not page.can_choose %}disabled{% endif %}{% endif %}"> {% if orderable %} <td class="ord">{% if ordering == "ord" %}<div class="handle icon icon-grip text-replace">{% trans 'Drag' %}</div>{% endif %}</td> {% endif %} @@ -198,6 +198,9 @@ {% if page_perms.can_move and 'move' not in hide_actions|default:'' %} <li><a href="{% url 'wagtailadmin_pages_move' page.id %}" class="button button-small">{% trans 'Move' %}</a></li> {% endif %} + {% if parent_page_perms.can_add_subpage and 'copy' not in hide_actions|default:'' %} + <li><a href="{% url 'wagtailadmin_pages_copy' page.id %}" class="button button-small">{% trans 'Copy' %}</a></li> + {% endif %} {% if page_perms.can_delete and 'delete' not in hide_actions|default:'' %} <li><a href="{% url 'wagtailadmin_pages_delete' page.id %}" class="button button-small">{% trans 'Delete' %}</a></li> {% endif %} @@ -239,7 +242,7 @@ {% endif %} {% else %} {% if page.is_navigable %} - <a href="{% url 'wagtailadmin_explore' page.id %}" class="icon text-replace icon-arrow-right" title="{% blocktrans with title=page.title %}Explorer child pages of '{{ title }}'{% endblocktrans %}">{% trans "Explore" %}</a> + <a href="{% url 'wagtailadmin_explore' page.id %}" class="icon text-replace icon-arrow-right" title="{% blocktrans with title=page.title %}Explore child pages of '{{ title }}'{% endblocktrans %}">{% trans "Explore" %}</a> {% elif page_perms.can_add_subpage %} <a href="{% url 'wagtailadmin_pages_add_subpage' page.id %}" class="icon text-replace icon-plus-inverse" title="{% blocktrans with title=page.title %}Add a child page to '{{ title }}'{% endblocktrans %}">{% trans 'Add subpage' %}</a> {% endif %} diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/shared/explorer_nav.html b/wagtail/wagtailadmin/templates/wagtailadmin/shared/explorer_nav.html index 4d2cce712..5c46f217c 100644 --- a/wagtail/wagtailadmin/templates/wagtailadmin/shared/explorer_nav.html +++ b/wagtail/wagtailadmin/templates/wagtailadmin/shared/explorer_nav.html @@ -1,13 +1,5 @@ {% load wagtailadmin_tags %} -{% for page, children in nodes %} - <li {% if children %}class="has-children"{% endif %}> - <a href="{% url 'wagtailadmin_explore' page.id %}" class="icon icon-folder-open-inverse">{{ page.title }}</a> - {% if children %} - <div class="children icon icon-arrow-right"></div> - <ul class="dl-submenu"> - {% explorer_subnav children %} - </ul> - {% endif %} - </li> -{% endfor %} +<ul class="dl-menu"> + {% include "wagtailadmin/shared/explorer_nav_child.html" %} +</ul> \ No newline at end of file diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/shared/explorer_nav_child.html b/wagtail/wagtailadmin/templates/wagtailadmin/shared/explorer_nav_child.html new file mode 100644 index 000000000..c2d011540 --- /dev/null +++ b/wagtail/wagtailadmin/templates/wagtailadmin/shared/explorer_nav_child.html @@ -0,0 +1,13 @@ +{% load wagtailadmin_tags %} + +{% for page, children in nodes %} + <li {% if children %}class="has-children"{% endif %}> + <a href="{% url 'wagtailadmin_explore' page.id %}" class="icon icon-folder-open-inverse">{{ page.title }}</a> + {% if children %} + <div class="children icon icon-arrow-right"></div> + <ul class="dl-submenu"> + {% explorer_subnav children %} + </ul> + {% endif %} + </li> +{% endfor %} \ No newline at end of file diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/shared/header.html b/wagtail/wagtailadmin/templates/wagtailadmin/shared/header.html index be391989d..fa790960d 100644 --- a/wagtail/wagtailadmin/templates/wagtailadmin/shared/header.html +++ b/wagtail/wagtailadmin/templates/wagtailadmin/shared/header.html @@ -1,3 +1,4 @@ +{% load i18n wagtailadmin_tags %} <header class="nice-padding {% if merged %}merged{% endif %} {% if tabbed %}tab-merged{% endif %} {% if search_form %}hasform{% endif %}"> <div class="row"> <div class="left"> @@ -16,6 +17,12 @@ {% endif %} </div> <div class="right"> + {% usage_count_enabled as uc_enabled %} + {% if uc_enabled and usage_object %} + <div class="usagecount"> + <a href="{{ usage_object.usage_url }}">{% blocktrans count useage_count=usage_object.get_usage.count %}Used {{ useage_count }} time{% plural %}Used {{ useage_count }} times{% endblocktrans %}</a> + </div> + {% endif %} {% if add_link %} <div class="addbutton"> <a href="{% url add_link %}" class="button bicolor icon icon-plus">{{ add_text }}</a> @@ -23,4 +30,4 @@ {% endif %} </div> </div> -</header> \ No newline at end of file +</header> diff --git a/wagtail/wagtailadmin/templatetags/wagtailadmin_tags.py b/wagtail/wagtailadmin/templatetags/wagtailadmin_tags.py index 2cb53e750..a08211591 100644 --- a/wagtail/wagtailadmin/templatetags/wagtailadmin_tags.py +++ b/wagtail/wagtailadmin/templatetags/wagtailadmin_tags.py @@ -1,5 +1,6 @@ from __future__ import unicode_literals +from django.conf import settings from django import template from django.core import urlresolvers from django.utils.translation import ugettext_lazy as _ @@ -21,7 +22,7 @@ def explorer_nav(): } -@register.inclusion_tag('wagtailadmin/shared/explorer_nav.html') +@register.inclusion_tag('wagtailadmin/shared/explorer_nav_child.html') def explorer_subnav(nodes): return { 'nodes': nodes @@ -31,7 +32,7 @@ def explorer_subnav(nodes): @register.inclusion_tag('wagtailadmin/shared/main_nav.html', takes_context=True) def main_nav(context): menu_items = [ - MenuItem(_('Explorer'), '#', classnames='icon icon-folder-open-inverse dl-trigger', order=100), + MenuItem(_('Explorer'), urlresolvers.reverse('wagtailadmin_explore_root'), classnames='icon icon-folder-open-inverse dl-trigger', order=100), MenuItem(_('Search'), urlresolvers.reverse('wagtailadmin_pages_search'), classnames='icon icon-search', order=200), ] @@ -121,3 +122,8 @@ def hook_output(hook_name): """ snippets = [fn() for fn in hooks.get_hooks(hook_name)] return ''.join(snippets) + + +@register.assignment_tag +def usage_count_enabled(): + return getattr(settings, 'WAGTAIL_USAGE_COUNT_ENABLED', False) diff --git a/wagtail/wagtailadmin/templatetags/wagtailuserbar.py b/wagtail/wagtailadmin/templatetags/wagtailuserbar.py index 3f1bf2951..c7861185e 100644 --- a/wagtail/wagtailadmin/templatetags/wagtailuserbar.py +++ b/wagtail/wagtailadmin/templatetags/wagtailuserbar.py @@ -3,16 +3,20 @@ import warnings from django import template from django.template.loader import render_to_string +from wagtail.utils.deprecation import RemovedInWagtail06Warning + from wagtail.wagtailcore.models import Page + register = template.Library() + @register.simple_tag(takes_context=True) def wagtailuserbar(context, css_path=None): if css_path is not None: warnings.warn( "Passing a CSS path to the wagtailuserbar tag is no longer required; use {% wagtailuserbar %} instead", - DeprecationWarning + RemovedInWagtail06Warning ) # Find request object diff --git a/wagtail/wagtailadmin/tests/test_account_management.py b/wagtail/wagtailadmin/tests/test_account_management.py index 048ef6fbc..c398e17cb 100644 --- a/wagtail/wagtailadmin/tests/test_account_management.py +++ b/wagtail/wagtailadmin/tests/test_account_management.py @@ -2,7 +2,8 @@ from __future__ import unicode_literals from django.test import TestCase from django.core.urlresolvers import reverse -from django.contrib.auth.models import User, Group, Permission +from django.contrib.auth import get_user_model +from django.contrib.auth.models import Group, Permission from django.contrib.auth.tokens import PasswordResetTokenGenerator from django.core import mail @@ -31,7 +32,7 @@ class TestAuthentication(TestCase, WagtailTestUtils): the user was logged in successfully """ # Create user to log in with - user = User.objects.create_superuser(username='test', email='test@email.com', password='password') + user = get_user_model().objects.create_superuser(username='test', email='test@email.com', password='password') # Post credentials to the login page post_data = { @@ -45,7 +46,7 @@ class TestAuthentication(TestCase, WagtailTestUtils): # Check that the user was logged in self.assertTrue('_auth_user_id' in self.client.session) - self.assertEqual(self.client.session['_auth_user_id'], User.objects.get(username='test').id) + self.assertEqual(self.client.session['_auth_user_id'], get_user_model().objects.get(username='test').id) def test_already_logged_in_redirect(self): """ @@ -70,7 +71,7 @@ class TestAuthentication(TestCase, WagtailTestUtils): This tests issue #431 """ # Login as unprivileged user - User.objects.create(username='unprivileged', password='123') + get_user_model().objects.create(username='unprivileged', password='123') self.client.login(username='unprivileged', password='123') # Get login page @@ -169,7 +170,7 @@ class TestAccountSection(TestCase, WagtailTestUtils): self.assertRedirects(response, reverse('wagtailadmin_account')) # Check that the password was changed - self.assertTrue(User.objects.get(username='test').check_password('newpassword')) + self.assertTrue(get_user_model().objects.get(username='test').check_password('newpassword')) def test_change_password_view_post_password_mismatch(self): """ @@ -191,7 +192,7 @@ class TestAccountSection(TestCase, WagtailTestUtils): self.assertTrue("The two password fields didn't match." in response.context['form'].errors['new_password2']) # Check that the password was not changed - self.assertTrue(User.objects.get(username='test').check_password('password')) + self.assertTrue(get_user_model().objects.get(username='test').check_password('password')) def test_notification_preferences_view(self): """ @@ -221,7 +222,7 @@ class TestAccountSection(TestCase, WagtailTestUtils): # Check that the user was redirected to the account page self.assertRedirects(response, reverse('wagtailadmin_account')) - profile = UserProfile.get_for_user(User.objects.get(username='test')) + profile = UserProfile.get_for_user(get_user_model().objects.get(username='test')) # Check that the notification preferences are as submitted self.assertFalse(profile.submitted_notifications) @@ -235,7 +236,7 @@ class TestAccountManagementForNonModerator(TestCase, WagtailTestUtils): """ def setUp(self): # Create a non-moderator user - self.submitter = User.objects.create_user('submitter', 'submitter@example.com', 'password') + self.submitter = get_user_model().objects.create_user('submitter', 'submitter@example.com', 'password') self.submitter.groups.add(Group.objects.get(name='Editors')) self.client.login(username=self.submitter.username, password='password') @@ -260,7 +261,7 @@ class TestAccountManagementForAdminOnlyUser(TestCase, WagtailTestUtils): admin_only_group = Group.objects.create(name='Admin Only') admin_only_group.permissions.add(Permission.objects.get(codename='access_admin')) - self.admin_only_user = User.objects.create_user('admin_only_user', 'admin_only_user@example.com', 'password') + self.admin_only_user = get_user_model().objects.create_user('admin_only_user', 'admin_only_user@example.com', 'password') self.admin_only_user.groups.add(admin_only_group) self.client.login(username=self.admin_only_user.username, password='password') @@ -291,7 +292,7 @@ class TestPasswordReset(TestCase, WagtailTestUtils): """ def setUp(self): # Create a user - User.objects.create_superuser(username='test', email='test@email.com', password='password') + get_user_model().objects.create_superuser(username='test', email='test@email.com', password='password') def test_password_reset_view(self): """ @@ -368,7 +369,7 @@ class TestPasswordReset(TestCase, WagtailTestUtils): from django.utils.http import urlsafe_base64_encode # Get user - self.user = User.objects.get(username='test') + self.user = get_user_model().objects.get(username='test') # Generate a password reset token self.password_reset_token = PasswordResetTokenGenerator().make_token(self.user) @@ -410,7 +411,7 @@ class TestPasswordReset(TestCase, WagtailTestUtils): self.assertRedirects(response, reverse('password_reset_complete')) # Check that the password was changed - self.assertTrue(User.objects.get(username='test').check_password('newpassword')) + self.assertTrue(get_user_model().objects.get(username='test').check_password('newpassword')) def test_password_reset_confirm_view_post_password_mismatch(self): """ @@ -434,7 +435,7 @@ class TestPasswordReset(TestCase, WagtailTestUtils): self.assertTrue("The two password fields didn't match." in response.context['form'].errors['new_password2']) # Check that the password was not changed - self.assertTrue(User.objects.get(username='test').check_password('password')) + self.assertTrue(get_user_model().objects.get(username='test').check_password('password')) def test_password_reset_done_view(self): """ diff --git a/wagtail/wagtailadmin/tests/test_pages_views.py b/wagtail/wagtailadmin/tests/test_pages_views.py index a5b4164cb..765c21786 100644 --- a/wagtail/wagtailadmin/tests/test_pages_views.py +++ b/wagtail/wagtailadmin/tests/test_pages_views.py @@ -2,15 +2,16 @@ from datetime import timedelta from django.test import TestCase from django.core.urlresolvers import reverse -from django.contrib.auth.models import User, Permission +from django.contrib.auth import get_user_model +from django.contrib.auth.models import Group, Permission from django.core import mail from django.core.paginator import Paginator from django.utils import timezone -from wagtail.tests.models import SimplePage, EventPage, EventPageCarouselItem, StandardIndex, BusinessIndex, BusinessChild, BusinessSubIndex +from wagtail.tests.models import SimplePage, EventPage, EventPageCarouselItem, StandardIndex, BusinessIndex, BusinessChild, BusinessSubIndex, TaggedPage from wagtail.tests.utils import unittest, WagtailTestUtils from wagtail.wagtailcore.models import Page, PageRevision -from wagtail.wagtailcore.signals import page_published +from wagtail.wagtailcore.signals import page_published, page_unpublished from wagtail.wagtailusers.models import UserProfile @@ -301,7 +302,7 @@ class TestPageCreation(TestCase, WagtailTestUtils): def test_create_simplepage_post_submit(self): # Create a moderator user for testing email - moderator = User.objects.create_superuser('moderator', 'moderator@email.com', 'password') + moderator = get_user_model().objects.create_superuser('moderator', 'moderator@email.com', 'password') # Submit post_data = { @@ -603,7 +604,7 @@ class TestPageEdit(TestCase, WagtailTestUtils): def test_page_edit_post_submit(self): # Create a moderator user for testing email - moderator = User.objects.create_superuser('moderator', 'moderator@email.com', 'password') + moderator = get_user_model().objects.create_superuser('moderator', 'moderator@email.com', 'password') # Tests submitting from edit page post_data = { @@ -809,6 +810,15 @@ class TestPageDelete(TestCase, WagtailTestUtils): self.assertEqual(response.status_code, 403) def test_page_delete_post(self): + # Connect a mock signal handler to page_unpublished signal + signal_fired = [False] + signal_page = [None] + def page_unpublished_handler(sender, instance, **kwargs): + signal_fired[0] = True + signal_page[0] = instance + page_unpublished.connect(page_unpublished_handler) + + # Post post_data = {'hello': 'world'} # For some reason, this test doesn't work without a bit of POST data response = self.client.post(reverse('wagtailadmin_pages_delete', args=(self.child_page.id, )), post_data) @@ -818,6 +828,38 @@ class TestPageDelete(TestCase, WagtailTestUtils): # Check that the page is gone self.assertEqual(Page.objects.filter(path__startswith=self.root_page.path, slug='hello-world').count(), 0) + # Check that the page_unpublished signal was fired + self.assertTrue(signal_fired[0]) + self.assertEqual(signal_page[0], self.child_page) + self.assertEqual(signal_page[0], signal_page[0].specific) + + def test_page_delete_notlive_post(self): + # Same as above, but this makes sure the page_unpublished signal is not fired + # when if the page is not live when it is deleted + + # Unpublish the page + self.child_page.live = False + self.child_page.save() + + # Connect a mock signal handler to page_unpublished signal + signal_fired = [False] + def page_unpublished_handler(sender, instance, **kwargs): + signal_fired[0] = True + page_unpublished.connect(page_unpublished_handler) + + # Post + post_data = {'hello': 'world'} # For some reason, this test doesn't work without a bit of POST data + response = self.client.post(reverse('wagtailadmin_pages_delete', args=(self.child_page.id, )), post_data) + + # Should be redirected to explorer page + self.assertRedirects(response, reverse('wagtailadmin_explore', args=(self.root_page.id, ))) + + # Check that the page is gone + self.assertEqual(Page.objects.filter(path__startswith=self.root_page.path, slug='hello-world').count(), 0) + + # Check that the page_unpublished signal was not fired + self.assertFalse(signal_fired[0]) + class TestPageSearch(TestCase, WagtailTestUtils): def setUp(self): @@ -912,6 +954,260 @@ class TestPageMove(TestCase, WagtailTestUtils): self.assertEqual(response.status_code, 200) +class TestPageCopy(TestCase, WagtailTestUtils): + def setUp(self): + # Find root page + self.root_page = Page.objects.get(id=2) + + # Create a page + self.test_page = self.root_page.add_child(instance=SimplePage( + title="Hello world!", + slug='hello-world', + live=True, + )) + + # Create a couple of child pages + self.test_child_page = self.test_page.add_child(instance=SimplePage( + title="Child page", + slug='child-page', + live=True, + )) + + self.test_unpublished_child_page = self.test_page.add_child(instance=SimplePage( + title="Unpublished Child page", + slug='unpublished-child-page', + live=False, + )) + + # Login + self.user = self.login() + + def test_page_copy(self): + response = self.client.get(reverse('wagtailadmin_pages_copy', args=(self.test_page.id, ))) + + # Check response + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'wagtailadmin/pages/copy.html') + + # Make sure all fields are in the form + self.assertContains(response, "New title") + self.assertContains(response, "New slug") + self.assertContains(response, "Copy subpages") + self.assertContains(response, "Publish copies") + + def test_page_copy_bad_permissions(self): + # Remove privileges from user + self.user.is_superuser = False + self.user.user_permissions.add( + Permission.objects.get(content_type__app_label='wagtailadmin', codename='access_admin') + ) + self.user.save() + + # Get copy page + response = self.client.get(reverse('wagtailadmin_pages_copy', args=(self.test_page.id, ))) + + # Check that the user recieved a 403 response + self.assertEqual(response.status_code, 403) + + def test_page_copy_post(self): + post_data = { + 'new_title': "Hello world 2", + 'new_slug': 'hello-world-2', + 'copy_subpages': False, + 'publish_copies': False, + } + response = self.client.post(reverse('wagtailadmin_pages_copy', args=(self.test_page.id, )), post_data) + + # Check that the user was redirected to the parents explore page + self.assertRedirects(response, reverse('wagtailadmin_explore', args=(self.root_page.id, ))) + + # Get copy + page_copy = self.root_page.get_children().filter(slug='hello-world-2').first() + + # Check that the copy exists + self.assertNotEqual(page_copy, None) + + # Check that the copy is not live + self.assertFalse(page_copy.live) + + # Check that the owner of the page is set correctly + self.assertEqual(page_copy.owner, self.user) + + # Check that the children were not copied + self.assertEqual(page_copy.get_children().count(), 0) + + def test_page_copy_post_copy_subpages(self): + post_data = { + 'new_title': "Hello world 2", + 'new_slug': 'hello-world-2', + 'copy_subpages': True, + 'publish_copies': False, + } + response = self.client.post(reverse('wagtailadmin_pages_copy', args=(self.test_page.id, )), post_data) + + # Check that the user was redirected to the parents explore page + self.assertRedirects(response, reverse('wagtailadmin_explore', args=(self.root_page.id, ))) + + # Get copy + page_copy = self.root_page.get_children().filter(slug='hello-world-2').first() + + # Check that the copy exists + self.assertNotEqual(page_copy, None) + + # Check that the copy is not live + self.assertFalse(page_copy.live) + + # Check that the owner of the page is set correctly + self.assertEqual(page_copy.owner, self.user) + + # Check that the children were copied + self.assertEqual(page_copy.get_children().count(), 2) + + # Check the the child pages + # Neither of them should be live + child_copy = page_copy.get_children().filter(slug='child-page').first() + self.assertNotEqual(child_copy, None) + self.assertFalse(child_copy.live) + + unpublished_child_copy = page_copy.get_children().filter(slug='unpublished-child-page').first() + self.assertNotEqual(unpublished_child_copy, None) + self.assertFalse(unpublished_child_copy.live) + + def test_page_copy_post_copy_subpages_publish_copies(self): + post_data = { + 'new_title': "Hello world 2", + 'new_slug': 'hello-world-2', + 'copy_subpages': True, + 'publish_copies': True, + } + response = self.client.post(reverse('wagtailadmin_pages_copy', args=(self.test_page.id, )), post_data) + + # Check that the user was redirected to the parents explore page + self.assertRedirects(response, reverse('wagtailadmin_explore', args=(self.root_page.id, ))) + + # Get copy + page_copy = self.root_page.get_children().filter(slug='hello-world-2').first() + + # Check that the copy exists + self.assertNotEqual(page_copy, None) + + # Check that the copy is live + self.assertTrue(page_copy.live) + + # Check that the owner of the page is set correctly + self.assertEqual(page_copy.owner, self.user) + + # Check that the children were copied + self.assertEqual(page_copy.get_children().count(), 2) + + # Check the the child pages + # The child_copy should be live but the unpublished_child_copy shouldn't + child_copy = page_copy.get_children().filter(slug='child-page').first() + self.assertNotEqual(child_copy, None) + self.assertTrue(child_copy.live) + + unpublished_child_copy = page_copy.get_children().filter(slug='unpublished-child-page').first() + self.assertNotEqual(unpublished_child_copy, None) + self.assertFalse(unpublished_child_copy.live) + + def test_page_copy_post_existing_slug(self): + # This tests the existing slug checking on page copy + + # Attempt to copy the page but forget to change the slug + post_data = { + 'new_title': "Hello world 2", + 'new_slug': 'hello-world', + 'copy_subpages': False, + } + response = self.client.post(reverse('wagtailadmin_pages_copy', args=(self.test_page.id, )), post_data) + + # Should not be redirected (as the save should fail) + self.assertEqual(response.status_code, 200) + + # Check that a form error was raised + self.assertFormError(response, 'form', 'new_slug', "This slug is already in use") + + def test_page_copy_post_invalid_slug(self): + # Attempt to copy the page but set an invalid slug string + post_data = { + 'new_title': "Hello world 2", + 'new_slug': 'hello world!', + 'copy_subpages': False, + } + response = self.client.post(reverse('wagtailadmin_pages_copy', args=(self.test_page.id, )), post_data) + + # Should not be redirected (as the save should fail) + self.assertEqual(response.status_code, 200) + + # Check that a form error was raised + self.assertFormError(response, 'form', 'new_slug', "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.") + + def test_page_copy_no_publish_permission(self): + # Turn user into an editor who can add pages but not publish them + self.user.is_superuser = False + self.user.groups.add( + Group.objects.get(name="Editors"), + ) + self.user.save() + + # Get copy page + response = self.client.get(reverse('wagtailadmin_pages_copy', args=(self.test_page.id, ))) + + # The user should have access to the copy page + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'wagtailadmin/pages/copy.html') + + # Make sure the "publish copies" field is hidden + self.assertNotContains(response, "Publish copies") + + def test_page_copy_no_publish_permission_post_copy_subpages_publish_copies(self): + # This tests that unprivileged users cannot publish copied pages even if they hack their browser + + # Turn user into an editor who can add pages but not publish them + self.user.is_superuser = False + self.user.groups.add( + Group.objects.get(name="Editors"), + ) + self.user.save() + + # Post + post_data = { + 'new_title': "Hello world 2", + 'new_slug': 'hello-world-2', + 'copy_subpages': True, + 'publish_copies': True, + } + response = self.client.post(reverse('wagtailadmin_pages_copy', args=(self.test_page.id, )), post_data) + + # Check that the user was redirected to the parents explore page + self.assertRedirects(response, reverse('wagtailadmin_explore', args=(self.root_page.id, ))) + + # Get copy + page_copy = self.root_page.get_children().filter(slug='hello-world-2').first() + + # Check that the copy exists + self.assertNotEqual(page_copy, None) + + # Check that the copy is not live + self.assertFalse(page_copy.live) + + # Check that the owner of the page is set correctly + self.assertEqual(page_copy.owner, self.user) + + # Check that the children were copied + self.assertEqual(page_copy.get_children().count(), 2) + + # Check the the child pages + # Neither of them should be live + child_copy = page_copy.get_children().filter(slug='child-page').first() + self.assertNotEqual(child_copy, None) + self.assertFalse(child_copy.live) + + unpublished_child_copy = page_copy.get_children().filter(slug='unpublished-child-page').first() + self.assertNotEqual(unpublished_child_copy, None) + self.assertFalse(unpublished_child_copy.live) + + class TestPageUnpublish(TestCase, WagtailTestUtils): def setUp(self): self.user = self.login() @@ -967,6 +1263,14 @@ class TestPageUnpublish(TestCase, WagtailTestUtils): """ This posts to the unpublish view and checks that the page was unpublished """ + # Connect a mock signal handler to page_unpublished signal + signal_fired = [False] + signal_page = [None] + def page_unpublished_handler(sender, instance, **kwargs): + signal_fired[0] = True + signal_page[0] = instance + page_unpublished.connect(page_unpublished_handler) + # Post to the unpublish page response = self.client.post(reverse('wagtailadmin_pages_unpublish', args=(self.page.id, )), { 'foo': "Must post something or the view won't see this as a POST request", @@ -978,10 +1282,15 @@ class TestPageUnpublish(TestCase, WagtailTestUtils): # Check that the page was unpublished self.assertFalse(SimplePage.objects.get(id=self.page.id).live) + # Check that the page_unpublished signal was fired + self.assertTrue(signal_fired[0]) + self.assertEqual(signal_page[0], self.page) + self.assertEqual(signal_page[0], signal_page[0].specific) + class TestApproveRejectModeration(TestCase, WagtailTestUtils): def setUp(self): - self.submitter = User.objects.create_superuser( + self.submitter = get_user_model().objects.create_superuser( username='submitter', email='submitter@email.com', password='password', @@ -1234,6 +1543,7 @@ class TestNotificationPreferences(TestCase, WagtailTestUtils): self.user = self.login() # Create two moderator users for testing 'submitted' email + User = get_user_model() self.moderator = User.objects.create_superuser('moderator', 'moderator@email.com', 'password') self.moderator2 = User.objects.create_superuser('moderator2', 'moderator2@email.com', 'password') @@ -1356,3 +1666,36 @@ class TestNotificationPreferences(TestCase, WagtailTestUtils): # No email to send self.assertEqual(len(mail.outbox), 0) + + +class TestIssue197(TestCase, WagtailTestUtils): + def test_issue_197(self): + # Find root page + self.root_page = Page.objects.get(id=2) + + # Create a tagged page with no tags + self.tagged_page = self.root_page.add_child(instance=TaggedPage( + title="Tagged page", + slug='tagged-page', + live=False, + )) + + # Login + self.user = self.login() + + # Add some tags and publish using edit view + post_data = { + 'title': "Tagged page", + 'slug':'tagged-page', + 'tags': "hello, world", + 'action-publish': "Publish", + } + response = self.client.post(reverse('wagtailadmin_pages_edit', args=(self.tagged_page.id, )), post_data) + + # Should be redirected to explorer page + self.assertRedirects(response, reverse('wagtailadmin_explore', args=(self.root_page.id, ))) + + # Check that both tags are in the pages tag set + page = TaggedPage.objects.get(id=self.tagged_page.id) + self.assertIn('hello', page.tags.slugs()) + self.assertIn('world', page.tags.slugs()) diff --git a/wagtail/wagtailadmin/tests/test_userbar.py b/wagtail/wagtailadmin/tests/test_userbar.py index acdb81690..c43a1bbc0 100644 --- a/wagtail/wagtailadmin/tests/test_userbar.py +++ b/wagtail/wagtailadmin/tests/test_userbar.py @@ -2,7 +2,8 @@ from django.test import TestCase from django.test.client import RequestFactory from django.core.urlresolvers import reverse from django.template import Template, Context -from django.contrib.auth.models import User, AnonymousUser +from django.contrib.auth import get_user_model +from django.contrib.auth.models import AnonymousUser from wagtail.tests.utils import WagtailTestUtils from wagtail.wagtailcore.models import Page @@ -10,7 +11,7 @@ from wagtail.wagtailcore.models import Page class TestUserbarTag(TestCase): def setUp(self): - self.user = User.objects.create_superuser(username='test', email='test@email.com', password='password') + self.user = get_user_model().objects.create_superuser(username='test', email='test@email.com', password='password') self.homepage = Page.objects.get(id=2) def dummy_request(self, user=None): diff --git a/wagtail/wagtailadmin/tests/tests.py b/wagtail/wagtailadmin/tests/tests.py index 4d5491f1d..427fd3279 100644 --- a/wagtail/wagtailadmin/tests/tests.py +++ b/wagtail/wagtailadmin/tests/tests.py @@ -1,9 +1,10 @@ from django.test import TestCase +from django.core.urlresolvers import reverse +from django.core import mail + from wagtail.tests.utils import WagtailTestUtils from wagtail.wagtailcore.models import Page from wagtail.wagtailadmin.tasks import send_email_task -from django.core.urlresolvers import reverse -from django.core import mail class TestHome(TestCase, WagtailTestUtils): @@ -43,3 +44,17 @@ class TestSendEmailTask(TestCase): self.assertEqual(mail.outbox[0].subject, "Test subject") self.assertEqual(mail.outbox[0].body, "Test content") self.assertEqual(mail.outbox[0].to, ["nobody@email.com"]) + + +class TestExplorerNavView(TestCase, WagtailTestUtils): + def setUp(self): + self.homepage = Page.objects.get(id=2).specific + self.login() + + def test_explorer_nav_view(self): + response = self.client.get(reverse('wagtailadmin_explorer_nav')) + + # Check response + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed('wagtailadmin/shared/explorer_nav.html') + self.assertEqual(response.context['nodes'][0][0], self.homepage) diff --git a/wagtail/wagtailadmin/urls.py b/wagtail/wagtailadmin/urls.py index b5757694d..72833130e 100644 --- a/wagtail/wagtailadmin/urls.py +++ b/wagtail/wagtailadmin/urls.py @@ -38,6 +38,8 @@ urlpatterns += [ url(r'^failwhale/$', home.error_test, name='wagtailadmin_error_test'), + url(r'^explorer-nav/$', pages.explorer_nav, name='wagtailadmin_explorer_nav'), + url(r'^pages/$', pages.index, name='wagtailadmin_explore_root'), url(r'^pages/(\d+)/$', pages.index, name='wagtailadmin_explore'), @@ -63,6 +65,8 @@ urlpatterns += [ url(r'^pages/(\d+)/move/(\d+)/confirm/$', pages.move_confirm, name='wagtailadmin_pages_move_confirm'), url(r'^pages/(\d+)/set_position/$', pages.set_page_position, name='wagtailadmin_pages_set_page_position'), + url(r'^pages/(\d+)/copy/$', pages.copy, name='wagtailadmin_pages_copy'), + url(r'^pages/moderation/(\d+)/approve/$', pages.approve_moderation, name='wagtailadmin_pages_approve_moderation'), url(r'^pages/moderation/(\d+)/reject/$', pages.reject_moderation, name='wagtailadmin_pages_reject_moderation'), url(r'^pages/moderation/(\d+)/preview/$', pages.preview_for_moderation, name='wagtailadmin_pages_preview_for_moderation'), diff --git a/wagtail/wagtailadmin/utils.py b/wagtail/wagtailadmin/utils.py new file mode 100644 index 000000000..043b8336d --- /dev/null +++ b/wagtail/wagtailadmin/utils.py @@ -0,0 +1,36 @@ +from modelcluster.fields import ParentalKey + +from wagtail.wagtailcore.models import Page + + +def get_object_usage(obj): + "Returns a queryset of pages that link to a particular object" + + pages = Page.objects.none() + + # get all the relation objects for obj + relations = type(obj)._meta.get_all_related_objects( + include_hidden=True, + include_proxy_eq=True + ) + for relation in relations: + # if the relation is between obj and a page, get the page + if issubclass(relation.model, Page): + pages |= Page.objects.filter( + id__in=relation.model._base_manager.filter(**{ + relation.field.name: obj.id + }).values_list('id', flat=True) + ) + else: + # if the relation is between obj and an object that has a page as a + # property, return the page + for f in relation.model._meta.fields: + if isinstance(f, ParentalKey) and issubclass(f.rel.to, Page): + pages |= Page.objects.filter( + id__in=relation.model._base_manager.filter( + **{ + relation.field.name: obj.id + }).values_list(f.attname, flat=True) + ) + + return pages diff --git a/wagtail/wagtailadmin/views/pages.py b/wagtail/wagtailadmin/views/pages.py index 013ce40c0..3de6f7cb5 100644 --- a/wagtail/wagtailadmin/views/pages.py +++ b/wagtail/wagtailadmin/views/pages.py @@ -12,13 +12,22 @@ from django.utils.translation import ugettext as _ from django.views.decorators.http import require_GET from django.views.decorators.vary import vary_on_headers +from wagtail.utils.deprecation import RemovedInWagtail06Warning + from wagtail.wagtailadmin.edit_handlers import TabbedInterface, ObjectList -from wagtail.wagtailadmin.forms import SearchForm +from wagtail.wagtailadmin.forms import SearchForm, CopyForm from wagtail.wagtailadmin import tasks, signals from wagtail.wagtailcore import hooks -from wagtail.wagtailcore.models import Page, PageRevision -from wagtail.wagtailcore.signals import page_published +from wagtail.wagtailcore.models import Page, PageRevision, get_navigation_menu_items +from wagtail.wagtailcore.signals import page_published, page_unpublished + + +@permission_required('wagtailadmin.access_admin') +def explorer_nav(request): + return render(request, 'wagtailadmin/shared/explorer_nav.html', { + 'nodes': get_navigation_menu_items(), + }) @permission_required('wagtailadmin.access_admin') @@ -306,7 +315,13 @@ def edit(request, page_id): approved_go_live_at = go_live_at else: page.live = True - form.save() + + # We need save the page this way to workaround a bug + # in django-modelcluster causing m2m fields to not + # be committed to the database. See github issue #192 + form.save(commit=False) + page.save() + # Clear approved_go_live_at for older revisions page.revisions.update( submitted_for_moderation=False, @@ -321,7 +336,9 @@ def edit(request, page_id): Page.objects.filter(id=page.id).update(has_unpublished_changes=True) else: page.has_unpublished_changes = True - form.save() + form.save(commit=False) + page.save() + page.save_revision( user=request.user, @@ -376,8 +393,19 @@ def delete(request, page_id): raise PermissionDenied if request.POST: + if page.live: + # fetch params to pass to the page_unpublished_signal, before the + # deletion happens + specific_class = page.specific_class + specific_page = page.specific + parent_id = page.get_parent().id page.delete() + + # If the page is live, send the unpublished signal + if page.live: + page_unpublished.send(sender=specific_class, instance=specific_page) + messages.success(request, _("Page '{0}' deleted.").format(page.title)) for fn in hooks.get_hooks('after_delete_page'): @@ -411,7 +439,7 @@ def get_preview_response(page, preview_mode): if response: warnings.warn( "Defining 'show_as_mode' on a page model is deprecated. Use 'serve_preview' instead", - DeprecationWarning + RemovedInWagtail06Warning ) return response else: @@ -538,9 +566,14 @@ def unpublish(request, page_id): parent_id = page.get_parent().id page.live = False page.save() + # Since page is unpublished clear the approved_go_live_at of all revisions page.revisions.update(approved_go_live_at=None) + + page_unpublished.send(sender=page.specific_class, instance=page.specific) + messages.success(request, _("Page '{0}' unpublished.").format(page.title)) + return redirect('wagtailadmin_explore', parent_id) return render(request, 'wagtailadmin/pages/confirm_unpublish.html', { @@ -635,6 +668,57 @@ def set_page_position(request, page_to_move_id): return HttpResponse('') +@permission_required('wagtailadmin.access_admin') +def copy(request, page_id): + page = Page.objects.get(id=page_id) + parent_page = page.get_parent() + + # Make sure this user has permission to add subpages on the parent + if not parent_page.permissions_for_user(request.user).can_add_subpage(): + raise PermissionDenied + + # Check if the user has permission to publish subpages on the parent + can_publish = parent_page.permissions_for_user(request.user).can_publish_subpage() + + # Create the form + form = CopyForm(request.POST or None, page=page, can_publish=can_publish) + + # Check if user is submitting + if request.method == 'POST' and form.is_valid(): + # Copy the page + new_page = page.copy( + recursive=form.cleaned_data.get('copy_subpages'), + update_attrs={ + 'title': form.cleaned_data['new_title'], + 'slug': form.cleaned_data['new_slug'], + } + ) + + # Check if we should keep copied subpages published + publish_copies = can_publish and form.cleaned_data.get('publish_copies') + + # Unpublish copied pages if we need to + if not publish_copies: + new_page.get_descendants(inclusive=True).update(live=False) + + # Assign user of this request as the owner of all the new pages + new_page.get_descendants(inclusive=True).update(owner=request.user) + + # Give a success message back to the user + if form.cleaned_data.get('copy_subpages'): + messages.success(request, _("Page '{0}' and {1} subpages copied.").format(page.title, new_page.get_descendants().count())) + else: + messages.success(request, _("Page '{0}' copied.").format(page.title)) + + # Redirect to explore of parent page + return redirect('wagtailadmin_explore', parent_page.id) + + return render(request, 'wagtailadmin/pages/copy.html', { + 'page': page, + 'form': form, + }) + + PAGE_EDIT_HANDLERS = {} diff --git a/wagtail/wagtailcore/locale/bg/LC_MESSAGES/django.mo b/wagtail/wagtailcore/locale/bg/LC_MESSAGES/django.mo index d43d58490..4b01bf043 100644 Binary files a/wagtail/wagtailcore/locale/bg/LC_MESSAGES/django.mo and b/wagtail/wagtailcore/locale/bg/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailcore/locale/bg/LC_MESSAGES/django.po b/wagtail/wagtailcore/locale/bg/LC_MESSAGES/django.po index 46c88a279..3d3cfb9bb 100644 --- a/wagtail/wagtailcore/locale/bg/LC_MESSAGES/django.po +++ b/wagtail/wagtailcore/locale/bg/LC_MESSAGES/django.po @@ -1,92 +1,80 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: -# LyuboslavPetrov <petrov.lyuboslav@gmail.com>, 2014 +# Lyuboslav Petrov <petrov.lyuboslav@gmail.com>, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:42+0000\n" -"PO-Revision-Date: 2014-02-24 20:02+0000\n" -"Last-Translator: LyuboslavPetrov <petrov.lyuboslav@gmail.com>\n" -"Language-Team: Bulgarian (http://www.transifex.com/projects/p/wagtail/" -"language/bg/)\n" -"Language: bg\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Bulgarian (http://www.transifex.com/projects/p/wagtail/language/bg/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: bg\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: models.py:44 +#: models.py:46 msgid "" "Set this to something other than 80 if you need a specific port number to " "appear in URLs (e.g. development on port 8000). Does not affect request " "handling (so port forwarding still works)." -msgstr "" -"Задайте това като нещо различно от 80, в случай че имате нужда от определен " -"порт да се появи в URL адресите ви (напр. код-разработка на порт 8000). Не " -"се отнася за боравене със заявки (така Port Forwarding ще работи)." +msgstr "Задайте това като нещо различно от 80, в случай че имате нужда от определен порт да се появи в URL адресите ви (напр. код-разработка на порт 8000). Не се отнася за боравене със заявки (така Port Forwarding ще работи)." -#: models.py:46 +#: models.py:48 msgid "" "If true, this site will handle requests for all other hostnames that do not " "have a site entry of their own" -msgstr "" -"Ако е Вярно, този сайт ще борави със заявки за всички останали хостове, " -"които нямат собствен сайт." +msgstr "Ако е Вярно, този сайт ще борави със заявки за всички останали хостове, които нямат собствен сайт." -#: models.py:107 +#: models.py:109 #, python-format msgid "" "%(hostname)s is already configured as the default site. You must unset that " "before you can save this site as default." msgstr "" -#: models.py:275 +#: models.py:277 msgid "The page title as you'd like it to be seen by the public" msgstr "Заглавието на страницата както желаете да се вижда" -#: models.py:276 +#: models.py:278 msgid "" -"The name of the page as it will appear in URLs e.g http://domain.com/blog/" -"[my-slug]/" -msgstr "" -"Името на страницата както ще изглежда в URL-ите. Например http://domain.com/" -"blog/[my-slug]/" +"The name of the page as it will appear in URLs e.g http://domain.com/blog" +"/[my-slug]/" +msgstr "Името на страницата както ще изглежда в URL-ите. Например http://domain.com/blog/[my-slug]/" -#: models.py:285 +#: models.py:287 msgid "Page title" msgstr "Заглавие на Страница" -#: models.py:285 +#: models.py:287 msgid "" -"Optional. 'Search Engine Friendly' title. This will appear at the top of the " -"browser window." -msgstr "" -"Незадължителен. 'Оптимизирано за Търсачки' заглавие. Това ще се появи най-" -"отгоре на браузър прозореца." +"Optional. 'Search Engine Friendly' title. This will appear at the top of the" +" browser window." +msgstr "Незадължителен. 'Оптимизирано за Търсачки' заглавие. Това ще се появи най-отгоре на браузър прозореца." -#: models.py:286 +#: models.py:288 msgid "" "Whether a link to this page will appear in automatically generated menus" -msgstr "" -"Дали линк към тази страница ще се появи в автоматично генерираните менюта" +msgstr "Дали линк към тази страница ще се появи в автоматично генерираните менюта" -#: models.py:289 +#: models.py:291 msgid "Go live date/time" msgstr "" -#: models.py:289 models.py:290 -msgid "Please add a date-time in the form YYYY-MM-DD hh:mm." +#: models.py:291 models.py:292 +msgid "Please add a date-time in the form YYYY-MM-DD hh:mm:ss." msgstr "" -#: models.py:290 +#: models.py:292 msgid "Expiry date/time" msgstr "" -#: models.py:559 -#, fuzzy +#: models.py:564 msgid "name '{0}' (used in subpage_types list) is not defined." -msgstr "име '%s' (ползвано в листа subpage_types) не е зададено." +msgstr "" diff --git a/wagtail/wagtailcore/locale/ca/LC_MESSAGES/django.mo b/wagtail/wagtailcore/locale/ca/LC_MESSAGES/django.mo index 82c6ba24c..7ed9969c9 100644 Binary files a/wagtail/wagtailcore/locale/ca/LC_MESSAGES/django.mo and b/wagtail/wagtailcore/locale/ca/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailcore/locale/ca/LC_MESSAGES/django.po b/wagtail/wagtailcore/locale/ca/LC_MESSAGES/django.po index c7bf0cc19..aa3525fd6 100644 --- a/wagtail/wagtailcore/locale/ca/LC_MESSAGES/django.po +++ b/wagtail/wagtailcore/locale/ca/LC_MESSAGES/django.po @@ -1,92 +1,80 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: -# Lloople <d.lloople@gmail.com>, 2014 +# David Llop <d.lloople@gmail.com>, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:42+0000\n" -"PO-Revision-Date: 2014-02-22 12:43+0000\n" -"Last-Translator: Lloople <d.lloople@gmail.com>\n" -"Language-Team: Catalan (http://www.transifex.com/projects/p/wagtail/language/" -"ca/)\n" -"Language: ca\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Catalan (http://www.transifex.com/projects/p/wagtail/language/ca/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ca\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: models.py:44 +#: models.py:46 msgid "" "Set this to something other than 80 if you need a specific port number to " "appear in URLs (e.g. development on port 8000). Does not affect request " "handling (so port forwarding still works)." -msgstr "" -"Canvia això per un número diferent de 80 si necessites que aparegui un port " -"específic en les URLs (per ex: port de desenvolupament al 8000). No afecta a " -"la petició actual (el port de reenviament encara funciona)." +msgstr "Canvia això per un número diferent de 80 si necessites que aparegui un port específic en les URLs (per ex: port de desenvolupament al 8000). No afecta a la petició actual (el port de reenviament encara funciona)." -#: models.py:46 +#: models.py:48 msgid "" "If true, this site will handle requests for all other hostnames that do not " "have a site entry of their own" -msgstr "" -"Si és cert, aquest lloc s'encarregarà de les peticions de totes les altres " -"màquines que no tenen un lloc establert." +msgstr "Si és cert, aquest lloc s'encarregarà de les peticions de totes les altres màquines que no tenen un lloc establert." -#: models.py:107 +#: models.py:109 #, python-format msgid "" "%(hostname)s is already configured as the default site. You must unset that " "before you can save this site as default." msgstr "" -#: models.py:275 +#: models.py:277 msgid "The page title as you'd like it to be seen by the public" msgstr "El títol de la pàgina que vols que sigui vist pel públic" -#: models.py:276 +#: models.py:278 msgid "" -"The name of the page as it will appear in URLs e.g http://domain.com/blog/" -"[my-slug]/" -msgstr "" -"El nom de la pàgina que apareixerà en la URL. Per exemple: http://domini.com/" -"blog/[nom]/" +"The name of the page as it will appear in URLs e.g http://domain.com/blog" +"/[my-slug]/" +msgstr "El nom de la pàgina que apareixerà en la URL. Per exemple: http://domini.com/blog/[nom]/" -#: models.py:285 +#: models.py:287 msgid "Page title" msgstr "Títol de la pàgina" -#: models.py:285 +#: models.py:287 msgid "" -"Optional. 'Search Engine Friendly' title. This will appear at the top of the " -"browser window." -msgstr "" -"Opcional. Títol de 'Motor de cerca amigable'. Això apareixerà al cap damunt " -"de la finetra del navegador" +"Optional. 'Search Engine Friendly' title. This will appear at the top of the" +" browser window." +msgstr "Opcional. Títol de 'Motor de cerca amigable'. Això apareixerà al cap damunt de la finetra del navegador" -#: models.py:286 +#: models.py:288 msgid "" "Whether a link to this page will appear in automatically generated menus" -msgstr "" -"Si s'enllaça cap aquesta pàgina apareixerà automàticament als menús generats" +msgstr "Si s'enllaça cap aquesta pàgina apareixerà automàticament als menús generats" -#: models.py:289 +#: models.py:291 msgid "Go live date/time" msgstr "" -#: models.py:289 models.py:290 -msgid "Please add a date-time in the form YYYY-MM-DD hh:mm." +#: models.py:291 models.py:292 +msgid "Please add a date-time in the form YYYY-MM-DD hh:mm:ss." msgstr "" -#: models.py:290 +#: models.py:292 msgid "Expiry date/time" msgstr "" -#: models.py:559 -#, fuzzy +#: models.py:564 msgid "name '{0}' (used in subpage_types list) is not defined." -msgstr "el nom '%s' (utilitzat a subpage_types list) no està definit." +msgstr "" diff --git a/wagtail/wagtailcore/locale/de/LC_MESSAGES/django.mo b/wagtail/wagtailcore/locale/de/LC_MESSAGES/django.mo index c87c111c3..d31c17891 100644 Binary files a/wagtail/wagtailcore/locale/de/LC_MESSAGES/django.mo and b/wagtail/wagtailcore/locale/de/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailcore/locale/de/LC_MESSAGES/django.po b/wagtail/wagtailcore/locale/de/LC_MESSAGES/django.po index e83f6f119..543a13b5b 100644 --- a/wagtail/wagtailcore/locale/de/LC_MESSAGES/django.po +++ b/wagtail/wagtailcore/locale/de/LC_MESSAGES/django.po @@ -1,94 +1,80 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: -# jspielmann <j@spielmannsolutions.com>, 2014 +# Johannes Spielmann <j@spielmannsolutions.com>, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:42+0000\n" -"PO-Revision-Date: 2014-02-25 17:28+0000\n" -"Last-Translator: jspielmann <j@spielmannsolutions.com>\n" -"Language-Team: German (http://www.transifex.com/projects/p/wagtail/language/" -"de/)\n" -"Language: de\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: German (http://www.transifex.com/projects/p/wagtail/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: models.py:44 +#: models.py:46 msgid "" "Set this to something other than 80 if you need a specific port number to " "appear in URLs (e.g. development on port 8000). Does not affect request " "handling (so port forwarding still works)." -msgstr "" -"Geben Sie hier einen anderen Wert als 80 ein, wenn dieser in URLs auftauchen " -"soll (z.B. Development Port auf 8000). Dies bezieht sich nicht auf Request " -"Handling, so dass Port Forwarding weiterhin funktioniert." +msgstr "Geben Sie hier einen anderen Wert als 80 ein, wenn dieser in URLs auftauchen soll (z.B. Development Port auf 8000). Dies bezieht sich nicht auf Request Handling, so dass Port Forwarding weiterhin funktioniert." -#: models.py:46 +#: models.py:48 msgid "" "If true, this site will handle requests for all other hostnames that do not " "have a site entry of their own" -msgstr "" -"Falls ausgewählt wird diese Seite Anfragen für alle Hostnamen annehmen, die " -"keinen eigenen Seiteneintrag haben." +msgstr "Falls ausgewählt wird diese Seite Anfragen für alle Hostnamen annehmen, die keinen eigenen Seiteneintrag haben." -#: models.py:107 +#: models.py:109 #, python-format msgid "" "%(hostname)s is already configured as the default site. You must unset that " "before you can save this site as default." msgstr "" -#: models.py:275 +#: models.py:277 msgid "The page title as you'd like it to be seen by the public" msgstr "Der Seitentitel, der öffentlich angezeigt werden soll" -#: models.py:276 +#: models.py:278 msgid "" -"The name of the page as it will appear in URLs e.g http://domain.com/blog/" -"[my-slug]/" -msgstr "" -"Der Name der Seite, wie er in URLs angezeigt werden soll, z.B. http://domain." -"com/blog/[my-slug]/" +"The name of the page as it will appear in URLs e.g http://domain.com/blog" +"/[my-slug]/" +msgstr "Der Name der Seite, wie er in URLs angezeigt werden soll, z.B. http://domain.com/blog/[my-slug]/" -#: models.py:285 +#: models.py:287 msgid "Page title" msgstr "Seitentitel" -#: models.py:285 +#: models.py:287 msgid "" -"Optional. 'Search Engine Friendly' title. This will appear at the top of the " -"browser window." -msgstr "" -"Optional. Suchmaschinenfreundlicher Titel. Wird in der Titelleiste des " -"Browsers angezeigt." +"Optional. 'Search Engine Friendly' title. This will appear at the top of the" +" browser window." +msgstr "Optional. Suchmaschinenfreundlicher Titel. Wird in der Titelleiste des Browsers angezeigt." -#: models.py:286 +#: models.py:288 msgid "" "Whether a link to this page will appear in automatically generated menus" -msgstr "" -"Ob ein Link zu dieser Seite in automatisch generierten Menüs auftaucht." +msgstr "Ob ein Link zu dieser Seite in automatisch generierten Menüs auftaucht." -#: models.py:289 +#: models.py:291 msgid "Go live date/time" msgstr "" -#: models.py:289 models.py:290 -msgid "Please add a date-time in the form YYYY-MM-DD hh:mm." +#: models.py:291 models.py:292 +msgid "Please add a date-time in the form YYYY-MM-DD hh:mm:ss." msgstr "" -#: models.py:290 +#: models.py:292 msgid "Expiry date/time" msgstr "" -#: models.py:559 -#, fuzzy +#: models.py:564 msgid "name '{0}' (used in subpage_types list) is not defined." msgstr "" -"Der Name '%s', der in der Liste subpage_types verwendet wird, ist nicht " -"definiert." diff --git a/wagtail/wagtailcore/locale/el/LC_MESSAGES/django.mo b/wagtail/wagtailcore/locale/el/LC_MESSAGES/django.mo index a934f69b6..100a28cc1 100644 Binary files a/wagtail/wagtailcore/locale/el/LC_MESSAGES/django.mo and b/wagtail/wagtailcore/locale/el/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailcore/locale/el/LC_MESSAGES/django.po b/wagtail/wagtailcore/locale/el/LC_MESSAGES/django.po index 0ac591453..bed0ba05d 100644 --- a/wagtail/wagtailcore/locale/el/LC_MESSAGES/django.po +++ b/wagtail/wagtailcore/locale/el/LC_MESSAGES/django.po @@ -1,94 +1,80 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # serafeim <serafeim@torchbox.com>, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:42+0000\n" -"PO-Revision-Date: 2014-02-22 12:27+0000\n" -"Last-Translator: serafeim <serafeim@torchbox.com>\n" -"Language-Team: Greek (http://www.transifex.com/projects/p/wagtail/language/" -"el/)\n" -"Language: el\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Greek (http://www.transifex.com/projects/p/wagtail/language/el/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: el\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: models.py:44 +#: models.py:46 msgid "" "Set this to something other than 80 if you need a specific port number to " "appear in URLs (e.g. development on port 8000). Does not affect request " "handling (so port forwarding still works)." -msgstr "" -"Μπορείτε να χρησιμοποιήσετε κάτι διαφορετικό από το 80 αν θέλετε να " -"εμφανίζεται στις διευθύνσεις μια συγκεκριμένη θύρα (π.χ. ανάπτυξη στη θύρα " -"8000). Δεν επηρεάζει τον τρόπο που χειρίζονται τις αιτήσεις (οπότε η " -"προώθηση θύρας δουλεύει ακόμα)" +msgstr "Μπορείτε να χρησιμοποιήσετε κάτι διαφορετικό από το 80 αν θέλετε να εμφανίζεται στις διευθύνσεις μια συγκεκριμένη θύρα (π.χ. ανάπτυξη στη θύρα 8000). Δεν επηρεάζει τον τρόπο που χειρίζονται τις αιτήσεις (οπότε η προώθηση θύρας δουλεύει ακόμα)" -#: models.py:46 +#: models.py:48 msgid "" "If true, this site will handle requests for all other hostnames that do not " "have a site entry of their own" -msgstr "" -"Αν είναι αληθές, το εν λόγω site θα χειρίζεται και τις αιτήσεις για όλα τα " -"άλλα ονόματα που δεν έχουν δική τους εγγραφή" +msgstr "Αν είναι αληθές, το εν λόγω site θα χειρίζεται και τις αιτήσεις για όλα τα άλλα ονόματα που δεν έχουν δική τους εγγραφή" -#: models.py:107 +#: models.py:109 #, python-format msgid "" "%(hostname)s is already configured as the default site. You must unset that " "before you can save this site as default." msgstr "" -#: models.py:275 +#: models.py:277 msgid "The page title as you'd like it to be seen by the public" msgstr "Ο τίτλος της σελίδας έτσι όπως θα εμφανίζεται στο κοινό" -#: models.py:276 +#: models.py:278 msgid "" -"The name of the page as it will appear in URLs e.g http://domain.com/blog/" -"[my-slug]/" -msgstr "" -"Το όνομα της σελίδας έτσι όπως θα εμφανίζεται στις διευθύνσεις, π.χ http://" -"domain.com/blog/[my-slug]/" +"The name of the page as it will appear in URLs e.g http://domain.com/blog" +"/[my-slug]/" +msgstr "Το όνομα της σελίδας έτσι όπως θα εμφανίζεται στις διευθύνσεις, π.χ http://domain.com/blog/[my-slug]/" -#: models.py:285 +#: models.py:287 msgid "Page title" msgstr "Τίτλος σελίδας" -#: models.py:285 +#: models.py:287 msgid "" -"Optional. 'Search Engine Friendly' title. This will appear at the top of the " -"browser window." -msgstr "" -"Προαιρετικό. Τίτλος που είναι 'φιλικός προς τις μηχανές αναζήτησης'. Θα " -"εμφανιστεί στην κορυφή του παραθύρου." +"Optional. 'Search Engine Friendly' title. This will appear at the top of the" +" browser window." +msgstr "Προαιρετικό. Τίτλος που είναι 'φιλικός προς τις μηχανές αναζήτησης'. Θα εμφανιστεί στην κορυφή του παραθύρου." -#: models.py:286 +#: models.py:288 msgid "" "Whether a link to this page will appear in automatically generated menus" -msgstr "" -"Επιλέξτε αν μια σύνδεση σε αυτή τη σελίδα θα εμφανιστεί στα μενού που " -"δημιουργούνται αυτόματα" +msgstr "Επιλέξτε αν μια σύνδεση σε αυτή τη σελίδα θα εμφανιστεί στα μενού που δημιουργούνται αυτόματα" -#: models.py:289 +#: models.py:291 msgid "Go live date/time" msgstr "" -#: models.py:289 models.py:290 -msgid "Please add a date-time in the form YYYY-MM-DD hh:mm." +#: models.py:291 models.py:292 +msgid "Please add a date-time in the form YYYY-MM-DD hh:mm:ss." msgstr "" -#: models.py:290 +#: models.py:292 msgid "Expiry date/time" msgstr "" -#: models.py:559 -#, fuzzy +#: models.py:564 msgid "name '{0}' (used in subpage_types list) is not defined." -msgstr "το όνομα '%s' (που χρησιμοποιείται στη λίστα) δεν έχει οριστεί." +msgstr "" diff --git a/wagtail/wagtailcore/locale/en/LC_MESSAGES/django.mo b/wagtail/wagtailcore/locale/en/LC_MESSAGES/django.mo index 4b726f7d6..3b83aafe9 100644 Binary files a/wagtail/wagtailcore/locale/en/LC_MESSAGES/django.mo and b/wagtail/wagtailcore/locale/en/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailcore/locale/en/LC_MESSAGES/django.po b/wagtail/wagtailcore/locale/en/LC_MESSAGES/django.po index 7d99eb3e3..c4bf27524 100644 --- a/wagtail/wagtailcore/locale/en/LC_MESSAGES/django.po +++ b/wagtail/wagtailcore/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:42+0000\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -17,63 +17,63 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: models.py:44 +#: models.py:46 msgid "" "Set this to something other than 80 if you need a specific port number to " "appear in URLs (e.g. development on port 8000). Does not affect request " "handling (so port forwarding still works)." msgstr "" -#: models.py:46 +#: models.py:48 msgid "" "If true, this site will handle requests for all other hostnames that do not " "have a site entry of their own" msgstr "" -#: models.py:107 +#: models.py:109 #, python-format msgid "" "%(hostname)s is already configured as the default site. You must unset that " "before you can save this site as default." msgstr "" -#: models.py:275 +#: models.py:277 msgid "The page title as you'd like it to be seen by the public" msgstr "" -#: models.py:276 +#: models.py:278 msgid "" "The name of the page as it will appear in URLs e.g http://domain.com/blog/" "[my-slug]/" msgstr "" -#: models.py:285 +#: models.py:287 msgid "Page title" msgstr "" -#: models.py:285 +#: models.py:287 msgid "" "Optional. 'Search Engine Friendly' title. This will appear at the top of the " "browser window." msgstr "" -#: models.py:286 +#: models.py:288 msgid "" "Whether a link to this page will appear in automatically generated menus" msgstr "" -#: models.py:289 +#: models.py:291 msgid "Go live date/time" msgstr "" -#: models.py:289 models.py:290 -msgid "Please add a date-time in the form YYYY-MM-DD hh:mm." +#: models.py:291 models.py:292 +msgid "Please add a date-time in the form YYYY-MM-DD hh:mm:ss." msgstr "" -#: models.py:290 +#: models.py:292 msgid "Expiry date/time" msgstr "" -#: models.py:559 +#: models.py:564 msgid "name '{0}' (used in subpage_types list) is not defined." msgstr "" diff --git a/wagtail/wagtailcore/locale/es/LC_MESSAGES/django.mo b/wagtail/wagtailcore/locale/es/LC_MESSAGES/django.mo index af0f4cf48..9ab7329f7 100644 Binary files a/wagtail/wagtailcore/locale/es/LC_MESSAGES/django.mo and b/wagtail/wagtailcore/locale/es/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailcore/locale/es/LC_MESSAGES/django.po b/wagtail/wagtailcore/locale/es/LC_MESSAGES/django.po index 00c9c6719..05bc60286 100644 --- a/wagtail/wagtailcore/locale/es/LC_MESSAGES/django.po +++ b/wagtail/wagtailcore/locale/es/LC_MESSAGES/django.po @@ -1,95 +1,84 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # fooflare <amos.oviedo@gmail.com>, 2014 # fooflare <amos.oviedo@gmail.com>, 2014 # fooflare <amos.oviedo@gmail.com>, 2014 -# unaizalakain <unai@gisa-elkartea.org>, 2014 -# unaizalakain <unai@gisa-elkartea.org>, 2014 +# Unai Zalakain <unai@gisa-elkartea.org>, 2014 +# Unai Zalakain <unai@gisa-elkartea.org>, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:42+0000\n" -"PO-Revision-Date: 2014-02-27 09:22+0000\n" -"Last-Translator: fooflare <amos.oviedo@gmail.com>\n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/wagtail/language/" -"es/)\n" -"Language: es\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Spanish (http://www.transifex.com/projects/p/wagtail/language/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: models.py:44 +#: models.py:46 msgid "" "Set this to something other than 80 if you need a specific port number to " "appear in URLs (e.g. development on port 8000). Does not affect request " "handling (so port forwarding still works)." -msgstr "" -"Cambia esto a algo que no sea 80 si necesitas que un puerto específico " -"aparezca en las URLs (p.e. desarrollo en el puerto 8000). Esto no afecta al " -"manejo de solicitudes (así que la redirección de puertos sigue funcionando)." +msgstr "Cambia esto a algo que no sea 80 si necesitas que un puerto específico aparezca en las URLs (p.e. desarrollo en el puerto 8000). Esto no afecta al manejo de solicitudes (así que la redirección de puertos sigue funcionando)." -#: models.py:46 +#: models.py:48 msgid "" "If true, this site will handle requests for all other hostnames that do not " "have a site entry of their own" -msgstr "" -"Si afirmativo, este sitio manejará solicitudes para todos los demás " -"hostnames que no tengan un site por sí mismos" +msgstr "Si afirmativo, este sitio manejará solicitudes para todos los demás hostnames que no tengan un site por sí mismos" -#: models.py:107 +#: models.py:109 #, python-format msgid "" "%(hostname)s is already configured as the default site. You must unset that " "before you can save this site as default." msgstr "" -#: models.py:275 +#: models.py:277 msgid "The page title as you'd like it to be seen by the public" msgstr "El título de la página como quieres que sea visto por el público" -#: models.py:276 +#: models.py:278 msgid "" -"The name of the page as it will appear in URLs e.g http://domain.com/blog/" -"[my-slug]/" -msgstr "" -"El nombre de la página tal como aparecerá en URLs p.ej. http://domain.com/" -"blog/[my-slug]/" +"The name of the page as it will appear in URLs e.g http://domain.com/blog" +"/[my-slug]/" +msgstr "El nombre de la página tal como aparecerá en URLs p.ej. http://domain.com/blog/[my-slug]/" -#: models.py:285 +#: models.py:287 msgid "Page title" msgstr "Título de la página" -#: models.py:285 +#: models.py:287 msgid "" -"Optional. 'Search Engine Friendly' title. This will appear at the top of the " -"browser window." -msgstr "" -"Opcional. Título 'Amigable para el Motor de Búsqueda'. Aparecerá en la parte " -"superior de la ventana del navegador." +"Optional. 'Search Engine Friendly' title. This will appear at the top of the" +" browser window." +msgstr "Opcional. Título 'Amigable para el Motor de Búsqueda'. Aparecerá en la parte superior de la ventana del navegador." -#: models.py:286 +#: models.py:288 msgid "" "Whether a link to this page will appear in automatically generated menus" msgstr "Un enlace a esta página aparecerá en menús generados automáticamente" -#: models.py:289 +#: models.py:291 msgid "Go live date/time" msgstr "" -#: models.py:289 models.py:290 -msgid "Please add a date-time in the form YYYY-MM-DD hh:mm." +#: models.py:291 models.py:292 +msgid "Please add a date-time in the form YYYY-MM-DD hh:mm:ss." msgstr "" -#: models.py:290 +#: models.py:292 msgid "Expiry date/time" msgstr "" -#: models.py:559 -#, fuzzy +#: models.py:564 msgid "name '{0}' (used in subpage_types list) is not defined." -msgstr "nombre '%s' (usado en la lista de subpage_types) no está definido." +msgstr "" diff --git a/wagtail/wagtailcore/locale/eu/LC_MESSAGES/django.mo b/wagtail/wagtailcore/locale/eu/LC_MESSAGES/django.mo index cf12d44d2..972e8348c 100644 Binary files a/wagtail/wagtailcore/locale/eu/LC_MESSAGES/django.mo and b/wagtail/wagtailcore/locale/eu/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailcore/locale/eu/LC_MESSAGES/django.po b/wagtail/wagtailcore/locale/eu/LC_MESSAGES/django.po index d5ed41484..cbe69e338 100644 --- a/wagtail/wagtailcore/locale/eu/LC_MESSAGES/django.po +++ b/wagtail/wagtailcore/locale/eu/LC_MESSAGES/django.po @@ -1,80 +1,79 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:42+0000\n" -"PO-Revision-Date: 2014-02-24 22:36+0000\n" -"Last-Translator: tomdyson <tom@torchbox.com>\n" -"Language-Team: Basque (http://www.transifex.com/projects/p/wagtail/language/" -"eu/)\n" -"Language: eu\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Basque (http://www.transifex.com/projects/p/wagtail/language/eu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: eu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: models.py:44 +#: models.py:46 msgid "" "Set this to something other than 80 if you need a specific port number to " "appear in URLs (e.g. development on port 8000). Does not affect request " "handling (so port forwarding still works)." msgstr "" -#: models.py:46 +#: models.py:48 msgid "" "If true, this site will handle requests for all other hostnames that do not " "have a site entry of their own" msgstr "" -#: models.py:107 +#: models.py:109 #, python-format msgid "" "%(hostname)s is already configured as the default site. You must unset that " "before you can save this site as default." msgstr "" -#: models.py:275 +#: models.py:277 msgid "The page title as you'd like it to be seen by the public" msgstr "" -#: models.py:276 +#: models.py:278 msgid "" -"The name of the page as it will appear in URLs e.g http://domain.com/blog/" -"[my-slug]/" +"The name of the page as it will appear in URLs e.g http://domain.com/blog" +"/[my-slug]/" msgstr "" -#: models.py:285 +#: models.py:287 msgid "Page title" msgstr "" -#: models.py:285 +#: models.py:287 msgid "" -"Optional. 'Search Engine Friendly' title. This will appear at the top of the " -"browser window." +"Optional. 'Search Engine Friendly' title. This will appear at the top of the" +" browser window." msgstr "" -#: models.py:286 +#: models.py:288 msgid "" "Whether a link to this page will appear in automatically generated menus" msgstr "" -#: models.py:289 +#: models.py:291 msgid "Go live date/time" msgstr "" -#: models.py:289 models.py:290 -msgid "Please add a date-time in the form YYYY-MM-DD hh:mm." +#: models.py:291 models.py:292 +msgid "Please add a date-time in the form YYYY-MM-DD hh:mm:ss." msgstr "" -#: models.py:290 +#: models.py:292 msgid "Expiry date/time" msgstr "" -#: models.py:559 +#: models.py:564 msgid "name '{0}' (used in subpage_types list) is not defined." msgstr "" diff --git a/wagtail/wagtailcore/locale/fr/LC_MESSAGES/django.mo b/wagtail/wagtailcore/locale/fr/LC_MESSAGES/django.mo index 8f9bf6860..0ceed37cd 100644 Binary files a/wagtail/wagtailcore/locale/fr/LC_MESSAGES/django.mo and b/wagtail/wagtailcore/locale/fr/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailcore/locale/fr/LC_MESSAGES/django.po b/wagtail/wagtailcore/locale/fr/LC_MESSAGES/django.po index 0ef2ab822..cc75fb902 100644 --- a/wagtail/wagtailcore/locale/fr/LC_MESSAGES/django.po +++ b/wagtail/wagtailcore/locale/fr/LC_MESSAGES/django.po @@ -1,90 +1,80 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # nahuel, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:42+0000\n" -"PO-Revision-Date: 2014-03-18 22:47+0000\n" -"Last-Translator: nahuel\n" -"Language-Team: French (http://www.transifex.com/projects/p/wagtail/language/" -"fr/)\n" -"Language: fr\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: French (http://www.transifex.com/projects/p/wagtail/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: models.py:44 +#: models.py:46 msgid "" "Set this to something other than 80 if you need a specific port number to " "appear in URLs (e.g. development on port 8000). Does not affect request " "handling (so port forwarding still works)." -msgstr "" -"Définissez cette valeur à autre chose que 80 si vous avez besoin qu'un port " -"spécifique apparaisse dans les URLs (e.g. développement sur le port 8000). " -"Ceci n'affecte pas la prise en charge des requêtes (les redirections de port " -"continuent de fonctionner)." +msgstr "Définissez cette valeur à autre chose que 80 si vous avez besoin qu'un port spécifique apparaisse dans les URLs (e.g. développement sur le port 8000). Ceci n'affecte pas la prise en charge des requêtes (les redirections de port continuent de fonctionner)." -#: models.py:46 +#: models.py:48 msgid "" "If true, this site will handle requests for all other hostnames that do not " "have a site entry of their own" msgstr "" -#: models.py:107 +#: models.py:109 #, python-format msgid "" "%(hostname)s is already configured as the default site. You must unset that " "before you can save this site as default." msgstr "" -#: models.py:275 +#: models.py:277 msgid "The page title as you'd like it to be seen by the public" msgstr "Le titre de la page comme vous souhaiteriez que les lecteurs la voient" -#: models.py:276 +#: models.py:278 msgid "" -"The name of the page as it will appear in URLs e.g http://domain.com/blog/" -"[my-slug]/" -msgstr "" -"Le nom de la page comme elle apparaîtra dans l'URL e.g http://domain.com/" -"blog/[my-slug]/" +"The name of the page as it will appear in URLs e.g http://domain.com/blog" +"/[my-slug]/" +msgstr "Le nom de la page comme elle apparaîtra dans l'URL e.g http://domain.com/blog/[my-slug]/" -#: models.py:285 +#: models.py:287 msgid "Page title" msgstr "Titre de la page" -#: models.py:285 +#: models.py:287 msgid "" -"Optional. 'Search Engine Friendly' title. This will appear at the top of the " -"browser window." +"Optional. 'Search Engine Friendly' title. This will appear at the top of the" +" browser window." msgstr "" -#: models.py:286 +#: models.py:288 msgid "" "Whether a link to this page will appear in automatically generated menus" -msgstr "" -"Si un lien vers cette page devra apparaître dans les menus générés " -"automatiquement" +msgstr "Si un lien vers cette page devra apparaître dans les menus générés automatiquement" -#: models.py:289 +#: models.py:291 msgid "Go live date/time" msgstr "" -#: models.py:289 models.py:290 -msgid "Please add a date-time in the form YYYY-MM-DD hh:mm." +#: models.py:291 models.py:292 +msgid "Please add a date-time in the form YYYY-MM-DD hh:mm:ss." msgstr "" -#: models.py:290 +#: models.py:292 msgid "Expiry date/time" msgstr "" -#: models.py:559 -#, fuzzy +#: models.py:564 msgid "name '{0}' (used in subpage_types list) is not defined." -msgstr "le nom '%s' (utilisé dans la liste subpage_types) n'est pas défini." +msgstr "" diff --git a/wagtail/wagtailcore/locale/gl/LC_MESSAGES/django.mo b/wagtail/wagtailcore/locale/gl/LC_MESSAGES/django.mo index 44ec3a08e..d9f4d84ce 100644 Binary files a/wagtail/wagtailcore/locale/gl/LC_MESSAGES/django.mo and b/wagtail/wagtailcore/locale/gl/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailcore/locale/gl/LC_MESSAGES/django.po b/wagtail/wagtailcore/locale/gl/LC_MESSAGES/django.po index 8686ab164..4201d9b9e 100644 --- a/wagtail/wagtailcore/locale/gl/LC_MESSAGES/django.po +++ b/wagtail/wagtailcore/locale/gl/LC_MESSAGES/django.po @@ -1,91 +1,80 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # fooflare <amos.oviedo@gmail.com>, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:42+0000\n" -"PO-Revision-Date: 2014-03-23 10:32+0000\n" -"Last-Translator: fooflare <amos.oviedo@gmail.com>\n" -"Language-Team: Galician (http://www.transifex.com/projects/p/wagtail/" -"language/gl/)\n" -"Language: gl\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Galician (http://www.transifex.com/projects/p/wagtail/language/gl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: gl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: models.py:44 +#: models.py:46 msgid "" "Set this to something other than 80 if you need a specific port number to " "appear in URLs (e.g. development on port 8000). Does not affect request " "handling (so port forwarding still works)." -msgstr "" -"Cambia isto a algo que non sexa o 80 se necesitas que un porto específico " -"apareza nas URLs (p.e. desenvolvemento no porto 8000). Isto non afecta ao " -"manexo de solicitudes (así que a redirección de portos segue funcionando)." +msgstr "Cambia isto a algo que non sexa o 80 se necesitas que un porto específico apareza nas URLs (p.e. desenvolvemento no porto 8000). Isto non afecta ao manexo de solicitudes (así que a redirección de portos segue funcionando)." -#: models.py:46 +#: models.py:48 msgid "" "If true, this site will handle requests for all other hostnames that do not " "have a site entry of their own" -msgstr "" -"Se é afirmativo, este sitio manexará solicitudes para todos os demais nomes " -"de host que non teñan unha entrada por si mesmos" +msgstr "Se é afirmativo, este sitio manexará solicitudes para todos os demais nomes de host que non teñan unha entrada por si mesmos" -#: models.py:107 +#: models.py:109 #, python-format msgid "" "%(hostname)s is already configured as the default site. You must unset that " "before you can save this site as default." msgstr "" -#: models.py:275 +#: models.py:277 msgid "The page title as you'd like it to be seen by the public" msgstr "O título da páxina como queres que sexa visto polo público" -#: models.py:276 +#: models.py:278 msgid "" -"The name of the page as it will appear in URLs e.g http://domain.com/blog/" -"[my-slug]/" -msgstr "" -"O nome da páxina tal como aparecerá nas URLs p.ex. http://domain.com/blog/" -"[my-slug]/" +"The name of the page as it will appear in URLs e.g http://domain.com/blog" +"/[my-slug]/" +msgstr "O nome da páxina tal como aparecerá nas URLs p.ex. http://domain.com/blog/[my-slug]/" -#: models.py:285 +#: models.py:287 msgid "Page title" msgstr "Título da páxina" -#: models.py:285 +#: models.py:287 msgid "" -"Optional. 'Search Engine Friendly' title. This will appear at the top of the " -"browser window." -msgstr "" -"Opcional. Título 'Amigable para o Motor de Busca'. Aparecerá na parte " -"superior da ventá do navegador." +"Optional. 'Search Engine Friendly' title. This will appear at the top of the" +" browser window." +msgstr "Opcional. Título 'Amigable para o Motor de Busca'. Aparecerá na parte superior da ventá do navegador." -#: models.py:286 +#: models.py:288 msgid "" "Whether a link to this page will appear in automatically generated menus" msgstr "Un enlace a esta página aparecerá en menús xerados automáticamente" -#: models.py:289 +#: models.py:291 msgid "Go live date/time" msgstr "" -#: models.py:289 models.py:290 -msgid "Please add a date-time in the form YYYY-MM-DD hh:mm." +#: models.py:291 models.py:292 +msgid "Please add a date-time in the form YYYY-MM-DD hh:mm:ss." msgstr "" -#: models.py:290 +#: models.py:292 msgid "Expiry date/time" msgstr "" -#: models.py:559 -#, fuzzy +#: models.py:564 msgid "name '{0}' (used in subpage_types list) is not defined." -msgstr "nome '%s' (usado en la lista de subpage_types) non está definido." +msgstr "" diff --git a/wagtail/wagtailcore/locale/mn/LC_MESSAGES/django.mo b/wagtail/wagtailcore/locale/mn/LC_MESSAGES/django.mo index d7dbad6fb..7290e12fb 100644 Binary files a/wagtail/wagtailcore/locale/mn/LC_MESSAGES/django.mo and b/wagtail/wagtailcore/locale/mn/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailcore/locale/mn/LC_MESSAGES/django.po b/wagtail/wagtailcore/locale/mn/LC_MESSAGES/django.po index 68b62ebd2..064a1dabb 100644 --- a/wagtail/wagtailcore/locale/mn/LC_MESSAGES/django.po +++ b/wagtail/wagtailcore/locale/mn/LC_MESSAGES/django.po @@ -1,81 +1,80 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: -# delgermurun <pdelgermurun@gmail.com>, 2014 +# Delgermurun Purevkhuuu <info@delgermurun.com>, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:42+0000\n" -"PO-Revision-Date: 2014-03-04 05:03+0000\n" -"Last-Translator: delgermurun <pdelgermurun@gmail.com>\n" -"Language-Team: Mongolian (http://www.transifex.com/projects/p/wagtail/" -"language/mn/)\n" -"Language: mn\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Mongolian (http://www.transifex.com/projects/p/wagtail/language/mn/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: mn\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: models.py:44 +#: models.py:46 msgid "" "Set this to something other than 80 if you need a specific port number to " "appear in URLs (e.g. development on port 8000). Does not affect request " "handling (so port forwarding still works)." msgstr "" -#: models.py:46 +#: models.py:48 msgid "" "If true, this site will handle requests for all other hostnames that do not " "have a site entry of their own" msgstr "" -#: models.py:107 +#: models.py:109 #, python-format msgid "" "%(hostname)s is already configured as the default site. You must unset that " "before you can save this site as default." msgstr "" -#: models.py:275 +#: models.py:277 msgid "The page title as you'd like it to be seen by the public" msgstr "" -#: models.py:276 +#: models.py:278 msgid "" -"The name of the page as it will appear in URLs e.g http://domain.com/blog/" -"[my-slug]/" +"The name of the page as it will appear in URLs e.g http://domain.com/blog" +"/[my-slug]/" msgstr "" -#: models.py:285 +#: models.py:287 msgid "Page title" msgstr "Хуудасны гарчиг" -#: models.py:285 +#: models.py:287 msgid "" -"Optional. 'Search Engine Friendly' title. This will appear at the top of the " -"browser window." +"Optional. 'Search Engine Friendly' title. This will appear at the top of the" +" browser window." msgstr "" -#: models.py:286 +#: models.py:288 msgid "" "Whether a link to this page will appear in automatically generated menus" msgstr "" -#: models.py:289 +#: models.py:291 msgid "Go live date/time" msgstr "" -#: models.py:289 models.py:290 -msgid "Please add a date-time in the form YYYY-MM-DD hh:mm." +#: models.py:291 models.py:292 +msgid "Please add a date-time in the form YYYY-MM-DD hh:mm:ss." msgstr "" -#: models.py:290 +#: models.py:292 msgid "Expiry date/time" msgstr "" -#: models.py:559 +#: models.py:564 msgid "name '{0}' (used in subpage_types list) is not defined." msgstr "" diff --git a/wagtail/wagtailcore/locale/pl/LC_MESSAGES/django.mo b/wagtail/wagtailcore/locale/pl/LC_MESSAGES/django.mo index 784f46112..60c93acf4 100644 Binary files a/wagtail/wagtailcore/locale/pl/LC_MESSAGES/django.mo and b/wagtail/wagtailcore/locale/pl/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailcore/locale/pl/LC_MESSAGES/django.po b/wagtail/wagtailcore/locale/pl/LC_MESSAGES/django.po index 93f803a5a..d0a696b89 100644 --- a/wagtail/wagtailcore/locale/pl/LC_MESSAGES/django.po +++ b/wagtail/wagtailcore/locale/pl/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # utek <mail@utek.pl>, 2014 # utek <mail@utek.pl>, 2014 @@ -9,86 +9,73 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:42+0000\n" -"PO-Revision-Date: 2014-02-23 10:22+0000\n" -"Last-Translator: utek <mail@utek.pl>\n" -"Language-Team: Polish (http://www.transifex.com/projects/p/wagtail/language/" -"pl/)\n" -"Language: pl\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Polish (http://www.transifex.com/projects/p/wagtail/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2);\n" +"Language: pl\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: models.py:44 +#: models.py:46 msgid "" "Set this to something other than 80 if you need a specific port number to " "appear in URLs (e.g. development on port 8000). Does not affect request " "handling (so port forwarding still works)." -msgstr "" -"Ustaw na inną wartość niż 80 jeżeli istnieje potrzeba pojawienia się " -"konkretnego portu w URLach (np. port wersji roboczej 8000). Nie ma wpływu na " -"obsługę żądań (przekierowanie portów będzie nadal działało)." +msgstr "Ustaw na inną wartość niż 80 jeżeli istnieje potrzeba pojawienia się konkretnego portu w URLach (np. port wersji roboczej 8000). Nie ma wpływu na obsługę żądań (przekierowanie portów będzie nadal działało)." -#: models.py:46 +#: models.py:48 msgid "" "If true, this site will handle requests for all other hostnames that do not " "have a site entry of their own" -msgstr "" -"Wartość true sprawi, że ta strona będzie obsługiwała żądania wszystkich " -"innych hostów, które nie mają ustawionej strony." +msgstr "Wartość true sprawi, że ta strona będzie obsługiwała żądania wszystkich innych hostów, które nie mają ustawionej strony." -#: models.py:107 +#: models.py:109 #, python-format msgid "" "%(hostname)s is already configured as the default site. You must unset that " "before you can save this site as default." msgstr "" -#: models.py:275 +#: models.py:277 msgid "The page title as you'd like it to be seen by the public" msgstr "Tytuł strony jaki chcesz żeby był widoczny publicznie." -#: models.py:276 +#: models.py:278 msgid "" -"The name of the page as it will appear in URLs e.g http://domain.com/blog/" -"[my-slug]/" -msgstr "" -"Nazwa strony, która będzie wyświetlana w URLach np. http://domain.com/blog/" -"[my-slug]/" +"The name of the page as it will appear in URLs e.g http://domain.com/blog" +"/[my-slug]/" +msgstr "Nazwa strony, która będzie wyświetlana w URLach np. http://domain.com/blog/[my-slug]/" -#: models.py:285 +#: models.py:287 msgid "Page title" msgstr "Tytuł strony" -#: models.py:285 +#: models.py:287 msgid "" -"Optional. 'Search Engine Friendly' title. This will appear at the top of the " -"browser window." -msgstr "" -"Opcjonalne. Tytuł 'przyjazny wyszukiwarkom'. Będzie widoczny się na górze " -"okna przeglądarki." +"Optional. 'Search Engine Friendly' title. This will appear at the top of the" +" browser window." +msgstr "Opcjonalne. Tytuł 'przyjazny wyszukiwarkom'. Będzie widoczny się na górze okna przeglądarki." -#: models.py:286 +#: models.py:288 msgid "" "Whether a link to this page will appear in automatically generated menus" -msgstr "" -"Czy link do tej strony zostanie wyświetlony w menu tworzonym automatycznie." +msgstr "Czy link do tej strony zostanie wyświetlony w menu tworzonym automatycznie." -#: models.py:289 +#: models.py:291 msgid "Go live date/time" msgstr "" -#: models.py:289 models.py:290 -msgid "Please add a date-time in the form YYYY-MM-DD hh:mm." +#: models.py:291 models.py:292 +msgid "Please add a date-time in the form YYYY-MM-DD hh:mm:ss." msgstr "" -#: models.py:290 +#: models.py:292 msgid "Expiry date/time" msgstr "" -#: models.py:559 -#, fuzzy +#: models.py:564 msgid "name '{0}' (used in subpage_types list) is not defined." -msgstr "nazwa '%s' (używana w liście subpage_types) nie jest zdefiniowana." +msgstr "" diff --git a/wagtail/wagtailcore/locale/ro/LC_MESSAGES/django.mo b/wagtail/wagtailcore/locale/ro/LC_MESSAGES/django.mo index 7e737e460..22c711e9e 100644 Binary files a/wagtail/wagtailcore/locale/ro/LC_MESSAGES/django.mo and b/wagtail/wagtailcore/locale/ro/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailcore/locale/ro/LC_MESSAGES/django.po b/wagtail/wagtailcore/locale/ro/LC_MESSAGES/django.po index efe4bad51..d6c9a1902 100644 --- a/wagtail/wagtailcore/locale/ro/LC_MESSAGES/django.po +++ b/wagtail/wagtailcore/locale/ro/LC_MESSAGES/django.po @@ -1,95 +1,80 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: -# zerolab, 2014 +# Dan Braghis, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:42+0000\n" -"PO-Revision-Date: 2014-02-24 22:29+0000\n" -"Last-Translator: zerolab\n" -"Language-Team: Romanian (http://www.transifex.com/projects/p/wagtail/" -"language/ro/)\n" -"Language: ro\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Romanian (http://www.transifex.com/projects/p/wagtail/language/ro/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?" -"2:1));\n" +"Language: ro\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" -#: models.py:44 +#: models.py:46 msgid "" "Set this to something other than 80 if you need a specific port number to " "appear in URLs (e.g. development on port 8000). Does not affect request " "handling (so port forwarding still works)." -msgstr "" -"Dacă aveți nevoie ca un număr de port specific să apară în adrese de " -"internet (de exemplu, dezvoltare pe portul 8000) setați aceasta la altceva " -"decât 80. Nu influențează gestionarea solicitărilor și transmiterile de port " -"vor continua să funcționeze." +msgstr "Dacă aveți nevoie ca un număr de port specific să apară în adrese de internet (de exemplu, dezvoltare pe portul 8000) setați aceasta la altceva decât 80. Nu influențează gestionarea solicitărilor și transmiterile de port vor continua să funcționeze." -#: models.py:46 +#: models.py:48 msgid "" "If true, this site will handle requests for all other hostnames that do not " "have a site entry of their own" -msgstr "" -"Dacă e 'true', acest sit va gestiona solicitări pentru toate hostname-urile " -"fără setări separate" +msgstr "Dacă e 'true', acest sit va gestiona solicitări pentru toate hostname-urile fără setări separate" -#: models.py:107 +#: models.py:109 #, python-format msgid "" "%(hostname)s is already configured as the default site. You must unset that " "before you can save this site as default." msgstr "" -#: models.py:275 +#: models.py:277 msgid "The page title as you'd like it to be seen by the public" msgstr "Titlul paginii așa cum doriți să fie vizibil public" -#: models.py:276 +#: models.py:278 msgid "" -"The name of the page as it will appear in URLs e.g http://domain.com/blog/" -"[my-slug]/" -msgstr "" -"Numele paginii așa cum va apărea în adrese. De exemplu, http://domain.com/" -"blog/[my-slug]/" +"The name of the page as it will appear in URLs e.g http://domain.com/blog" +"/[my-slug]/" +msgstr "Numele paginii așa cum va apărea în adrese. De exemplu, http://domain.com/blog/[my-slug]/" -#: models.py:285 +#: models.py:287 msgid "Page title" msgstr "Titlu pagină" -#: models.py:285 +#: models.py:287 msgid "" -"Optional. 'Search Engine Friendly' title. This will appear at the top of the " -"browser window." -msgstr "" -"Opțional. Titlu favorabil motoarelor de căutare. Apare în partea de sus a " -"browserului." +"Optional. 'Search Engine Friendly' title. This will appear at the top of the" +" browser window." +msgstr "Opțional. Titlu favorabil motoarelor de căutare. Apare în partea de sus a browserului." -#: models.py:286 +#: models.py:288 msgid "" "Whether a link to this page will appear in automatically generated menus" -msgstr "" -"Dacă un link către această pagină va apărea în meniurile generate în mod " -"automat" +msgstr "Dacă un link către această pagină va apărea în meniurile generate în mod automat" -#: models.py:289 +#: models.py:291 msgid "Go live date/time" msgstr "" -#: models.py:289 models.py:290 -msgid "Please add a date-time in the form YYYY-MM-DD hh:mm." +#: models.py:291 models.py:292 +msgid "Please add a date-time in the form YYYY-MM-DD hh:mm:ss." msgstr "" -#: models.py:290 +#: models.py:292 msgid "Expiry date/time" msgstr "" -#: models.py:559 -#, fuzzy +#: models.py:564 msgid "name '{0}' (used in subpage_types list) is not defined." -msgstr "numele '%s' (folosit în lista subpage_types) nu este definit." +msgstr "" diff --git a/wagtail/wagtailcore/locale/zh/LC_MESSAGES/django.mo b/wagtail/wagtailcore/locale/zh/LC_MESSAGES/django.mo index 64499c7a8..003a8aaef 100644 Binary files a/wagtail/wagtailcore/locale/zh/LC_MESSAGES/django.mo and b/wagtail/wagtailcore/locale/zh/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailcore/locale/zh/LC_MESSAGES/django.po b/wagtail/wagtailcore/locale/zh/LC_MESSAGES/django.po index c2b0bf43f..4dc9d01ee 100644 --- a/wagtail/wagtailcore/locale/zh/LC_MESSAGES/django.po +++ b/wagtail/wagtailcore/locale/zh/LC_MESSAGES/django.po @@ -1,84 +1,79 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:42+0000\n" -"PO-Revision-Date: 2014-02-28 16:07+0000\n" -"Last-Translator: serafeim <serafeim@torchbox.com>\n" -"Language-Team: Chinese (http://www.transifex.com/projects/p/wagtail/language/" -"zh/)\n" -"Language: zh\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Chinese (http://www.transifex.com/projects/p/wagtail/language/zh/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: zh\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: models.py:44 +#: models.py:46 msgid "" "Set this to something other than 80 if you need a specific port number to " "appear in URLs (e.g. development on port 8000). Does not affect request " "handling (so port forwarding still works)." -msgstr "" -"如果你需要指定端口,请选择一个有别于80的端口(比如开发端口8000)。 不影响接受请" -"求 (端口转发仍然有效)" +msgstr "如果你需要指定端口,请选择一个有别于80的端口(比如开发端口8000)。 不影响接受请求 (端口转发仍然有效)" -#: models.py:46 +#: models.py:48 msgid "" "If true, this site will handle requests for all other hostnames that do not " "have a site entry of their own" -msgstr "" -"如果是真的,这个网站将处理没有一个属于自己的主机名的其他所有主机名的请求" +msgstr "如果是真的,这个网站将处理没有一个属于自己的主机名的其他所有主机名的请求" -#: models.py:107 +#: models.py:109 #, python-format msgid "" "%(hostname)s is already configured as the default site. You must unset that " "before you can save this site as default." msgstr "" -#: models.py:275 +#: models.py:277 msgid "The page title as you'd like it to be seen by the public" msgstr "页面标题,你想被大众所看到的" -#: models.py:276 +#: models.py:278 msgid "" -"The name of the page as it will appear in URLs e.g http://domain.com/blog/" -"[my-slug]/" +"The name of the page as it will appear in URLs e.g http://domain.com/blog" +"/[my-slug]/" msgstr "一个出现在URL的名字 比如 http://domain.com/blog/[my-slug]/" -#: models.py:285 +#: models.py:287 msgid "Page title" msgstr "页面标题" -#: models.py:285 +#: models.py:287 msgid "" -"Optional. 'Search Engine Friendly' title. This will appear at the top of the " -"browser window." +"Optional. 'Search Engine Friendly' title. This will appear at the top of the" +" browser window." msgstr "可选 ‘搜索引擎友好’ 标题。 这会显示在浏览器窗口顶部" -#: models.py:286 +#: models.py:288 msgid "" "Whether a link to this page will appear in automatically generated menus" msgstr "一个链接到这页的链接会显示在自动生成的菜单中" -#: models.py:289 +#: models.py:291 msgid "Go live date/time" msgstr "" -#: models.py:289 models.py:290 -msgid "Please add a date-time in the form YYYY-MM-DD hh:mm." +#: models.py:291 models.py:292 +msgid "Please add a date-time in the form YYYY-MM-DD hh:mm:ss." msgstr "" -#: models.py:290 +#: models.py:292 msgid "Expiry date/time" msgstr "" -#: models.py:559 -#, fuzzy +#: models.py:564 msgid "name '{0}' (used in subpage_types list) is not defined." -msgstr "名称为 '%s' (用于子页面类型列表) 没有被创建." +msgstr "" diff --git a/wagtail/wagtailcore/locale/zh_TW/LC_MESSAGES/django.mo b/wagtail/wagtailcore/locale/zh_TW/LC_MESSAGES/django.mo index db50be133..616f41b57 100644 Binary files a/wagtail/wagtailcore/locale/zh_TW/LC_MESSAGES/django.mo and b/wagtail/wagtailcore/locale/zh_TW/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailcore/locale/zh_TW/LC_MESSAGES/django.po b/wagtail/wagtailcore/locale/zh_TW/LC_MESSAGES/django.po index 642c496e2..3a3a2bfa6 100644 --- a/wagtail/wagtailcore/locale/zh_TW/LC_MESSAGES/django.po +++ b/wagtail/wagtailcore/locale/zh_TW/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:42+0000\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" "PO-Revision-Date: 2014-02-28 16:07+0000\n" "Last-Translator: wdv4758h <wdv4758h@gmail.com>\n" "Language-Team: \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: models.py:44 +#: models.py:46 msgid "" "Set this to something other than 80 if you need a specific port number to " "appear in URLs (e.g. development on port 8000). Does not affect request " @@ -26,58 +26,58 @@ msgstr "" "如果你需要指定 port,請選擇一個非 80 的 port number (例如: 開發中用 8000 " "port)。 不影響 request 處理 (port forwarding 仍然有效)" -#: models.py:46 +#: models.py:48 msgid "" "If true, this site will handle requests for all other hostnames that do not " "have a site entry of their own" msgstr "" "如果這是 Ture 的話,這個網站將處理其他沒有自己網站的 hostname 的 request。" -#: models.py:107 +#: models.py:109 #, python-format msgid "" "%(hostname)s is already configured as the default site. You must unset that " "before you can save this site as default." msgstr "" -#: models.py:275 +#: models.py:277 msgid "The page title as you'd like it to be seen by the public" msgstr "頁面標題 (你想讓外界看到的)" -#: models.py:276 +#: models.py:278 msgid "" "The name of the page as it will appear in URLs e.g http://domain.com/blog/" "[my-slug]/" msgstr "一個出現在 URL 的名字,例如 http://domain.com/blog/[my-slug]/" -#: models.py:285 +#: models.py:287 msgid "Page title" msgstr "頁面標題" -#: models.py:285 +#: models.py:287 msgid "" "Optional. 'Search Engine Friendly' title. This will appear at the top of the " "browser window." msgstr "(可選) '搜尋引擎友善' 標題。 這會顯示在瀏覽器的視窗最上方" -#: models.py:286 +#: models.py:288 msgid "" "Whether a link to this page will appear in automatically generated menus" msgstr "是否在自動生成的 Menu 裡顯示一個連結到此頁面" -#: models.py:289 +#: models.py:291 msgid "Go live date/time" msgstr "" -#: models.py:289 models.py:290 -msgid "Please add a date-time in the form YYYY-MM-DD hh:mm." +#: models.py:291 models.py:292 +msgid "Please add a date-time in the form YYYY-MM-DD hh:mm:ss." msgstr "" -#: models.py:290 +#: models.py:292 msgid "Expiry date/time" msgstr "" -#: models.py:559 +#: models.py:564 #, fuzzy msgid "name '{0}' (used in subpage_types list) is not defined." msgstr "'%s' (用於子頁面類型列表) 沒有被建立。" diff --git a/wagtail/wagtailcore/management/commands/publish_scheduled_pages.py b/wagtail/wagtailcore/management/commands/publish_scheduled_pages.py index 9a69f5f2e..d1ec5eecb 100644 --- a/wagtail/wagtailcore/management/commands/publish_scheduled_pages.py +++ b/wagtail/wagtailcore/management/commands/publish_scheduled_pages.py @@ -5,7 +5,9 @@ from optparse import make_option from django.core.management.base import BaseCommand from django.utils import dateparse, timezone + from wagtail.wagtailcore.models import Page, PageRevision +from wagtail.wagtailcore.signals import page_published, page_unpublished def revision_date_expired(r): @@ -54,8 +56,16 @@ class Command(BaseCommand): else: print("No expired pages to be deactivated found.") else: + # need to get the list of expired pages before the update, + # so that we can fire the page_unpublished signal on them afterwards + expired_pages_list = list(expired_pages) + expired_pages.update(expired=True, live=False) + # Fire page_unpublished signal for all expired pages + for page in expired_pages_list: + page_unpublished.send(sender=page.specific_class, instance=page.specific) + # 2. get all page revisions for moderation that have been expired expired_revs = [ r for r in PageRevision.objects.filter( @@ -108,3 +118,6 @@ class Command(BaseCommand): # just run publish for the revision -- since the approved go # live datetime is before now it will make the page live rp.publish() + + # Fire page_published signal + page_published.send(sender=rp.page.specific_class, instance=rp.page.specific) diff --git a/wagtail/wagtailcore/models.py b/wagtail/wagtailcore/models.py index 60de42698..a237e16e6 100644 --- a/wagtail/wagtailcore/models.py +++ b/wagtail/wagtailcore/models.py @@ -13,6 +13,7 @@ from django.http import Http404 from django.core.cache import cache from django.core.handlers.wsgi import WSGIRequest from django.core.handlers.base import BaseHandler +from django.core.urlresolvers import reverse from django.contrib.contenttypes.models import ContentType from django.contrib.auth.models import Group from django.conf import settings @@ -25,6 +26,8 @@ from django.utils.encoding import python_2_unicode_compatible from treebeard.mp_tree import MP_Node +from wagtail.utils.deprecation import RemovedInWagtail06Warning + from wagtail.wagtailcore.utils import camelcase_to_underscore from wagtail.wagtailcore.query import PageQuerySet from wagtail.wagtailcore.url_routing import RouteResult @@ -151,7 +154,7 @@ def get_leaf_page_content_type_ids(): get_leaf_page_content_type_ids is deprecated, as it treats pages without an explicit subpage_types setting as 'leaf' pages. Code that calls get_leaf_page_content_type_ids must be rewritten to avoid this incorrect assumption. - """, DeprecationWarning) + """, RemovedInWagtail06Warning) return [ content_type.id for content_type in get_page_types() @@ -163,7 +166,7 @@ def get_navigable_page_content_type_ids(): get_navigable_page_content_type_ids is deprecated, as it treats pages without an explicit subpage_types setting as 'leaf' pages. Code that calls get_navigable_page_content_type_ids must be rewritten to avoid this incorrect assumption. - """, DeprecationWarning) + """, RemovedInWagtail06Warning) return [ content_type.id for content_type in get_page_types() @@ -286,8 +289,8 @@ class Page(six.with_metaclass(PageBase, MP_Node, ClusterableModel, indexed.Index show_in_menus = models.BooleanField(default=False, help_text=_("Whether a link to this page will appear in automatically generated menus")) search_description = models.TextField(blank=True) - go_live_at = models.DateTimeField(verbose_name=_("Go live date/time"), help_text=_("Please add a date-time in the form YYYY-MM-DD hh:mm."), blank=True, null=True) - expire_at = models.DateTimeField(verbose_name=_("Expiry date/time"), help_text=_("Please add a date-time in the form YYYY-MM-DD hh:mm."), blank=True, null=True) + go_live_at = models.DateTimeField(verbose_name=_("Go live date/time"), help_text=_("Please add a date-time in the form YYYY-MM-DD hh:mm:ss."), blank=True, null=True) + expire_at = models.DateTimeField(verbose_name=_("Expiry date/time"), help_text=_("Please add a date-time in the form YYYY-MM-DD hh:mm:ss."), blank=True, null=True) expired = models.BooleanField(default=False, editable=False) search_fields = ( @@ -476,7 +479,7 @@ class Page(six.with_metaclass(PageBase, MP_Node, ClusterableModel, indexed.Index def get_other_siblings(self): warnings.warn( "The 'Page.get_other_siblings()' method has been replaced. " - "Use 'Page.get_siblings(inclusive=False)' instead.", DeprecationWarning) + "Use 'Page.get_siblings(inclusive=False)' instead.", RemovedInWagtail06Warning) # get sibling pages excluding self return self.get_siblings().exclude(id=self.id) @@ -486,7 +489,7 @@ class Page(six.with_metaclass(PageBase, MP_Node, ClusterableModel, indexed.Index """Return the full URL (including protocol / domain) to this page, or None if it is not routable""" for (id, root_path, root_url) in Site.get_site_root_paths(): if self.url_path.startswith(root_path): - return root_url + self.url_path[len(root_path) - 1:] + return root_url + reverse('wagtail_serve', args=(self.url_path[len(root_path):],)) @property def url(self): @@ -501,7 +504,7 @@ class Page(six.with_metaclass(PageBase, MP_Node, ClusterableModel, indexed.Index root_paths = Site.get_site_root_paths() for (id, root_path, root_url) in Site.get_site_root_paths(): if self.url_path.startswith(root_path): - return ('' if len(root_paths) == 1 else root_url) + self.url_path[len(root_path) - 1:] + return ('' if len(root_paths) == 1 else root_url) + reverse('wagtail_serve', args=(self.url_path[len(root_path):],)) def relative_url(self, current_site): """ @@ -511,7 +514,7 @@ class Page(six.with_metaclass(PageBase, MP_Node, ClusterableModel, indexed.Index """ for (id, root_path, root_url) in Site.get_site_root_paths(): if self.url_path.startswith(root_path): - return ('' if current_site.id == id else root_url) + self.url_path[len(root_path) - 1:] + return ('' if current_site.id == id else root_url) + reverse('wagtail_serve', args=(self.url_path[len(root_path):],)) @classmethod def search(cls, query_string, show_unpublished=False, search_title_only=False, extra_filters={}, prefetch_related=[], path=None): @@ -728,7 +731,7 @@ class Page(six.with_metaclass(PageBase, MP_Node, ClusterableModel, indexed.Index modes = self.get_page_modes() if modes is not Page.DEFAULT_PREVIEW_MODES: # User has overriden get_page_modes instead of using preview_modes - warnings.warn("Overriding get_page_modes is deprecated. Define a preview_modes property instead", DeprecationWarning) + warnings.warn("Overriding get_page_modes is deprecated. Define a preview_modes property instead", RemovedInWagtail06Warning) return modes diff --git a/wagtail/wagtailcore/rich_text.py b/wagtail/wagtailcore/rich_text.py index bd218d01d..16d64be51 100644 --- a/wagtail/wagtailcore/rich_text.py +++ b/wagtail/wagtailcore/rich_text.py @@ -157,9 +157,21 @@ LINK_HANDLERS = { } -# Prepare a whitelisting engine with custom behaviour: -# rewrite any elements with a data-embedtype or data-linktype attribute class DbWhitelister(Whitelister): + """ + A custom whitelisting engine to convert the HTML as returned by the rich text editor + into the pseudo-HTML format stored in the database (in which images, documents and other + linked objects are identified by ID rather than URL): + + * implements a 'construct_whitelister_element_rules' hook so that other apps can modify + the whitelist ruleset (e.g. to permit additional HTML elements beyond those in the base + Whitelister module); + * replaces any element with a 'data-embedtype' attribute with an <embed> element, with + attributes supplied by the handler for that type as defined in EMBED_HANDLERS; + * rewrites the attributes of any <a> element with a 'data-linktype' attribute, as + determined by the handler for that type defined in LINK_HANDLERS, while keeping the + element content intact. + """ has_loaded_custom_whitelist_rules = False @classmethod diff --git a/wagtail/wagtailcore/signals.py b/wagtail/wagtailcore/signals.py index 2508759c6..169218971 100644 --- a/wagtail/wagtailcore/signals.py +++ b/wagtail/wagtailcore/signals.py @@ -2,3 +2,4 @@ from django.dispatch import Signal page_published = Signal(providing_args=['instance']) +page_unpublished = Signal(providing_args=['instance']) diff --git a/wagtail/wagtailcore/migrations/0001_initial.py b/wagtail/wagtailcore/south_migrations/0001_initial.py similarity index 100% rename from wagtail/wagtailcore/migrations/0001_initial.py rename to wagtail/wagtailcore/south_migrations/0001_initial.py diff --git a/wagtail/wagtailcore/migrations/0002_initial_data.py b/wagtail/wagtailcore/south_migrations/0002_initial_data.py similarity index 100% rename from wagtail/wagtailcore/migrations/0002_initial_data.py rename to wagtail/wagtailcore/south_migrations/0002_initial_data.py diff --git a/wagtail/wagtailcore/migrations/0003_auto__del_unique_site_hostname__add_unique_site_hostname_port.py b/wagtail/wagtailcore/south_migrations/0003_auto__del_unique_site_hostname__add_unique_site_hostname_port.py similarity index 100% rename from wagtail/wagtailcore/migrations/0003_auto__del_unique_site_hostname__add_unique_site_hostname_port.py rename to wagtail/wagtailcore/south_migrations/0003_auto__del_unique_site_hostname__add_unique_site_hostname_port.py diff --git a/wagtail/wagtailcore/migrations/0004_fields_for_scheduled_publishing.py b/wagtail/wagtailcore/south_migrations/0004_fields_for_scheduled_publishing.py similarity index 100% rename from wagtail/wagtailcore/migrations/0004_fields_for_scheduled_publishing.py rename to wagtail/wagtailcore/south_migrations/0004_fields_for_scheduled_publishing.py diff --git a/wagtail/wagtailcore/migrations/0005_create_page_view_restriction.py b/wagtail/wagtailcore/south_migrations/0005_create_page_view_restriction.py similarity index 100% rename from wagtail/wagtailcore/migrations/0005_create_page_view_restriction.py rename to wagtail/wagtailcore/south_migrations/0005_create_page_view_restriction.py diff --git a/wagtail/wagtailforms/migrations/__init__.py b/wagtail/wagtailcore/south_migrations/__init__.py similarity index 100% rename from wagtail/wagtailforms/migrations/__init__.py rename to wagtail/wagtailcore/south_migrations/__init__.py diff --git a/wagtail/wagtailcore/templatetags/pageurl.py b/wagtail/wagtailcore/templatetags/pageurl.py index 63d2eb45e..016a77759 100644 --- a/wagtail/wagtailcore/templatetags/pageurl.py +++ b/wagtail/wagtailcore/templatetags/pageurl.py @@ -1,8 +1,11 @@ import warnings +from wagtail.utils.deprecation import RemovedInWagtail06Warning + + warnings.warn( "The pageurl tag library has been moved to wagtailcore_tags. " - "Use {% load wagtailcore_tags %} instead.", DeprecationWarning) + "Use {% load wagtailcore_tags %} instead.", RemovedInWagtail06Warning) from wagtail.wagtailcore.templatetags.wagtailcore_tags import register, pageurl diff --git a/wagtail/wagtailcore/templatetags/rich_text.py b/wagtail/wagtailcore/templatetags/rich_text.py index c1db48250..09e93d846 100644 --- a/wagtail/wagtailcore/templatetags/rich_text.py +++ b/wagtail/wagtailcore/templatetags/rich_text.py @@ -1,8 +1,11 @@ import warnings +from wagtail.utils.deprecation import RemovedInWagtail06Warning + + warnings.warn( "The rich_text tag library has been moved to wagtailcore_tags. " - "Use {% load wagtailcore_tags %} instead.", DeprecationWarning) + "Use {% load wagtailcore_tags %} instead.", RemovedInWagtail06Warning) from wagtail.wagtailcore.templatetags.wagtailcore_tags import register, richtext diff --git a/wagtail/wagtailcore/tests/test_dbwhitelister.py b/wagtail/wagtailcore/tests/test_dbwhitelister.py index 795b9637c..35e5b34b5 100644 --- a/wagtail/wagtailcore/tests/test_dbwhitelister.py +++ b/wagtail/wagtailcore/tests/test_dbwhitelister.py @@ -25,9 +25,9 @@ class TestDbWhitelister(TestCase): self.assertHtmlEqual(expected, output_html) def test_image_embed_is_rewritten(self): - input_html = '<p>OMG look at this picture of a kitten: <figure data-embedtype="image" data-id="5" data-format="image-with-caption" data-alt="A cute kitten" class="fancy-image"><img src="/media/images/kitten.jpg" width="320" height="200" alt="A cute kitten" /><figcaption>A kitten, yesterday.</figcaption></figure></p>' + input_html = '<p>OMG look at this picture of a kitten:</p><figure data-embedtype="image" data-id="5" data-format="image-with-caption" data-alt="A cute kitten" class="fancy-image"><img src="/media/images/kitten.jpg" width="320" height="200" alt="A cute kitten" /><figcaption>A kitten, yesterday.</figcaption></figure>' output_html = DbWhitelister.clean(input_html) - expected = '<p>OMG look at this picture of a kitten: <embed embedtype="image" id="5" format="image-with-caption" alt="A cute kitten" /></p>' + expected = '<p>OMG look at this picture of a kitten:</p><embed embedtype="image" id="5" format="image-with-caption" alt="A cute kitten" />' self.assertHtmlEqual(expected, output_html) def test_media_embed_is_rewritten(self): diff --git a/wagtail/wagtailcore/tests/test_management_commands.py b/wagtail/wagtailcore/tests/test_management_commands.py index ad1aa33aa..d521497dd 100644 --- a/wagtail/wagtailcore/tests/test_management_commands.py +++ b/wagtail/wagtailcore/tests/test_management_commands.py @@ -7,6 +7,7 @@ from django.core import management from django.utils import timezone from wagtail.wagtailcore.models import Page, PageRevision +from wagtail.wagtailcore.signals import page_published, page_unpublished from wagtail.tests.models import SimplePage @@ -96,6 +97,15 @@ class TestPublishScheduledPagesCommand(TestCase): self.root_page = Page.objects.get(id=2) def test_go_live_page_will_be_published(self): + # Connect a mock signal handler to page_published signal + signal_fired = [False] + signal_page = [None] + def page_published_handler(sender, instance, **kwargs): + signal_fired[0] = True + signal_page[0] = instance + page_published.connect(page_published_handler) + + page = SimplePage( title="Hello world!", slug="hello-world", @@ -116,6 +126,11 @@ class TestPublishScheduledPagesCommand(TestCase): self.assertTrue(p.live) self.assertFalse(PageRevision.objects.filter(page=p).exclude(approved_go_live_at__isnull=True).exists()) + # Check that the page_published signal was fired + self.assertTrue(signal_fired[0]) + self.assertEqual(signal_page[0], page) + self.assertEqual(signal_page[0], signal_page[0].specific) + def test_future_go_live_page_will_not_be_published(self): page = SimplePage( title="Hello world!", @@ -138,6 +153,15 @@ class TestPublishScheduledPagesCommand(TestCase): self.assertTrue(PageRevision.objects.filter(page=p).exclude(approved_go_live_at__isnull=True).exists()) def test_expired_page_will_be_unpublished(self): + # Connect a mock signal handler to page_unpublished signal + signal_fired = [False] + signal_page = [None] + def page_unpublished_handler(sender, instance, **kwargs): + signal_fired[0] = True + signal_page[0] = instance + page_unpublished.connect(page_unpublished_handler) + + page = SimplePage( title="Hello world!", slug="hello-world", @@ -155,6 +179,11 @@ class TestPublishScheduledPagesCommand(TestCase): self.assertFalse(p.live) self.assertTrue(p.expired) + # Check that the page_published signal was fired + self.assertTrue(signal_fired[0]) + self.assertEqual(signal_page[0], page) + self.assertEqual(signal_page[0], signal_page[0].specific) + def test_future_expired_page_will_not_be_unpublished(self): page = SimplePage( title="Hello world!", diff --git a/wagtail/wagtailcore/tests/test_page_model.py b/wagtail/wagtailcore/tests/test_page_model.py index af12fa705..d494b2654 100644 --- a/wagtail/wagtailcore/tests/test_page_model.py +++ b/wagtail/wagtailcore/tests/test_page_model.py @@ -1,8 +1,11 @@ import warnings from django.test import TestCase, Client +from django.test.utils import override_settings from django.http import HttpRequest, Http404 +from wagtail.utils.deprecation import RemovedInWagtail06Warning + from wagtail.wagtailcore.models import Page, Site from wagtail.tests.models import EventPage, EventIndex, SimplePage, PageWithOldStyleRouteMethod @@ -98,6 +101,16 @@ class TestSiteRouting(TestCase): class TestRouting(TestCase): fixtures = ['test.json'] + # need to clear urlresolver caches before/after tests, because we override ROOT_URLCONF + # in some tests here + def setUp(self): + from django.core.urlresolvers import clear_url_caches + clear_url_caches() + + def tearDown(self): + from django.core.urlresolvers import clear_url_caches + clear_url_caches() + def test_urls(self): default_site = Site.objects.get(is_default_site=True) homepage = Page.objects.get(url_path='/home/') @@ -132,6 +145,21 @@ class TestRouting(TestCase): self.assertEqual(christmas_page.relative_url(default_site), 'http://events.example.com/christmas/') self.assertEqual(christmas_page.relative_url(events_site), '/christmas/') + @override_settings(ROOT_URLCONF='wagtail.tests.non_root_urls') + def test_urls_with_non_root_urlconf(self): + default_site = Site.objects.get(is_default_site=True) + homepage = Page.objects.get(url_path='/home/') + christmas_page = Page.objects.get(url_path='/home/events/christmas/') + + # Basic installation only has one site configured, so page.url will return local URLs + self.assertEqual(homepage.full_url, 'http://localhost/site/') + self.assertEqual(homepage.url, '/site/') + self.assertEqual(homepage.relative_url(default_site), '/site/') + + self.assertEqual(christmas_page.full_url, 'http://localhost/site/events/christmas/') + self.assertEqual(christmas_page.url, '/site/events/christmas/') + self.assertEqual(christmas_page.relative_url(default_site), '/site/events/christmas/') + def test_request_routing(self): homepage = Page.objects.get(url_path='/home/') christmas_page = EventPage.objects.get(url_path='/home/events/christmas/') @@ -177,6 +205,16 @@ class TestServeView(TestCase): from django.core.cache import cache cache.delete('wagtail_site_root_paths') + # also need to clear urlresolver caches before/after tests, because we override + # ROOT_URLCONF in some tests here + from django.core.urlresolvers import clear_url_caches + clear_url_caches() + + def tearDown(self): + from django.core.urlresolvers import clear_url_caches + clear_url_caches() + + def test_serve(self): response = self.client.get('/events/christmas/') @@ -188,6 +226,18 @@ class TestServeView(TestCase): self.assertContains(response, '<h1>Christmas</h1>') self.assertContains(response, '<h2>Event</h2>') + @override_settings(ROOT_URLCONF='wagtail.tests.non_root_urls') + def test_serve_with_non_root_urls(self): + response = self.client.get('/site/events/christmas/') + + self.assertEqual(response.status_code, 200) + self.assertEqual(response.templates[0].name, 'tests/event_page.html') + christmas_page = EventPage.objects.get(url_path='/home/events/christmas/') + self.assertEqual(response.context['self'], christmas_page) + + self.assertContains(response, '<h1>Christmas</h1>') + self.assertContains(response, '<h2>Event</h2>') + def test_serve_unknown_page_returns_404(self): response = self.client.get('/events/quinquagesima/') self.assertEqual(response.status_code, 404) @@ -240,9 +290,9 @@ class TestServeView(TestCase): with warnings.catch_warnings(record=True) as w: response = self.client.get('/old-style-route/') - # Check that a DeprecationWarning has been triggered + # Check that a RemovedInWagtail06Warning has been triggered self.assertEqual(len(w), 1) - self.assertTrue(issubclass(w[-1].category, DeprecationWarning)) + self.assertTrue(issubclass(w[-1].category, RemovedInWagtail06Warning)) self.assertTrue("Page.route should return an instance of wagtailcore.url_routing.RouteResult" in str(w[-1].message)) expected_page = PageWithOldStyleRouteMethod.objects.get(url_path='/home/old-style-route/') diff --git a/wagtail/wagtailcore/tests/test_page_permissions.py b/wagtail/wagtailcore/tests/test_page_permissions.py index be4797d3d..be759d975 100644 --- a/wagtail/wagtailcore/tests/test_page_permissions.py +++ b/wagtail/wagtailcore/tests/test_page_permissions.py @@ -1,5 +1,5 @@ from django.test import TestCase -from django.contrib.auth.models import User +from django.contrib.auth import get_user_model from wagtail.wagtailcore.models import Page, UserPagePermissionsProxy from wagtail.tests.models import EventPage @@ -9,7 +9,7 @@ class TestPagePermission(TestCase): fixtures = ['test.json'] def test_nonpublisher_page_permissions(self): - event_editor = User.objects.get(username='eventeditor') + event_editor = get_user_model().objects.get(username='eventeditor') homepage = Page.objects.get(url_path='/home/') christmas_page = EventPage.objects.get(url_path='/home/events/christmas/') unpublished_event_page = EventPage.objects.get(url_path='/home/events/tentative-unpublished-event/') @@ -63,7 +63,7 @@ class TestPagePermission(TestCase): def test_publisher_page_permissions(self): - event_moderator = User.objects.get(username='eventmoderator') + event_moderator = get_user_model().objects.get(username='eventmoderator') homepage = Page.objects.get(url_path='/home/') christmas_page = EventPage.objects.get(url_path='/home/events/christmas/') unpublished_event_page = EventPage.objects.get(url_path='/home/events/tentative-unpublished-event/') @@ -110,7 +110,7 @@ class TestPagePermission(TestCase): self.assertFalse(unpub_perms.can_move_to(unpublished_event_page)) # cannot make page a child of itself def test_inactive_user_has_no_permissions(self): - user = User.objects.get(username='inactiveuser') + user = get_user_model().objects.get(username='inactiveuser') christmas_page = EventPage.objects.get(url_path='/home/events/christmas/') unpublished_event_page = EventPage.objects.get(url_path='/home/events/tentative-unpublished-event/') @@ -128,7 +128,7 @@ class TestPagePermission(TestCase): self.assertFalse(unpub_perms.can_move_to(christmas_page)) def test_superuser_has_full_permissions(self): - user = User.objects.get(username='superuser') + user = get_user_model().objects.get(username='superuser') homepage = Page.objects.get(url_path='/home/') root = Page.objects.get(url_path='/') unpublished_event_page = EventPage.objects.get(url_path='/home/events/tentative-unpublished-event/') @@ -166,7 +166,7 @@ class TestPagePermission(TestCase): self.assertFalse(homepage_perms.can_move_to(unpublished_event_page)) def test_editable_pages_for_user_with_add_permission(self): - event_editor = User.objects.get(username='eventeditor') + event_editor = get_user_model().objects.get(username='eventeditor') homepage = Page.objects.get(url_path='/home/') christmas_page = EventPage.objects.get(url_path='/home/events/christmas/') unpublished_event_page = EventPage.objects.get(url_path='/home/events/tentative-unpublished-event/') @@ -193,7 +193,7 @@ class TestPagePermission(TestCase): self.assertFalse(can_publish_pages) def test_editable_pages_for_user_with_edit_permission(self): - event_moderator = User.objects.get(username='eventmoderator') + event_moderator = get_user_model().objects.get(username='eventmoderator') homepage = Page.objects.get(url_path='/home/') christmas_page = EventPage.objects.get(url_path='/home/events/christmas/') unpublished_event_page = EventPage.objects.get(url_path='/home/events/tentative-unpublished-event/') @@ -220,7 +220,7 @@ class TestPagePermission(TestCase): self.assertTrue(can_publish_pages) def test_editable_pages_for_inactive_user(self): - user = User.objects.get(username='inactiveuser') + user = get_user_model().objects.get(username='inactiveuser') homepage = Page.objects.get(url_path='/home/') christmas_page = EventPage.objects.get(url_path='/home/events/christmas/') unpublished_event_page = EventPage.objects.get(url_path='/home/events/tentative-unpublished-event/') @@ -247,7 +247,7 @@ class TestPagePermission(TestCase): self.assertFalse(can_publish_pages) def test_editable_pages_for_superuser(self): - user = User.objects.get(username='superuser') + user = get_user_model().objects.get(username='superuser') homepage = Page.objects.get(url_path='/home/') christmas_page = EventPage.objects.get(url_path='/home/events/christmas/') unpublished_event_page = EventPage.objects.get(url_path='/home/events/tentative-unpublished-event/') @@ -274,7 +274,7 @@ class TestPagePermission(TestCase): self.assertTrue(can_publish_pages) def test_editable_pages_for_non_editing_user(self): - user = User.objects.get(username='admin_only_user') + user = get_user_model().objects.get(username='admin_only_user') homepage = Page.objects.get(url_path='/home/') christmas_page = EventPage.objects.get(url_path='/home/events/christmas/') unpublished_event_page = EventPage.objects.get(url_path='/home/events/tentative-unpublished-event/') diff --git a/wagtail/wagtailcore/urls.py b/wagtail/wagtailcore/urls.py index 9777dea8a..2e01bbfe0 100644 --- a/wagtail/wagtailcore/urls.py +++ b/wagtail/wagtailcore/urls.py @@ -10,5 +10,5 @@ urlpatterns = [ # a '/'. If a trailing slash is not present, we leave CommonMiddleware to # handle it as usual (i.e. redirect it to the trailing slash version if # settings.APPEND_SLASH is True) - url(r'^((?:[\w\-]+/)*)$', views.serve) + url(r'^((?:[\w\-]+/)*)$', views.serve, name='wagtail_serve') ] diff --git a/wagtail/wagtailcore/util.py b/wagtail/wagtailcore/util.py index 842fe24fa..7bbe82f57 100644 --- a/wagtail/wagtailcore/util.py +++ b/wagtail/wagtailcore/util.py @@ -1,7 +1,10 @@ import warnings +from wagtail.utils.deprecation import RemovedInWagtail06Warning + + warnings.warn( "The wagtail.wagtailcore.util module has been renamed. " - "Use wagtail.wagtailcore.utils instead.", DeprecationWarning) + "Use wagtail.wagtailcore.utils instead.", RemovedInWagtail06Warning) from .utils import * diff --git a/wagtail/wagtailcore/views.py b/wagtail/wagtailcore/views.py index b955efa54..5daa642b9 100644 --- a/wagtail/wagtailcore/views.py +++ b/wagtail/wagtailcore/views.py @@ -5,6 +5,8 @@ from django.shortcuts import get_object_or_404, redirect from django.core.urlresolvers import reverse from django.conf import settings +from wagtail.utils.deprecation import RemovedInWagtail06Warning + from wagtail.wagtailcore import hooks from wagtail.wagtailcore.models import Page, PageViewRestriction from wagtail.wagtailcore.forms import PasswordPageViewRestrictionForm @@ -21,7 +23,7 @@ def serve(request, path): if isinstance(route_result, HttpResponse): warnings.warn( "Page.route should return an instance of wagtailcore.url_routing.RouteResult, not an HttpResponse", - DeprecationWarning + RemovedInWagtail06Warning ) return route_result diff --git a/wagtail/wagtailcore/whitelist.py b/wagtail/wagtailcore/whitelist.py index 4aaff780d..dba8982fd 100644 --- a/wagtail/wagtailcore/whitelist.py +++ b/wagtail/wagtailcore/whitelist.py @@ -81,7 +81,7 @@ class Whitelister(object): def clean(cls, html): """Clean up an HTML string to contain just the allowed elements / attributes""" - doc = BeautifulSoup(html, 'lxml') + doc = BeautifulSoup(html, 'html5lib') cls.clean_node(doc, doc) return doc.decode() diff --git a/wagtail/wagtaildocs/admin_urls.py b/wagtail/wagtaildocs/admin_urls.py index 9eaa3a50e..c26826b8c 100644 --- a/wagtail/wagtaildocs/admin_urls.py +++ b/wagtail/wagtaildocs/admin_urls.py @@ -11,4 +11,5 @@ urlpatterns = [ url(r'^chooser/$', chooser.chooser, name='wagtaildocs_chooser'), url(r'^chooser/(\d+)/$', chooser.document_chosen, name='wagtaildocs_document_chosen'), url(r'^chooser/upload/$', chooser.chooser_upload, name='wagtaildocs_chooser_upload'), + url(r'^usage/(\d+)/$', documents.usage, name='wagtaildocs_document_usage'), ] diff --git a/wagtail/wagtaildocs/locale/bg/LC_MESSAGES/django.mo b/wagtail/wagtaildocs/locale/bg/LC_MESSAGES/django.mo index 83d710257..72177bf8e 100644 Binary files a/wagtail/wagtaildocs/locale/bg/LC_MESSAGES/django.mo and b/wagtail/wagtaildocs/locale/bg/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtaildocs/locale/bg/LC_MESSAGES/django.po b/wagtail/wagtaildocs/locale/bg/LC_MESSAGES/django.po index b1fa27c73..ff8ce4bd1 100644 --- a/wagtail/wagtaildocs/locale/bg/LC_MESSAGES/django.po +++ b/wagtail/wagtaildocs/locale/bg/LC_MESSAGES/django.po @@ -1,38 +1,38 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: -# LyuboslavPetrov <petrov.lyuboslav@gmail.com>, 2014 +# Lyuboslav Petrov <petrov.lyuboslav@gmail.com>, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:42+0000\n" -"PO-Revision-Date: 2014-03-14 21:12+0000\n" -"Last-Translator: serafeim <serafeim@torchbox.com>\n" -"Language-Team: Bulgarian (http://www.transifex.com/projects/p/wagtail/" -"language/bg/)\n" -"Language: bg\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Bulgarian (http://www.transifex.com/projects/p/wagtail/language/bg/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: bg\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: models.py:20 templates/wagtaildocs/documents/list.html:11 +#: models.py:21 templates/wagtaildocs/documents/list.html:11 #: templates/wagtaildocs/documents/list.html:14 +#: templates/wagtaildocs/documents/usage.html:16 msgid "Title" msgstr "Заглавие" -#: models.py:21 templates/wagtaildocs/documents/list.html:17 +#: models.py:22 templates/wagtaildocs/documents/list.html:17 msgid "File" msgstr "Файл" -#: models.py:25 +#: models.py:26 msgid "Tags" msgstr "Тагове" -#: wagtail_hooks.py:23 templates/wagtaildocs/documents/index.html:16 +#: wagtail_hooks.py:24 templates/wagtaildocs/documents/index.html:16 msgid "Documents" msgstr "Документи" @@ -67,13 +67,8 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "" -"\n" -" Има едно съвпадение\n" -" " -msgstr[1] "" -"\n" -"Има %(counter)s съвпадения" +msgstr[0] "\n Има едно съвпадение\n " +msgstr[1] "\nИма %(counter)s съвпадения" #: templates/wagtaildocs/chooser/results.html:12 msgid "Latest documents" @@ -133,11 +128,34 @@ msgstr "Качени" #: templates/wagtaildocs/documents/results.html:21 #, python-format msgid "" -"You haven't uploaded any documents. Why not <a href=" -"\"%(wagtaildocs_add_document_url)s\">upload one now</a>?" +"You haven't uploaded any documents. Why not <a " +"href=\"%(wagtaildocs_add_document_url)s\">upload one now</a>?" +msgstr "Не сте качили никакви документи. Защо не <a href=\"%(wagtaildocs_add_document_url)s\">качите един сега</a>?" + +#: templates/wagtaildocs/documents/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:26 +msgid "Edit this page" msgstr "" -"Не сте качили никакви документи. Защо не <a href=" -"\"%(wagtaildocs_add_document_url)s\">качите един сега</a>?" #: templates/wagtaildocs/edit_handlers/document_chooser_panel.html:9 msgid "Clear choice" @@ -147,22 +165,22 @@ msgstr "Изчисти избора" msgid "Choose another document" msgstr "Избери друг документ" -#: views/documents.py:36 views/documents.py:45 +#: views/documents.py:37 views/documents.py:46 msgid "Search documents" msgstr "" -#: views/documents.py:85 +#: views/documents.py:86 msgid "Document '{0}' added." msgstr "Документ '{0}' добавен." -#: views/documents.py:88 views/documents.py:117 +#: views/documents.py:89 views/documents.py:118 msgid "The document could not be saved due to errors." msgstr "Документа не бе запазен поради грешки." -#: views/documents.py:114 +#: views/documents.py:115 msgid "Document '{0}' updated" msgstr "Документа '{0}' е обновен." -#: views/documents.py:136 +#: views/documents.py:137 msgid "Document '{0}' deleted." msgstr "Документа '{0}' е изтрит." diff --git a/wagtail/wagtaildocs/locale/ca/LC_MESSAGES/django.mo b/wagtail/wagtaildocs/locale/ca/LC_MESSAGES/django.mo index f5a3507ef..cc704ed7d 100644 Binary files a/wagtail/wagtaildocs/locale/ca/LC_MESSAGES/django.mo and b/wagtail/wagtaildocs/locale/ca/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtaildocs/locale/ca/LC_MESSAGES/django.po b/wagtail/wagtaildocs/locale/ca/LC_MESSAGES/django.po index df524532c..03625463e 100644 --- a/wagtail/wagtaildocs/locale/ca/LC_MESSAGES/django.po +++ b/wagtail/wagtaildocs/locale/ca/LC_MESSAGES/django.po @@ -1,38 +1,38 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: -# Lloople <d.lloople@gmail.com>, 2014 +# David Llop <d.lloople@gmail.com>, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:42+0000\n" -"PO-Revision-Date: 2014-03-14 21:12+0000\n" -"Last-Translator: serafeim <serafeim@torchbox.com>\n" -"Language-Team: Catalan (http://www.transifex.com/projects/p/wagtail/language/" -"ca/)\n" -"Language: ca\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Catalan (http://www.transifex.com/projects/p/wagtail/language/ca/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ca\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: models.py:20 templates/wagtaildocs/documents/list.html:11 +#: models.py:21 templates/wagtaildocs/documents/list.html:11 #: templates/wagtaildocs/documents/list.html:14 +#: templates/wagtaildocs/documents/usage.html:16 msgid "Title" msgstr "Títol" -#: models.py:21 templates/wagtaildocs/documents/list.html:17 +#: models.py:22 templates/wagtaildocs/documents/list.html:17 msgid "File" msgstr "Arxiu" -#: models.py:25 +#: models.py:26 msgid "Tags" msgstr "Tags" -#: wagtail_hooks.py:23 templates/wagtaildocs/documents/index.html:16 +#: wagtail_hooks.py:24 templates/wagtaildocs/documents/index.html:16 msgid "Documents" msgstr "Documents" @@ -67,12 +67,8 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "" -"\n" -"Hi ha un resultat" -msgstr[1] "" -"\n" -"Hi han %(counter)s resultats" +msgstr[0] "\nHi ha un resultat" +msgstr[1] "\nHi han %(counter)s resultats" #: templates/wagtaildocs/chooser/results.html:12 msgid "Latest documents" @@ -132,11 +128,34 @@ msgstr "Pujat" #: templates/wagtaildocs/documents/results.html:21 #, python-format msgid "" -"You haven't uploaded any documents. Why not <a href=" -"\"%(wagtaildocs_add_document_url)s\">upload one now</a>?" +"You haven't uploaded any documents. Why not <a " +"href=\"%(wagtaildocs_add_document_url)s\">upload one now</a>?" +msgstr "No has pujat cap document. Per què no <a href=%(wagtaildocs_add_document_url)s\">pujes un ara</a>?" + +#: templates/wagtaildocs/documents/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:26 +msgid "Edit this page" msgstr "" -"No has pujat cap document. Per què no <a href=" -"%(wagtaildocs_add_document_url)s\">pujes un ara</a>?" #: templates/wagtaildocs/edit_handlers/document_chooser_panel.html:9 msgid "Clear choice" @@ -146,22 +165,22 @@ msgstr "Opció clara" msgid "Choose another document" msgstr "Escull un altre document" -#: views/documents.py:36 views/documents.py:45 +#: views/documents.py:37 views/documents.py:46 msgid "Search documents" msgstr "Cercar documents" -#: views/documents.py:85 +#: views/documents.py:86 msgid "Document '{0}' added." msgstr "Document '{0}' afegit." -#: views/documents.py:88 views/documents.py:117 +#: views/documents.py:89 views/documents.py:118 msgid "The document could not be saved due to errors." msgstr "El document no s'ha pogut desar." -#: views/documents.py:114 +#: views/documents.py:115 msgid "Document '{0}' updated" msgstr "Document '{0}' actualitzat" -#: views/documents.py:136 +#: views/documents.py:137 msgid "Document '{0}' deleted." msgstr "Document '{0}' esborrat." diff --git a/wagtail/wagtaildocs/locale/de/LC_MESSAGES/django.mo b/wagtail/wagtaildocs/locale/de/LC_MESSAGES/django.mo index e420efdb4..d439342aa 100644 Binary files a/wagtail/wagtaildocs/locale/de/LC_MESSAGES/django.mo and b/wagtail/wagtaildocs/locale/de/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtaildocs/locale/de/LC_MESSAGES/django.po b/wagtail/wagtaildocs/locale/de/LC_MESSAGES/django.po index 3039b9435..ae5dccc63 100644 --- a/wagtail/wagtaildocs/locale/de/LC_MESSAGES/django.po +++ b/wagtail/wagtaildocs/locale/de/LC_MESSAGES/django.po @@ -1,39 +1,40 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: -# jspielmann <j@spielmannsolutions.com>, 2014 +# Johannes Spielmann <j@spielmannsolutions.com>, 2014 +# karlsander <karlsander@gmail.com>, 2014 # pcraston <patrick@craston.com>, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:42+0000\n" -"PO-Revision-Date: 2014-03-24 18:54+0000\n" -"Last-Translator: pcraston <patrick@craston.com>\n" -"Language-Team: German (http://www.transifex.com/projects/p/wagtail/language/" -"de/)\n" -"Language: de\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: German (http://www.transifex.com/projects/p/wagtail/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: models.py:20 templates/wagtaildocs/documents/list.html:11 +#: models.py:21 templates/wagtaildocs/documents/list.html:11 #: templates/wagtaildocs/documents/list.html:14 +#: templates/wagtaildocs/documents/usage.html:16 msgid "Title" msgstr "Titel" -#: models.py:21 templates/wagtaildocs/documents/list.html:17 +#: models.py:22 templates/wagtaildocs/documents/list.html:17 msgid "File" msgstr "Datei" -#: models.py:25 +#: models.py:26 msgid "Tags" msgstr "Schlagwörter" -#: wagtail_hooks.py:23 templates/wagtaildocs/documents/index.html:16 +#: wagtail_hooks.py:24 templates/wagtaildocs/documents/index.html:16 msgid "Documents" msgstr "Dokumente" @@ -68,14 +69,8 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "" -"\n" -" Es gibt ein Ergebnis\n" -" " -msgstr[1] "" -"\n" -" Es gibt %(counter)s Ergebnisse\n" -" " +msgstr[0] "\n Es gibt ein Ergebnis\n " +msgstr[1] "\n Es gibt %(counter)s Ergebnisse\n " #: templates/wagtaildocs/chooser/results.html:12 msgid "Latest documents" @@ -85,8 +80,7 @@ msgstr "Neueste Dokumente" #: templates/wagtaildocs/documents/results.html:18 #, python-format msgid "Sorry, no documents match \"<em>%(query_string)s</em>\"" -msgstr "" -"Es gibt leider keine Dokumente zum Suchbegriff \"<em>%(query_string)s</em>\"" +msgstr "Es gibt leider keine Dokumente zum Suchbegriff \"<em>%(query_string)s</em>\"" #: templates/wagtaildocs/documents/_file_field.html:5 msgid "Change document:" @@ -136,11 +130,34 @@ msgstr "Hochgeladen" #: templates/wagtaildocs/documents/results.html:21 #, python-format msgid "" -"You haven't uploaded any documents. Why not <a href=" -"\"%(wagtaildocs_add_document_url)s\">upload one now</a>?" +"You haven't uploaded any documents. Why not <a " +"href=\"%(wagtaildocs_add_document_url)s\">upload one now</a>?" +msgstr "Sie haben noch keine Dokumente hochgeladen. <a href=\"%(wagtaildocs_add_document_url)s\">Laden Sie doch jetzt eins hoch!</a>" + +#: templates/wagtaildocs/documents/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:26 +msgid "Edit this page" msgstr "" -"Sie haben noch keine Dokumente hochgeladen.<a href=" -"\"%(wagtaildocs_add_document_url)s\">Laden Sie doch jetzt eins hoch!</a>" #: templates/wagtaildocs/edit_handlers/document_chooser_panel.html:9 msgid "Clear choice" @@ -150,22 +167,22 @@ msgstr "Auswahl zurücksetzen" msgid "Choose another document" msgstr "Anderes Dokument wählen" -#: views/documents.py:36 views/documents.py:45 +#: views/documents.py:37 views/documents.py:46 msgid "Search documents" msgstr "Nach Dokumenten suchen" -#: views/documents.py:85 +#: views/documents.py:86 msgid "Document '{0}' added." msgstr "Dokument '{0}' wurde hinzugefügt." -#: views/documents.py:88 views/documents.py:117 +#: views/documents.py:89 views/documents.py:118 msgid "The document could not be saved due to errors." msgstr "Aufgrund eines Fehlers konnte das Dokument nicht gespeichert werden." -#: views/documents.py:114 +#: views/documents.py:115 msgid "Document '{0}' updated" msgstr "Dokument '{0}' wurde hochgeladen" -#: views/documents.py:136 +#: views/documents.py:137 msgid "Document '{0}' deleted." msgstr "Dokument '{0}' wurde gelöscht." diff --git a/wagtail/wagtaildocs/locale/el/LC_MESSAGES/django.mo b/wagtail/wagtaildocs/locale/el/LC_MESSAGES/django.mo index c3f0f44cc..b8d5b0a38 100644 Binary files a/wagtail/wagtaildocs/locale/el/LC_MESSAGES/django.mo and b/wagtail/wagtaildocs/locale/el/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtaildocs/locale/el/LC_MESSAGES/django.po b/wagtail/wagtaildocs/locale/el/LC_MESSAGES/django.po index a2788f9ef..15b8a82e9 100644 --- a/wagtail/wagtaildocs/locale/el/LC_MESSAGES/django.po +++ b/wagtail/wagtaildocs/locale/el/LC_MESSAGES/django.po @@ -1,38 +1,38 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # serafeim <serafeim@torchbox.com>, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:42+0000\n" -"PO-Revision-Date: 2014-03-14 21:12+0000\n" -"Last-Translator: serafeim <serafeim@torchbox.com>\n" -"Language-Team: Greek (http://www.transifex.com/projects/p/wagtail/language/" -"el/)\n" -"Language: el\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Greek (http://www.transifex.com/projects/p/wagtail/language/el/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: el\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: models.py:20 templates/wagtaildocs/documents/list.html:11 +#: models.py:21 templates/wagtaildocs/documents/list.html:11 #: templates/wagtaildocs/documents/list.html:14 +#: templates/wagtaildocs/documents/usage.html:16 msgid "Title" msgstr "Τίτλος" -#: models.py:21 templates/wagtaildocs/documents/list.html:17 +#: models.py:22 templates/wagtaildocs/documents/list.html:17 msgid "File" msgstr "Αρχείο" -#: models.py:25 +#: models.py:26 msgid "Tags" msgstr "Ετικέτες" -#: wagtail_hooks.py:23 templates/wagtaildocs/documents/index.html:16 +#: wagtail_hooks.py:24 templates/wagtaildocs/documents/index.html:16 msgid "Documents" msgstr "Έγγραφα" @@ -67,14 +67,8 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "" -"\n" -" Βρέθηκε ένα αποτέλεσμα\n" -" " -msgstr[1] "" -"\n" -" Βρέθηκαν %(counter)s αποτελέσματα\n" -" " +msgstr[0] "\n Βρέθηκε ένα αποτέλεσμα\n " +msgstr[1] "\n Βρέθηκαν %(counter)s αποτελέσματα\n " #: templates/wagtaildocs/chooser/results.html:12 msgid "Latest documents" @@ -84,8 +78,7 @@ msgstr "Τελευταία έγγραφα" #: templates/wagtaildocs/documents/results.html:18 #, python-format msgid "Sorry, no documents match \"<em>%(query_string)s</em>\"" -msgstr "" -"Δε βρέθηκαν έγγραφα που να ταιριάζουν με το \"<em>%(query_string)s</em>\"" +msgstr "Δε βρέθηκαν έγγραφα που να ταιριάζουν με το \"<em>%(query_string)s</em>\"" #: templates/wagtaildocs/documents/_file_field.html:5 msgid "Change document:" @@ -135,11 +128,34 @@ msgstr "Ανεβασμένο" #: templates/wagtaildocs/documents/results.html:21 #, python-format msgid "" -"You haven't uploaded any documents. Why not <a href=" -"\"%(wagtaildocs_add_document_url)s\">upload one now</a>?" +"You haven't uploaded any documents. Why not <a " +"href=\"%(wagtaildocs_add_document_url)s\">upload one now</a>?" +msgstr "Δεν υπάρχουν έγγραφα. Θέλετε να <a href=\"%(wagtaildocs_add_document_url)s\">ανεβάσετε μερικά</a>;" + +#: templates/wagtaildocs/documents/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:26 +msgid "Edit this page" msgstr "" -"Δεν υπάρχουν έγγραφα. Θέλετε να <a href=\"%(wagtaildocs_add_document_url)s" -"\">ανεβάσετε μερικά</a>;" #: templates/wagtaildocs/edit_handlers/document_chooser_panel.html:9 msgid "Clear choice" @@ -149,22 +165,22 @@ msgstr "Καθαρισμός επιλογής" msgid "Choose another document" msgstr "Επιλογή άλλου εγγράφου" -#: views/documents.py:36 views/documents.py:45 +#: views/documents.py:37 views/documents.py:46 msgid "Search documents" msgstr "Αναζήτηση εγγράφων" -#: views/documents.py:85 +#: views/documents.py:86 msgid "Document '{0}' added." msgstr "Το έγγραφο '{0}' προστέθηκε." -#: views/documents.py:88 views/documents.py:117 +#: views/documents.py:89 views/documents.py:118 msgid "The document could not be saved due to errors." msgstr "Δεν ήταν δυνατή η αποθήκευση του εγγράφου." -#: views/documents.py:114 +#: views/documents.py:115 msgid "Document '{0}' updated" msgstr "Έγινε διόρθωση του εγγράφου '{0}'" -#: views/documents.py:136 +#: views/documents.py:137 msgid "Document '{0}' deleted." msgstr "Το έγγραφο '{0}' διαγράφηκε." diff --git a/wagtail/wagtaildocs/locale/en/LC_MESSAGES/django.mo b/wagtail/wagtaildocs/locale/en/LC_MESSAGES/django.mo index 1ef6acf6b..3b83aafe9 100644 Binary files a/wagtail/wagtaildocs/locale/en/LC_MESSAGES/django.mo and b/wagtail/wagtaildocs/locale/en/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtaildocs/locale/en/LC_MESSAGES/django.po b/wagtail/wagtaildocs/locale/en/LC_MESSAGES/django.po index 311446b0a..88d049cda 100644 --- a/wagtail/wagtaildocs/locale/en/LC_MESSAGES/django.po +++ b/wagtail/wagtaildocs/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:42+0000\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -17,20 +17,21 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: models.py:20 templates/wagtaildocs/documents/list.html:11 +#: models.py:21 templates/wagtaildocs/documents/list.html:11 #: templates/wagtaildocs/documents/list.html:14 +#: templates/wagtaildocs/documents/usage.html:16 msgid "Title" msgstr "" -#: models.py:21 templates/wagtaildocs/documents/list.html:17 +#: models.py:22 templates/wagtaildocs/documents/list.html:17 msgid "File" msgstr "" -#: models.py:25 +#: models.py:26 msgid "Tags" msgstr "" -#: wagtail_hooks.py:23 templates/wagtaildocs/documents/index.html:16 +#: wagtail_hooks.py:24 templates/wagtaildocs/documents/index.html:16 msgid "Documents" msgstr "" @@ -130,6 +131,31 @@ msgid "" "\"%(wagtaildocs_add_document_url)s\">upload one now</a>?" msgstr "" +#: templates/wagtaildocs/documents/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:26 +msgid "Edit this page" +msgstr "" + #: templates/wagtaildocs/edit_handlers/document_chooser_panel.html:9 msgid "Clear choice" msgstr "" @@ -138,22 +164,22 @@ msgstr "" msgid "Choose another document" msgstr "" -#: views/documents.py:36 views/documents.py:45 +#: views/documents.py:37 views/documents.py:46 msgid "Search documents" msgstr "" -#: views/documents.py:85 +#: views/documents.py:86 msgid "Document '{0}' added." msgstr "" -#: views/documents.py:88 views/documents.py:117 +#: views/documents.py:89 views/documents.py:118 msgid "The document could not be saved due to errors." msgstr "" -#: views/documents.py:114 +#: views/documents.py:115 msgid "Document '{0}' updated" msgstr "" -#: views/documents.py:136 +#: views/documents.py:137 msgid "Document '{0}' deleted." msgstr "" diff --git a/wagtail/wagtaildocs/locale/es/LC_MESSAGES/django.mo b/wagtail/wagtaildocs/locale/es/LC_MESSAGES/django.mo index 3463b0618..d68ebd190 100644 Binary files a/wagtail/wagtaildocs/locale/es/LC_MESSAGES/django.mo and b/wagtail/wagtaildocs/locale/es/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtaildocs/locale/es/LC_MESSAGES/django.po b/wagtail/wagtaildocs/locale/es/LC_MESSAGES/django.po index 8a5af4eb5..a8b711977 100644 --- a/wagtail/wagtaildocs/locale/es/LC_MESSAGES/django.po +++ b/wagtail/wagtaildocs/locale/es/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # fooflare <amos.oviedo@gmail.com>, 2014 # fooflare <amos.oviedo@gmail.com>, 2014 @@ -9,31 +9,31 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:42+0000\n" -"PO-Revision-Date: 2014-03-14 21:12+0000\n" -"Last-Translator: serafeim <serafeim@torchbox.com>\n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/wagtail/language/" -"es/)\n" -"Language: es\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Spanish (http://www.transifex.com/projects/p/wagtail/language/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: models.py:20 templates/wagtaildocs/documents/list.html:11 +#: models.py:21 templates/wagtaildocs/documents/list.html:11 #: templates/wagtaildocs/documents/list.html:14 +#: templates/wagtaildocs/documents/usage.html:16 msgid "Title" msgstr "Título" -#: models.py:21 templates/wagtaildocs/documents/list.html:17 +#: models.py:22 templates/wagtaildocs/documents/list.html:17 msgid "File" msgstr "Archivo" -#: models.py:25 +#: models.py:26 msgid "Tags" msgstr "Etiquetas" -#: wagtail_hooks.py:23 templates/wagtaildocs/documents/index.html:16 +#: wagtail_hooks.py:24 templates/wagtaildocs/documents/index.html:16 msgid "Documents" msgstr "Documentos" @@ -68,14 +68,8 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "" -"\n" -" Hay una coincidencia\n" -" " -msgstr[1] "" -"\n" -" Hay %(counter)s coincidencias\n" -" " +msgstr[0] "\n Hay una coincidencia\n " +msgstr[1] "\n Hay %(counter)s coincidencias\n " #: templates/wagtaildocs/chooser/results.html:12 msgid "Latest documents" @@ -135,11 +129,34 @@ msgstr "Subidos" #: templates/wagtaildocs/documents/results.html:21 #, python-format msgid "" -"You haven't uploaded any documents. Why not <a href=" -"\"%(wagtaildocs_add_document_url)s\">upload one now</a>?" +"You haven't uploaded any documents. Why not <a " +"href=\"%(wagtaildocs_add_document_url)s\">upload one now</a>?" +msgstr "No has subido documentos. ¿Por qué no <a href=\"%(wagtaildocs_add_document_url)s\">subir uno ahora</a>?" + +#: templates/wagtaildocs/documents/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:26 +msgid "Edit this page" msgstr "" -"No has subido documentos. ¿Por qué no <a href=" -"\"%(wagtaildocs_add_document_url)s\">subir uno ahora</a>?" #: templates/wagtaildocs/edit_handlers/document_chooser_panel.html:9 msgid "Clear choice" @@ -149,22 +166,22 @@ msgstr "Borrar selección" msgid "Choose another document" msgstr "Elegir otro documento" -#: views/documents.py:36 views/documents.py:45 +#: views/documents.py:37 views/documents.py:46 msgid "Search documents" msgstr "Buscar documentos" -#: views/documents.py:85 +#: views/documents.py:86 msgid "Document '{0}' added." msgstr "Documento '{0}' añadido." -#: views/documents.py:88 views/documents.py:117 +#: views/documents.py:89 views/documents.py:118 msgid "The document could not be saved due to errors." msgstr "El documento no pudo ser guardado debido a errores." -#: views/documents.py:114 +#: views/documents.py:115 msgid "Document '{0}' updated" msgstr "Documento '{0}' actualizado" -#: views/documents.py:136 +#: views/documents.py:137 msgid "Document '{0}' deleted." msgstr "Documento '{0}' eliminado." diff --git a/wagtail/wagtaildocs/locale/eu/LC_MESSAGES/django.mo b/wagtail/wagtaildocs/locale/eu/LC_MESSAGES/django.mo index 7096916fe..972e8348c 100644 Binary files a/wagtail/wagtaildocs/locale/eu/LC_MESSAGES/django.mo and b/wagtail/wagtaildocs/locale/eu/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtaildocs/locale/eu/LC_MESSAGES/django.po b/wagtail/wagtaildocs/locale/eu/LC_MESSAGES/django.po index e443bcf83..aa6f5d81b 100644 --- a/wagtail/wagtaildocs/locale/eu/LC_MESSAGES/django.po +++ b/wagtail/wagtaildocs/locale/eu/LC_MESSAGES/django.po @@ -1,37 +1,37 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:42+0000\n" -"PO-Revision-Date: 2014-03-14 21:12+0000\n" -"Last-Translator: serafeim <serafeim@torchbox.com>\n" -"Language-Team: Basque (http://www.transifex.com/projects/p/wagtail/language/" -"eu/)\n" -"Language: eu\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Basque (http://www.transifex.com/projects/p/wagtail/language/eu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: eu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: models.py:20 templates/wagtaildocs/documents/list.html:11 +#: models.py:21 templates/wagtaildocs/documents/list.html:11 #: templates/wagtaildocs/documents/list.html:14 +#: templates/wagtaildocs/documents/usage.html:16 msgid "Title" msgstr "" -#: models.py:21 templates/wagtaildocs/documents/list.html:17 +#: models.py:22 templates/wagtaildocs/documents/list.html:17 msgid "File" msgstr "" -#: models.py:25 +#: models.py:26 msgid "Tags" msgstr "" -#: wagtail_hooks.py:23 templates/wagtaildocs/documents/index.html:16 +#: wagtail_hooks.py:24 templates/wagtaildocs/documents/index.html:16 msgid "Documents" msgstr "" @@ -127,8 +127,33 @@ msgstr "" #: templates/wagtaildocs/documents/results.html:21 #, python-format msgid "" -"You haven't uploaded any documents. Why not <a href=" -"\"%(wagtaildocs_add_document_url)s\">upload one now</a>?" +"You haven't uploaded any documents. Why not <a " +"href=\"%(wagtaildocs_add_document_url)s\">upload one now</a>?" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:26 +msgid "Edit this page" msgstr "" #: templates/wagtaildocs/edit_handlers/document_chooser_panel.html:9 @@ -139,22 +164,22 @@ msgstr "" msgid "Choose another document" msgstr "" -#: views/documents.py:36 views/documents.py:45 +#: views/documents.py:37 views/documents.py:46 msgid "Search documents" msgstr "" -#: views/documents.py:85 +#: views/documents.py:86 msgid "Document '{0}' added." msgstr "" -#: views/documents.py:88 views/documents.py:117 +#: views/documents.py:89 views/documents.py:118 msgid "The document could not be saved due to errors." msgstr "" -#: views/documents.py:114 +#: views/documents.py:115 msgid "Document '{0}' updated" msgstr "" -#: views/documents.py:136 +#: views/documents.py:137 msgid "Document '{0}' deleted." msgstr "" diff --git a/wagtail/wagtaildocs/locale/fr/LC_MESSAGES/django.mo b/wagtail/wagtaildocs/locale/fr/LC_MESSAGES/django.mo index 238279d50..96d2368bd 100644 Binary files a/wagtail/wagtaildocs/locale/fr/LC_MESSAGES/django.mo and b/wagtail/wagtaildocs/locale/fr/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtaildocs/locale/fr/LC_MESSAGES/django.po b/wagtail/wagtaildocs/locale/fr/LC_MESSAGES/django.po index c7f6987d1..ec5c5f9bf 100644 --- a/wagtail/wagtaildocs/locale/fr/LC_MESSAGES/django.po +++ b/wagtail/wagtaildocs/locale/fr/LC_MESSAGES/django.po @@ -1,38 +1,38 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # nahuel, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:42+0000\n" -"PO-Revision-Date: 2014-03-18 23:15+0000\n" -"Last-Translator: nahuel\n" -"Language-Team: French (http://www.transifex.com/projects/p/wagtail/language/" -"fr/)\n" -"Language: fr\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: French (http://www.transifex.com/projects/p/wagtail/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: models.py:20 templates/wagtaildocs/documents/list.html:11 +#: models.py:21 templates/wagtaildocs/documents/list.html:11 #: templates/wagtaildocs/documents/list.html:14 +#: templates/wagtaildocs/documents/usage.html:16 msgid "Title" msgstr "Titre" -#: models.py:21 templates/wagtaildocs/documents/list.html:17 +#: models.py:22 templates/wagtaildocs/documents/list.html:17 msgid "File" msgstr "Fichier" -#: models.py:25 +#: models.py:26 msgid "Tags" msgstr "Mots-clés" -#: wagtail_hooks.py:23 templates/wagtaildocs/documents/index.html:16 +#: wagtail_hooks.py:24 templates/wagtaildocs/documents/index.html:16 msgid "Documents" msgstr "Documents" @@ -128,8 +128,33 @@ msgstr "" #: templates/wagtaildocs/documents/results.html:21 #, python-format msgid "" -"You haven't uploaded any documents. Why not <a href=" -"\"%(wagtaildocs_add_document_url)s\">upload one now</a>?" +"You haven't uploaded any documents. Why not <a " +"href=\"%(wagtaildocs_add_document_url)s\">upload one now</a>?" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:26 +msgid "Edit this page" msgstr "" #: templates/wagtaildocs/edit_handlers/document_chooser_panel.html:9 @@ -140,22 +165,22 @@ msgstr "" msgid "Choose another document" msgstr "" -#: views/documents.py:36 views/documents.py:45 +#: views/documents.py:37 views/documents.py:46 msgid "Search documents" msgstr "" -#: views/documents.py:85 +#: views/documents.py:86 msgid "Document '{0}' added." msgstr "Document '{0}' ajouté." -#: views/documents.py:88 views/documents.py:117 +#: views/documents.py:89 views/documents.py:118 msgid "The document could not be saved due to errors." msgstr "Le document ne peut être enregistré du fait d'erreurs." -#: views/documents.py:114 +#: views/documents.py:115 msgid "Document '{0}' updated" msgstr "Document '{0}' mis à jour" -#: views/documents.py:136 +#: views/documents.py:137 msgid "Document '{0}' deleted." msgstr "Document '{0}' supprimé." diff --git a/wagtail/wagtaildocs/locale/gl/LC_MESSAGES/django.mo b/wagtail/wagtaildocs/locale/gl/LC_MESSAGES/django.mo index b6812e7ae..ea158d485 100644 Binary files a/wagtail/wagtaildocs/locale/gl/LC_MESSAGES/django.mo and b/wagtail/wagtaildocs/locale/gl/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtaildocs/locale/gl/LC_MESSAGES/django.po b/wagtail/wagtaildocs/locale/gl/LC_MESSAGES/django.po index 7db93b01e..4a2ce5bef 100644 --- a/wagtail/wagtaildocs/locale/gl/LC_MESSAGES/django.po +++ b/wagtail/wagtaildocs/locale/gl/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # fooflare <amos.oviedo@gmail.com>, 2014 # fooflare <amos.oviedo@gmail.com>, 2014 @@ -9,31 +9,31 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:42+0000\n" -"PO-Revision-Date: 2014-03-23 10:32+0000\n" -"Last-Translator: fooflare <amos.oviedo@gmail.com>\n" -"Language-Team: Galician (http://www.transifex.com/projects/p/wagtail/" -"language/gl/)\n" -"Language: gl\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Galician (http://www.transifex.com/projects/p/wagtail/language/gl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: gl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: models.py:20 templates/wagtaildocs/documents/list.html:11 +#: models.py:21 templates/wagtaildocs/documents/list.html:11 #: templates/wagtaildocs/documents/list.html:14 +#: templates/wagtaildocs/documents/usage.html:16 msgid "Title" msgstr "Título" -#: models.py:21 templates/wagtaildocs/documents/list.html:17 +#: models.py:22 templates/wagtaildocs/documents/list.html:17 msgid "File" msgstr "Arquivo" -#: models.py:25 +#: models.py:26 msgid "Tags" msgstr "Etiquetas" -#: wagtail_hooks.py:23 templates/wagtaildocs/documents/index.html:16 +#: wagtail_hooks.py:24 templates/wagtaildocs/documents/index.html:16 msgid "Documents" msgstr "Documentos" @@ -68,14 +68,8 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "" -"\n" -" Hai unha coincidencia\n" -" " -msgstr[1] "" -"\n" -" Hai %(counter)s coincidencias\n" -" " +msgstr[0] "\n Hai unha coincidencia\n " +msgstr[1] "\n Hai %(counter)s coincidencias\n " #: templates/wagtaildocs/chooser/results.html:12 msgid "Latest documents" @@ -135,11 +129,34 @@ msgstr "Subidos" #: templates/wagtaildocs/documents/results.html:21 #, python-format msgid "" -"You haven't uploaded any documents. Why not <a href=" -"\"%(wagtaildocs_add_document_url)s\">upload one now</a>?" +"You haven't uploaded any documents. Why not <a " +"href=\"%(wagtaildocs_add_document_url)s\">upload one now</a>?" +msgstr "Non subiches documentos. ¿Por qué non <a href=\"%(wagtaildocs_add_document_url)s\">subir un agora</a>?" + +#: templates/wagtaildocs/documents/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:26 +msgid "Edit this page" msgstr "" -"Non subiches documentos. ¿Por qué non <a href=" -"\"%(wagtaildocs_add_document_url)s\">subir un agora</a>?" #: templates/wagtaildocs/edit_handlers/document_chooser_panel.html:9 msgid "Clear choice" @@ -149,22 +166,22 @@ msgstr "Borrar selección" msgid "Choose another document" msgstr "Elixir outro documento" -#: views/documents.py:36 views/documents.py:45 +#: views/documents.py:37 views/documents.py:46 msgid "Search documents" msgstr "Buscar documentos" -#: views/documents.py:85 +#: views/documents.py:86 msgid "Document '{0}' added." msgstr "Documento '{0}' engadido." -#: views/documents.py:88 views/documents.py:117 +#: views/documents.py:89 views/documents.py:118 msgid "The document could not be saved due to errors." msgstr "O documento non puido ser gardado debido a erros." -#: views/documents.py:114 +#: views/documents.py:115 msgid "Document '{0}' updated" msgstr "Documento '{0}' actualizado" -#: views/documents.py:136 +#: views/documents.py:137 msgid "Document '{0}' deleted." msgstr "Documento '{0}' eliminado." diff --git a/wagtail/wagtaildocs/locale/mn/LC_MESSAGES/django.mo b/wagtail/wagtaildocs/locale/mn/LC_MESSAGES/django.mo index e991d2719..25e7bc353 100644 Binary files a/wagtail/wagtaildocs/locale/mn/LC_MESSAGES/django.mo and b/wagtail/wagtaildocs/locale/mn/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtaildocs/locale/mn/LC_MESSAGES/django.po b/wagtail/wagtaildocs/locale/mn/LC_MESSAGES/django.po index 347262eb5..5e127bb88 100644 --- a/wagtail/wagtaildocs/locale/mn/LC_MESSAGES/django.po +++ b/wagtail/wagtaildocs/locale/mn/LC_MESSAGES/django.po @@ -1,37 +1,37 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:42+0000\n" -"PO-Revision-Date: 2014-03-14 21:12+0000\n" -"Last-Translator: serafeim <serafeim@torchbox.com>\n" -"Language-Team: Mongolian (http://www.transifex.com/projects/p/wagtail/" -"language/mn/)\n" -"Language: mn\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Mongolian (http://www.transifex.com/projects/p/wagtail/language/mn/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: mn\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: models.py:20 templates/wagtaildocs/documents/list.html:11 +#: models.py:21 templates/wagtaildocs/documents/list.html:11 #: templates/wagtaildocs/documents/list.html:14 +#: templates/wagtaildocs/documents/usage.html:16 msgid "Title" msgstr "" -#: models.py:21 templates/wagtaildocs/documents/list.html:17 +#: models.py:22 templates/wagtaildocs/documents/list.html:17 msgid "File" msgstr "" -#: models.py:25 +#: models.py:26 msgid "Tags" msgstr "" -#: wagtail_hooks.py:23 templates/wagtaildocs/documents/index.html:16 +#: wagtail_hooks.py:24 templates/wagtaildocs/documents/index.html:16 msgid "Documents" msgstr "" @@ -127,8 +127,33 @@ msgstr "" #: templates/wagtaildocs/documents/results.html:21 #, python-format msgid "" -"You haven't uploaded any documents. Why not <a href=" -"\"%(wagtaildocs_add_document_url)s\">upload one now</a>?" +"You haven't uploaded any documents. Why not <a " +"href=\"%(wagtaildocs_add_document_url)s\">upload one now</a>?" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:26 +msgid "Edit this page" msgstr "" #: templates/wagtaildocs/edit_handlers/document_chooser_panel.html:9 @@ -139,22 +164,22 @@ msgstr "" msgid "Choose another document" msgstr "" -#: views/documents.py:36 views/documents.py:45 +#: views/documents.py:37 views/documents.py:46 msgid "Search documents" msgstr "" -#: views/documents.py:85 +#: views/documents.py:86 msgid "Document '{0}' added." msgstr "" -#: views/documents.py:88 views/documents.py:117 +#: views/documents.py:89 views/documents.py:118 msgid "The document could not be saved due to errors." msgstr "" -#: views/documents.py:114 +#: views/documents.py:115 msgid "Document '{0}' updated" msgstr "" -#: views/documents.py:136 +#: views/documents.py:137 msgid "Document '{0}' deleted." msgstr "" diff --git a/wagtail/wagtaildocs/locale/pl/LC_MESSAGES/django.mo b/wagtail/wagtaildocs/locale/pl/LC_MESSAGES/django.mo index 48d3dc03b..bb1d9fb47 100644 Binary files a/wagtail/wagtaildocs/locale/pl/LC_MESSAGES/django.mo and b/wagtail/wagtaildocs/locale/pl/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtaildocs/locale/pl/LC_MESSAGES/django.po b/wagtail/wagtaildocs/locale/pl/LC_MESSAGES/django.po index 35f5cc84f..81db48471 100644 --- a/wagtail/wagtaildocs/locale/pl/LC_MESSAGES/django.po +++ b/wagtail/wagtaildocs/locale/pl/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # utek <mail@utek.pl>, 2014 # utek <mail@utek.pl>, 2014 @@ -9,32 +9,31 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:42+0000\n" -"PO-Revision-Date: 2014-03-14 21:12+0000\n" -"Last-Translator: serafeim <serafeim@torchbox.com>\n" -"Language-Team: Polish (http://www.transifex.com/projects/p/wagtail/language/" -"pl/)\n" -"Language: pl\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Polish (http://www.transifex.com/projects/p/wagtail/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2);\n" +"Language: pl\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: models.py:20 templates/wagtaildocs/documents/list.html:11 +#: models.py:21 templates/wagtaildocs/documents/list.html:11 #: templates/wagtaildocs/documents/list.html:14 +#: templates/wagtaildocs/documents/usage.html:16 msgid "Title" msgstr "Tytuł" -#: models.py:21 templates/wagtaildocs/documents/list.html:17 +#: models.py:22 templates/wagtaildocs/documents/list.html:17 msgid "File" msgstr "Plik" -#: models.py:25 +#: models.py:26 msgid "Tags" msgstr "Tagi" -#: wagtail_hooks.py:23 templates/wagtaildocs/documents/index.html:16 +#: wagtail_hooks.py:24 templates/wagtaildocs/documents/index.html:16 msgid "Documents" msgstr "Dokumenty" @@ -69,18 +68,9 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "" -"\n" -" Jedno dopasowanie\n" -" " -msgstr[1] "" -"\n" -" Są %(counter)s dopasowania\n" -" " -msgstr[2] "" -"\n" -" Jest %(counter)s dopasowań\n" -" " +msgstr[0] "\n Jedno dopasowanie\n " +msgstr[1] "\n Są %(counter)s dopasowania\n " +msgstr[2] "\n Jest %(counter)s dopasowań\n " #: templates/wagtaildocs/chooser/results.html:12 msgid "Latest documents" @@ -90,8 +80,7 @@ msgstr "Najnowsze dokumenty" #: templates/wagtaildocs/documents/results.html:18 #, python-format msgid "Sorry, no documents match \"<em>%(query_string)s</em>\"" -msgstr "" -"Przepraszamy, żaden dokument nie pasuje do \"<em>%(query_string)s</em>\"" +msgstr "Przepraszamy, żaden dokument nie pasuje do \"<em>%(query_string)s</em>\"" #: templates/wagtaildocs/documents/_file_field.html:5 msgid "Change document:" @@ -141,11 +130,34 @@ msgstr "Przesłano" #: templates/wagtaildocs/documents/results.html:21 #, python-format msgid "" -"You haven't uploaded any documents. Why not <a href=" -"\"%(wagtaildocs_add_document_url)s\">upload one now</a>?" +"You haven't uploaded any documents. Why not <a " +"href=\"%(wagtaildocs_add_document_url)s\">upload one now</a>?" +msgstr "Nie przesłano żadnych dokumentów. Czemu nie <a href=\"%(wagtaildocs_add_document_url)s\">dodać jednego teraz</a>?" + +#: templates/wagtaildocs/documents/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:26 +msgid "Edit this page" msgstr "" -"Nie przesłano żadnych dokumentów. Czemu nie <a href=" -"\"%(wagtaildocs_add_document_url)s\">dodać jednego teraz</a>?" #: templates/wagtaildocs/edit_handlers/document_chooser_panel.html:9 msgid "Clear choice" @@ -155,22 +167,22 @@ msgstr "Wyczyść wybór" msgid "Choose another document" msgstr "Wybierz inny dokument" -#: views/documents.py:36 views/documents.py:45 +#: views/documents.py:37 views/documents.py:46 msgid "Search documents" msgstr "Szukaj dokumentów" -#: views/documents.py:85 +#: views/documents.py:86 msgid "Document '{0}' added." msgstr "Dodano dokument '{0}'." -#: views/documents.py:88 views/documents.py:117 +#: views/documents.py:89 views/documents.py:118 msgid "The document could not be saved due to errors." msgstr "Dokument nie mógł zostać zapisany z powodu błędów." -#: views/documents.py:114 +#: views/documents.py:115 msgid "Document '{0}' updated" msgstr "Uaktualniono dokument '{0}'" -#: views/documents.py:136 +#: views/documents.py:137 msgid "Document '{0}' deleted." msgstr "Usunięto dokument '{0}'" diff --git a/wagtail/wagtaildocs/locale/ro/LC_MESSAGES/django.mo b/wagtail/wagtaildocs/locale/ro/LC_MESSAGES/django.mo index 88f0d2144..5e8f2dfa6 100644 Binary files a/wagtail/wagtaildocs/locale/ro/LC_MESSAGES/django.mo and b/wagtail/wagtaildocs/locale/ro/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtaildocs/locale/ro/LC_MESSAGES/django.po b/wagtail/wagtaildocs/locale/ro/LC_MESSAGES/django.po index 196bf3a35..15b64f26e 100644 --- a/wagtail/wagtaildocs/locale/ro/LC_MESSAGES/django.po +++ b/wagtail/wagtaildocs/locale/ro/LC_MESSAGES/django.po @@ -1,39 +1,38 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: -# zerolab, 2014 +# Dan Braghis, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:42+0000\n" -"PO-Revision-Date: 2014-03-18 13:20+0000\n" -"Last-Translator: zerolab\n" -"Language-Team: Romanian (http://www.transifex.com/projects/p/wagtail/" -"language/ro/)\n" -"Language: ro\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Romanian (http://www.transifex.com/projects/p/wagtail/language/ro/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?" -"2:1));\n" +"Language: ro\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" -#: models.py:20 templates/wagtaildocs/documents/list.html:11 +#: models.py:21 templates/wagtaildocs/documents/list.html:11 #: templates/wagtaildocs/documents/list.html:14 +#: templates/wagtaildocs/documents/usage.html:16 msgid "Title" msgstr "Titlu" -#: models.py:21 templates/wagtaildocs/documents/list.html:17 +#: models.py:22 templates/wagtaildocs/documents/list.html:17 msgid "File" msgstr "Fișier" -#: models.py:25 +#: models.py:26 msgid "Tags" msgstr "Etichete" -#: wagtail_hooks.py:23 templates/wagtaildocs/documents/index.html:16 +#: wagtail_hooks.py:24 templates/wagtaildocs/documents/index.html:16 msgid "Documents" msgstr "Documente" @@ -68,15 +67,9 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "" -"\n" -"Există o potrivire" -msgstr[1] "" -"\n" -"Sunt %(counter)s potriviri" -msgstr[2] "" -"\n" -"Sunt %(counter)s potriviri" +msgstr[0] "\nExistă o potrivire" +msgstr[1] "\nSunt %(counter)s potriviri" +msgstr[2] "\nSunt %(counter)s potriviri" #: templates/wagtaildocs/chooser/results.html:12 msgid "Latest documents" @@ -86,9 +79,7 @@ msgstr "Documente recente" #: templates/wagtaildocs/documents/results.html:18 #, python-format msgid "Sorry, no documents match \"<em>%(query_string)s</em>\"" -msgstr "" -"Ne pare rău, \"<em>%(query_string)s</em>\" nu se potrivește cu nici un " -"document" +msgstr "Ne pare rău, \"<em>%(query_string)s</em>\" nu se potrivește cu nici un document" #: templates/wagtaildocs/documents/_file_field.html:5 msgid "Change document:" @@ -138,11 +129,34 @@ msgstr "Încărcat" #: templates/wagtaildocs/documents/results.html:21 #, python-format msgid "" -"You haven't uploaded any documents. Why not <a href=" -"\"%(wagtaildocs_add_document_url)s\">upload one now</a>?" +"You haven't uploaded any documents. Why not <a " +"href=\"%(wagtaildocs_add_document_url)s\">upload one now</a>?" +msgstr "Nu ați încărcat nici un document. De ce să nu <a href=\"%(wagtaildocs_add_document_url)s\">adăugați unul</a>?" + +#: templates/wagtaildocs/documents/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:26 +msgid "Edit this page" msgstr "" -"Nu ați încărcat nici un document. De ce să nu <a href=" -"\"%(wagtaildocs_add_document_url)s\">adăugați unul</a>?" #: templates/wagtaildocs/edit_handlers/document_chooser_panel.html:9 msgid "Clear choice" @@ -152,22 +166,22 @@ msgstr "Curăță selecție" msgid "Choose another document" msgstr "Alege alt document" -#: views/documents.py:36 views/documents.py:45 +#: views/documents.py:37 views/documents.py:46 msgid "Search documents" msgstr "Caută documente" -#: views/documents.py:85 +#: views/documents.py:86 msgid "Document '{0}' added." msgstr "Documentul '{0}' a fost adăugat." -#: views/documents.py:88 views/documents.py:117 +#: views/documents.py:89 views/documents.py:118 msgid "The document could not be saved due to errors." msgstr "Documentul nu a fost salvat din cauza erorilor." -#: views/documents.py:114 +#: views/documents.py:115 msgid "Document '{0}' updated" msgstr "Documentul '{0}' a fost actualizat." -#: views/documents.py:136 +#: views/documents.py:137 msgid "Document '{0}' deleted." msgstr "Documentul '{0}' a fost șters." diff --git a/wagtail/wagtaildocs/locale/zh/LC_MESSAGES/django.mo b/wagtail/wagtaildocs/locale/zh/LC_MESSAGES/django.mo index 550cc93de..358bef2f4 100644 Binary files a/wagtail/wagtaildocs/locale/zh/LC_MESSAGES/django.mo and b/wagtail/wagtaildocs/locale/zh/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtaildocs/locale/zh/LC_MESSAGES/django.po b/wagtail/wagtaildocs/locale/zh/LC_MESSAGES/django.po index 3e29642cd..3ad210f18 100644 --- a/wagtail/wagtaildocs/locale/zh/LC_MESSAGES/django.po +++ b/wagtail/wagtaildocs/locale/zh/LC_MESSAGES/django.po @@ -1,37 +1,37 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:42+0000\n" -"PO-Revision-Date: 2014-03-14 21:12+0000\n" -"Last-Translator: serafeim <serafeim@torchbox.com>\n" -"Language-Team: Chinese (http://www.transifex.com/projects/p/wagtail/language/" -"zh/)\n" -"Language: zh\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Chinese (http://www.transifex.com/projects/p/wagtail/language/zh/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: zh\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: models.py:20 templates/wagtaildocs/documents/list.html:11 +#: models.py:21 templates/wagtaildocs/documents/list.html:11 #: templates/wagtaildocs/documents/list.html:14 +#: templates/wagtaildocs/documents/usage.html:16 msgid "Title" msgstr "标题" -#: models.py:21 templates/wagtaildocs/documents/list.html:17 +#: models.py:22 templates/wagtaildocs/documents/list.html:17 msgid "File" msgstr "文件" -#: models.py:25 +#: models.py:26 msgid "Tags" msgstr "标签" -#: wagtail_hooks.py:23 templates/wagtaildocs/documents/index.html:16 +#: wagtail_hooks.py:24 templates/wagtaildocs/documents/index.html:16 msgid "Documents" msgstr "文档" @@ -126,11 +126,34 @@ msgstr "已上传" #: templates/wagtaildocs/documents/results.html:21 #, python-format msgid "" -"You haven't uploaded any documents. Why not <a href=" -"\"%(wagtaildocs_add_document_url)s\">upload one now</a>?" +"You haven't uploaded any documents. Why not <a " +"href=\"%(wagtaildocs_add_document_url)s\">upload one now</a>?" +msgstr "你没有上传任何文档。 为什么不 <a href=\"%(wagtaildocs_add_document_url)s\">上传一份</a>?" + +#: templates/wagtaildocs/documents/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:26 +msgid "Edit this page" msgstr "" -"你没有上传任何文档。 为什么不 <a href=\"%(wagtaildocs_add_document_url)s\">上" -"传一份</a>?" #: templates/wagtaildocs/edit_handlers/document_chooser_panel.html:9 msgid "Clear choice" @@ -140,22 +163,22 @@ msgstr "清除选择" msgid "Choose another document" msgstr "选择另外一份文档" -#: views/documents.py:36 views/documents.py:45 +#: views/documents.py:37 views/documents.py:46 msgid "Search documents" msgstr "" -#: views/documents.py:85 +#: views/documents.py:86 msgid "Document '{0}' added." msgstr "文档'{0}'已添加" -#: views/documents.py:88 views/documents.py:117 +#: views/documents.py:89 views/documents.py:118 msgid "The document could not be saved due to errors." msgstr "有错,文档无法保存。" -#: views/documents.py:114 +#: views/documents.py:115 msgid "Document '{0}' updated" msgstr "文档'{0}'已更新" -#: views/documents.py:136 +#: views/documents.py:137 msgid "Document '{0}' deleted." msgstr "文档'{0}'已删除" diff --git a/wagtail/wagtaildocs/locale/zh_TW/LC_MESSAGES/django.mo b/wagtail/wagtaildocs/locale/zh_TW/LC_MESSAGES/django.mo index 65fb219cc..45d304e3d 100644 Binary files a/wagtail/wagtaildocs/locale/zh_TW/LC_MESSAGES/django.mo and b/wagtail/wagtaildocs/locale/zh_TW/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtaildocs/locale/zh_TW/LC_MESSAGES/django.po b/wagtail/wagtaildocs/locale/zh_TW/LC_MESSAGES/django.po index d11b715e5..cb2c41a37 100644 --- a/wagtail/wagtaildocs/locale/zh_TW/LC_MESSAGES/django.po +++ b/wagtail/wagtaildocs/locale/zh_TW/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:42+0000\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" "PO-Revision-Date: 2014-03-14 21:12+0000\n" "Last-Translator: wdv4758h <wdv4758h@gmail.com>\n" "Language-Team: \n" @@ -17,20 +17,21 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: models.py:20 templates/wagtaildocs/documents/list.html:11 +#: models.py:21 templates/wagtaildocs/documents/list.html:11 #: templates/wagtaildocs/documents/list.html:14 +#: templates/wagtaildocs/documents/usage.html:16 msgid "Title" msgstr "標題" -#: models.py:21 templates/wagtaildocs/documents/list.html:17 +#: models.py:22 templates/wagtaildocs/documents/list.html:17 msgid "File" msgstr "文件" -#: models.py:25 +#: models.py:26 msgid "Tags" msgstr "標籤" -#: wagtail_hooks.py:23 templates/wagtaildocs/documents/index.html:16 +#: wagtail_hooks.py:24 templates/wagtaildocs/documents/index.html:16 msgid "Documents" msgstr "文件" @@ -136,6 +137,31 @@ msgstr "" "你沒有上傳任何文件。 為什麼不 <a href=\"%(wagtaildocs_add_document_url)s\">上" "傳一份</a>?" +#: templates/wagtaildocs/documents/usage.html:3 +#, fuzzy, python-format +msgid "Usage of %(title)s" +msgstr "刪除 %(title)s" + +#: templates/wagtaildocs/documents/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:26 +msgid "Edit this page" +msgstr "" + #: templates/wagtaildocs/edit_handlers/document_chooser_panel.html:9 msgid "Clear choice" msgstr "清除選擇" @@ -144,22 +170,22 @@ msgstr "清除選擇" msgid "Choose another document" msgstr "選擇另外一份文件" -#: views/documents.py:36 views/documents.py:45 +#: views/documents.py:37 views/documents.py:46 msgid "Search documents" msgstr "搜尋文件" -#: views/documents.py:85 +#: views/documents.py:86 msgid "Document '{0}' added." msgstr "文件 '{0}' 已加入" -#: views/documents.py:88 views/documents.py:117 +#: views/documents.py:89 views/documents.py:118 msgid "The document could not be saved due to errors." msgstr "這文件因有錯誤而無法建立。" -#: views/documents.py:114 +#: views/documents.py:115 msgid "Document '{0}' updated" msgstr "文件 '{0}' 已更新" -#: views/documents.py:136 +#: views/documents.py:137 msgid "Document '{0}' deleted." msgstr "文件 '{0}' 已刪除" diff --git a/wagtail/wagtaildocs/models.py b/wagtail/wagtaildocs/models.py index 513c0ede0..f930a493c 100644 --- a/wagtail/wagtaildocs/models.py +++ b/wagtail/wagtaildocs/models.py @@ -12,6 +12,7 @@ from django.utils.translation import ugettext_lazy as _ from django.utils.encoding import python_2_unicode_compatible from wagtail.wagtailadmin.taggable import TagSearchable +from wagtail.wagtailadmin.utils import get_object_usage from wagtail.wagtailsearch import indexed @@ -47,6 +48,14 @@ class Document(models.Model, TagSearchable): def url(self): return reverse('wagtaildocs_serve', args=[self.id, self.filename]) + def get_usage(self): + return get_object_usage(self) + + @property + def usage_url(self): + return reverse('wagtaildocs_document_usage', + args=(self.id,)) + def is_editable_by_user(self, user): if user.has_perm('wagtaildocs.change_document'): # user has global permission to change documents diff --git a/wagtail/wagtaildocs/migrations/0001_initial.py b/wagtail/wagtaildocs/south_migrations/0001_initial.py similarity index 100% rename from wagtail/wagtaildocs/migrations/0001_initial.py rename to wagtail/wagtaildocs/south_migrations/0001_initial.py diff --git a/wagtail/wagtaildocs/migrations/0002_initial_data.py b/wagtail/wagtaildocs/south_migrations/0002_initial_data.py similarity index 100% rename from wagtail/wagtaildocs/migrations/0002_initial_data.py rename to wagtail/wagtaildocs/south_migrations/0002_initial_data.py diff --git a/wagtail/wagtailimages/migrations/__init__.py b/wagtail/wagtaildocs/south_migrations/__init__.py similarity index 100% rename from wagtail/wagtailimages/migrations/__init__.py rename to wagtail/wagtaildocs/south_migrations/__init__.py diff --git a/wagtail/wagtaildocs/templates/wagtaildocs/documents/edit.html b/wagtail/wagtaildocs/templates/wagtaildocs/documents/edit.html index 55734fbbd..62b9df514 100644 --- a/wagtail/wagtaildocs/templates/wagtaildocs/documents/edit.html +++ b/wagtail/wagtaildocs/templates/wagtaildocs/documents/edit.html @@ -13,7 +13,7 @@ {% block content %} {% trans "Editing" as editing_str %} - {% include "wagtailadmin/shared/header.html" with title=editing_str subtitle=document.title icon="doc-full-inverse" %} + {% include "wagtailadmin/shared/header.html" with title=editing_str subtitle=document.title icon="doc-full-inverse" usage_object=document %} <div class="nice-padding"> <form action="{% url 'wagtaildocs_edit_document' document.id %}" method="POST" enctype="multipart/form-data"> @@ -30,6 +30,6 @@ </ul> </form> - + </div> {% endblock %} diff --git a/wagtail/wagtaildocs/templates/wagtaildocs/documents/usage.html b/wagtail/wagtaildocs/templates/wagtaildocs/documents/usage.html new file mode 100644 index 000000000..01daa48fb --- /dev/null +++ b/wagtail/wagtaildocs/templates/wagtaildocs/documents/usage.html @@ -0,0 +1,49 @@ +{% extends "wagtailadmin/base.html" %} +{% load i18n %} +{% block titletag %}{% blocktrans with title=document.title %}Usage of {{ title }}{% endblocktrans %}{% endblock %} +{% block content %} + {% trans "Usage of" as usage_str %} + {% include "wagtailadmin/shared/header.html" with title=usage_str subtitle=document.title %} + + <div class="nice-padding"> + <table class="listing"> + <col /> + <col width="30%"/> + <col width="15%"/> + <col width="15%"/> + <thead> + <tr> + <th class="title">{% trans "Title" %}</th> + <th>{% trans "Parent" %}</th> + <th>{% trans "Type" %}</th> + <th>{% trans "Status" %}</th> + </tr> + </thead> + <tbody> + {% for page in used_by %} + <tr> + <td class="title" valign="top"> + <h2><a href="{% url 'wagtailadmin_pages_edit' page.id %}" title="{% trans 'Edit this page' %}">{{ page.title }}</a></h2> + </td> + <td> + {% if page.get_parent %} + <a href="{% url 'wagtailadmin_explore' page.get_parent.id %}">{{ page.get_parent.title }}</a> + {% endif %} + </td> + <td> + {{ page.content_type.model_class.get_verbose_name }} + </td> + <td> + {% if page.live %} + <a href="{{ page.url }}" target="_blank" class="status-tag {% if page.status_string != "draft" %}primary{% endif %}">{{ page.status_string }}</a> + {% else %} + <span class="status-tag {% if page.status_string != "draft" %}primary{% endif %}">{{ page.status_string }}</span> + {% endif %} + </td> + </tr> + {% endfor %} + </tbody> + </table> + </div> + {% include "wagtailadmin/shared/pagination_nav.html" with items=used_by linkurl="-" %} +{% endblock %} diff --git a/wagtail/wagtaildocs/tests.py b/wagtail/wagtaildocs/tests.py index 79b799a36..5592635f2 100644 --- a/wagtail/wagtaildocs/tests.py +++ b/wagtail/wagtaildocs/tests.py @@ -1,13 +1,20 @@ from six import b from django.test import TestCase - -from django.contrib.auth.models import User, Group, Permission +from django.contrib.auth import get_user_model +from django.contrib.auth.models import Group, Permission from django.core.urlresolvers import reverse from django.core.files.base import ContentFile +from django.test.utils import override_settings + +from wagtail.tests.utils import WagtailTestUtils +from wagtail.wagtailcore.models import Page + +from wagtail.tests.models import EventPage, EventPageRelatedLink +from wagtail.wagtaildocs.models import Document from wagtail.wagtaildocs import models -from wagtail.tests.utils import WagtailTestUtils + # TODO: Test serve view @@ -15,6 +22,7 @@ from wagtail.tests.utils import WagtailTestUtils class TestDocumentPermissions(TestCase): def setUp(self): # Create some user accounts for testing permissions + User = get_user_model() self.user = User.objects.create_user(username='user', email='user@email.com', password='password') self.owner = User.objects.create_user(username='owner', email='owner@email.com', password='password') self.editor = User.objects.create_user(username='editor', email='editor@email.com', password='password') @@ -313,3 +321,99 @@ class TestDocumentFilenameProperties(TestCase): def tearDown(self): self.document.delete() self.extensionless_document.delete() + + +class TestUsageCount(TestCase, WagtailTestUtils): + fixtures = ['wagtail/tests/fixtures/test.json'] + + def setUp(self): + self.login() + + @override_settings(WAGTAIL_USAGE_COUNT_ENABLED=True) + def test_unused_document_usage_count(self): + doc = Document.objects.get(id=1) + self.assertEqual(doc.get_usage().count(), 0) + + @override_settings(WAGTAIL_USAGE_COUNT_ENABLED=True) + def test_used_document_usage_count(self): + doc = Document.objects.get(id=1) + page = EventPage.objects.get(id=4) + event_page_related_link = EventPageRelatedLink() + event_page_related_link.page = page + event_page_related_link.link_document = doc + event_page_related_link.save() + self.assertEqual(doc.get_usage().count(), 1) + + def test_usage_count_does_not_appear(self): + doc = Document.objects.get(id=1) + page = EventPage.objects.get(id=4) + event_page_related_link = EventPageRelatedLink() + event_page_related_link.page = page + event_page_related_link.link_document = doc + event_page_related_link.save() + response = self.client.get(reverse('wagtaildocs_edit_document', + args=(1,))) + self.assertNotContains(response, 'Used 1 time') + + @override_settings(WAGTAIL_USAGE_COUNT_ENABLED=True) + def test_usage_count_appears(self): + doc = Document.objects.get(id=1) + page = EventPage.objects.get(id=4) + event_page_related_link = EventPageRelatedLink() + event_page_related_link.page = page + event_page_related_link.link_document = doc + event_page_related_link.save() + response = self.client.get(reverse('wagtaildocs_edit_document', + args=(1,))) + self.assertContains(response, 'Used 1 time') + + @override_settings(WAGTAIL_USAGE_COUNT_ENABLED=True) + def test_usage_count_zero_appears(self): + response = self.client.get(reverse('wagtaildocs_edit_document', + args=(1,))) + self.assertContains(response, 'Used 0 times') + + +class TestGetUsage(TestCase, WagtailTestUtils): + fixtures = ['wagtail/tests/fixtures/test.json'] + + def setUp(self): + self.login() + + def test_document_get_usage_not_enabled(self): + doc = Document.objects.get(id=1) + self.assertEqual(list(doc.get_usage()), []) + + @override_settings(WAGTAIL_USAGE_COUNT_ENABLED=True) + def test_unused_document_get_usage(self): + doc = Document.objects.get(id=1) + self.assertEqual(list(doc.get_usage()), []) + + @override_settings(WAGTAIL_USAGE_COUNT_ENABLED=True) + def test_used_document_get_usage(self): + doc = Document.objects.get(id=1) + page = EventPage.objects.get(id=4) + event_page_related_link = EventPageRelatedLink() + event_page_related_link.page = page + event_page_related_link.link_document = doc + event_page_related_link.save() + self.assertTrue(issubclass(Page, type(doc.get_usage()[0]))) + + @override_settings(WAGTAIL_USAGE_COUNT_ENABLED=True) + def test_usage_page(self): + doc = Document.objects.get(id=1) + page = EventPage.objects.get(id=4) + event_page_related_link = EventPageRelatedLink() + event_page_related_link.page = page + event_page_related_link.link_document = doc + event_page_related_link.save() + response = self.client.get(reverse('wagtaildocs_document_usage', + args=(1,))) + self.assertContains(response, 'Christmas') + + @override_settings(WAGTAIL_USAGE_COUNT_ENABLED=True) + def test_usage_page_no_usage(self): + response = self.client.get(reverse('wagtaildocs_document_usage', + args=(1,))) + # There's no usage so there should be no table rows + self.assertRegex(response.content, b'<tbody>(\s|\n)*</tbody>') diff --git a/wagtail/wagtaildocs/views/documents.py b/wagtail/wagtaildocs/views/documents.py index de72ee3b6..488e2ff9a 100644 --- a/wagtail/wagtaildocs/views/documents.py +++ b/wagtail/wagtaildocs/views/documents.py @@ -5,6 +5,7 @@ from django.contrib.auth.decorators import permission_required from django.core.exceptions import PermissionDenied from django.utils.translation import ugettext as _ from django.views.decorators.vary import vary_on_headers +from django.core.urlresolvers import reverse from wagtail.wagtailadmin.forms import SearchForm @@ -120,7 +121,7 @@ def edit(request, document_id): return render(request, "wagtaildocs/documents/edit.html", { 'document': doc, - 'form': form, + 'form': form }) @@ -139,3 +140,24 @@ def delete(request, document_id): return render(request, "wagtaildocs/documents/confirm_delete.html", { 'document': doc, }) + + +@permission_required('wagtailadmin.access_admin') +def usage(request, document_id): + doc = get_object_or_404(Document, id=document_id) + + # Pagination + p = request.GET.get('p', 1) + paginator = Paginator(doc.get_usage(), 20) + + try: + used_by = paginator.page(p) + except PageNotAnInteger: + used_by = paginator.page(1) + except EmptyPage: + used_by = paginator.page(paginator.num_pages) + + return render(request, "wagtaildocs/documents/usage.html", { + 'document': doc, + 'used_by': used_by + }) diff --git a/wagtail/wagtailembeds/locale/bg/LC_MESSAGES/django.mo b/wagtail/wagtailembeds/locale/bg/LC_MESSAGES/django.mo index 674b95ad4..47f0416d2 100644 Binary files a/wagtail/wagtailembeds/locale/bg/LC_MESSAGES/django.mo and b/wagtail/wagtailembeds/locale/bg/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailembeds/locale/bg/LC_MESSAGES/django.po b/wagtail/wagtailembeds/locale/bg/LC_MESSAGES/django.po index 356ac22c2..c90c66ff4 100644 --- a/wagtail/wagtailembeds/locale/bg/LC_MESSAGES/django.po +++ b/wagtail/wagtailembeds/locale/bg/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:43+0000\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" "PO-Revision-Date: 2014-02-24 20:14+0000\n" "Last-Translator: LyuboslavPetrov <petrov.lyuboslav@gmail.com>\n" "Language-Team: Bulgarian (http://www.transifex.com/projects/p/wagtail/" diff --git a/wagtail/wagtailembeds/locale/ca/LC_MESSAGES/django.mo b/wagtail/wagtailembeds/locale/ca/LC_MESSAGES/django.mo index 607ce39f7..4843837b9 100644 Binary files a/wagtail/wagtailembeds/locale/ca/LC_MESSAGES/django.mo and b/wagtail/wagtailembeds/locale/ca/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailembeds/locale/ca/LC_MESSAGES/django.po b/wagtail/wagtailembeds/locale/ca/LC_MESSAGES/django.po index 0628fc81a..f1605c473 100644 --- a/wagtail/wagtailembeds/locale/ca/LC_MESSAGES/django.po +++ b/wagtail/wagtailembeds/locale/ca/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:43+0000\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" "PO-Revision-Date: 2014-02-22 12:45+0000\n" "Last-Translator: Lloople <d.lloople@gmail.com>\n" "Language-Team: Catalan (http://www.transifex.com/projects/p/wagtail/language/" diff --git a/wagtail/wagtailembeds/locale/de/LC_MESSAGES/django.mo b/wagtail/wagtailembeds/locale/de/LC_MESSAGES/django.mo index 32837a283..f7d7daafc 100644 Binary files a/wagtail/wagtailembeds/locale/de/LC_MESSAGES/django.mo and b/wagtail/wagtailembeds/locale/de/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailembeds/locale/de/LC_MESSAGES/django.po b/wagtail/wagtailembeds/locale/de/LC_MESSAGES/django.po index 5cb1d5781..d608913fb 100644 --- a/wagtail/wagtailembeds/locale/de/LC_MESSAGES/django.po +++ b/wagtail/wagtailembeds/locale/de/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:43+0000\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" "PO-Revision-Date: 2014-02-25 17:30+0000\n" "Last-Translator: jspielmann <j@spielmannsolutions.com>\n" "Language-Team: German (http://www.transifex.com/projects/p/wagtail/language/" diff --git a/wagtail/wagtailembeds/locale/el/LC_MESSAGES/django.mo b/wagtail/wagtailembeds/locale/el/LC_MESSAGES/django.mo index 6b8bee4e2..6d451a76b 100644 Binary files a/wagtail/wagtailembeds/locale/el/LC_MESSAGES/django.mo and b/wagtail/wagtailembeds/locale/el/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailembeds/locale/el/LC_MESSAGES/django.po b/wagtail/wagtailembeds/locale/el/LC_MESSAGES/django.po index a4fdd0b7d..cbc6c634b 100644 --- a/wagtail/wagtailembeds/locale/el/LC_MESSAGES/django.po +++ b/wagtail/wagtailembeds/locale/el/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:43+0000\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" "PO-Revision-Date: 2014-02-22 12:34+0000\n" "Last-Translator: serafeim <serafeim@torchbox.com>\n" "Language-Team: Greek (http://www.transifex.com/projects/p/wagtail/language/" diff --git a/wagtail/wagtailembeds/locale/en/LC_MESSAGES/django.mo b/wagtail/wagtailembeds/locale/en/LC_MESSAGES/django.mo index 4b726f7d6..3b83aafe9 100644 Binary files a/wagtail/wagtailembeds/locale/en/LC_MESSAGES/django.mo and b/wagtail/wagtailembeds/locale/en/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailembeds/locale/en/LC_MESSAGES/django.po b/wagtail/wagtailembeds/locale/en/LC_MESSAGES/django.po index 6643b00ee..d656d1d63 100644 --- a/wagtail/wagtailembeds/locale/en/LC_MESSAGES/django.po +++ b/wagtail/wagtailembeds/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:43+0000\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/wagtail/wagtailembeds/locale/es/LC_MESSAGES/django.mo b/wagtail/wagtailembeds/locale/es/LC_MESSAGES/django.mo index 3189ac588..fab6575b9 100644 Binary files a/wagtail/wagtailembeds/locale/es/LC_MESSAGES/django.mo and b/wagtail/wagtailembeds/locale/es/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailembeds/locale/es/LC_MESSAGES/django.po b/wagtail/wagtailembeds/locale/es/LC_MESSAGES/django.po index 109d5fb92..05e4915e1 100644 --- a/wagtail/wagtailembeds/locale/es/LC_MESSAGES/django.po +++ b/wagtail/wagtailembeds/locale/es/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:43+0000\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" "PO-Revision-Date: 2014-02-27 09:34+0000\n" "Last-Translator: fooflare <amos.oviedo@gmail.com>\n" "Language-Team: Spanish (http://www.transifex.com/projects/p/wagtail/language/" diff --git a/wagtail/wagtailembeds/locale/eu/LC_MESSAGES/django.mo b/wagtail/wagtailembeds/locale/eu/LC_MESSAGES/django.mo index 7a9b7b573..d2ae4a35f 100644 Binary files a/wagtail/wagtailembeds/locale/eu/LC_MESSAGES/django.mo and b/wagtail/wagtailembeds/locale/eu/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailembeds/locale/eu/LC_MESSAGES/django.po b/wagtail/wagtailembeds/locale/eu/LC_MESSAGES/django.po index 058a717f0..0b62bb6eb 100644 --- a/wagtail/wagtailembeds/locale/eu/LC_MESSAGES/django.po +++ b/wagtail/wagtailembeds/locale/eu/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:43+0000\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" "PO-Revision-Date: 2014-02-24 22:36+0000\n" "Last-Translator: tomdyson <tom@torchbox.com>\n" "Language-Team: Basque (http://www.transifex.com/projects/p/wagtail/language/" diff --git a/wagtail/wagtailembeds/locale/fr/LC_MESSAGES/django.mo b/wagtail/wagtailembeds/locale/fr/LC_MESSAGES/django.mo index 38a3ca80b..5f756ed8c 100644 Binary files a/wagtail/wagtailembeds/locale/fr/LC_MESSAGES/django.mo and b/wagtail/wagtailembeds/locale/fr/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailembeds/locale/fr/LC_MESSAGES/django.po b/wagtail/wagtailembeds/locale/fr/LC_MESSAGES/django.po index 1cd2eed64..dce212991 100644 --- a/wagtail/wagtailembeds/locale/fr/LC_MESSAGES/django.po +++ b/wagtail/wagtailembeds/locale/fr/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:43+0000\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" "PO-Revision-Date: 2014-03-18 22:04+0000\n" "Last-Translator: nahuel\n" "Language-Team: French (http://www.transifex.com/projects/p/wagtail/language/" diff --git a/wagtail/wagtailembeds/locale/gl/LC_MESSAGES/django.mo b/wagtail/wagtailembeds/locale/gl/LC_MESSAGES/django.mo index dd0288afb..189ad2853 100644 Binary files a/wagtail/wagtailembeds/locale/gl/LC_MESSAGES/django.mo and b/wagtail/wagtailembeds/locale/gl/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailembeds/locale/gl/LC_MESSAGES/django.po b/wagtail/wagtailembeds/locale/gl/LC_MESSAGES/django.po index 6d027c5c1..bc48c912b 100644 --- a/wagtail/wagtailembeds/locale/gl/LC_MESSAGES/django.po +++ b/wagtail/wagtailembeds/locale/gl/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:43+0000\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" "PO-Revision-Date: 2014-03-23 10:32+0000\n" "Last-Translator: fooflare <amos.oviedo@gmail.com>\n" "Language-Team: Galician (http://www.transifex.com/projects/p/wagtail/" diff --git a/wagtail/wagtailembeds/locale/mn/LC_MESSAGES/django.mo b/wagtail/wagtailembeds/locale/mn/LC_MESSAGES/django.mo index f18b1b35f..64a560793 100644 Binary files a/wagtail/wagtailembeds/locale/mn/LC_MESSAGES/django.mo and b/wagtail/wagtailembeds/locale/mn/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailembeds/locale/mn/LC_MESSAGES/django.po b/wagtail/wagtailembeds/locale/mn/LC_MESSAGES/django.po index 8f18fcace..a910cdb90 100644 --- a/wagtail/wagtailembeds/locale/mn/LC_MESSAGES/django.po +++ b/wagtail/wagtailembeds/locale/mn/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:43+0000\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" "PO-Revision-Date: 2014-03-01 17:11+0000\n" "Last-Translator: delgermurun <pdelgermurun@gmail.com>\n" "Language-Team: Mongolian (http://www.transifex.com/projects/p/wagtail/" diff --git a/wagtail/wagtailembeds/locale/pl/LC_MESSAGES/django.mo b/wagtail/wagtailembeds/locale/pl/LC_MESSAGES/django.mo index 9f3bbcc54..3d76ba247 100644 Binary files a/wagtail/wagtailembeds/locale/pl/LC_MESSAGES/django.mo and b/wagtail/wagtailembeds/locale/pl/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailembeds/locale/pl/LC_MESSAGES/django.po b/wagtail/wagtailembeds/locale/pl/LC_MESSAGES/django.po index 4112c515b..1b4b89999 100644 --- a/wagtail/wagtailembeds/locale/pl/LC_MESSAGES/django.po +++ b/wagtail/wagtailembeds/locale/pl/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:43+0000\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" "PO-Revision-Date: 2014-02-23 10:22+0000\n" "Last-Translator: utek <mail@utek.pl>\n" "Language-Team: Polish (http://www.transifex.com/projects/p/wagtail/language/" diff --git a/wagtail/wagtailembeds/locale/ro/LC_MESSAGES/django.mo b/wagtail/wagtailembeds/locale/ro/LC_MESSAGES/django.mo index b22bd1bb0..1dd734c80 100644 Binary files a/wagtail/wagtailembeds/locale/ro/LC_MESSAGES/django.mo and b/wagtail/wagtailembeds/locale/ro/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailembeds/locale/ro/LC_MESSAGES/django.po b/wagtail/wagtailembeds/locale/ro/LC_MESSAGES/django.po index 66f8f4838..38e848315 100644 --- a/wagtail/wagtailembeds/locale/ro/LC_MESSAGES/django.po +++ b/wagtail/wagtailembeds/locale/ro/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:43+0000\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" "PO-Revision-Date: 2014-02-24 22:27+0000\n" "Last-Translator: zerolab\n" "Language-Team: Romanian (http://www.transifex.com/projects/p/wagtail/" diff --git a/wagtail/wagtailembeds/locale/zh/LC_MESSAGES/django.mo b/wagtail/wagtailembeds/locale/zh/LC_MESSAGES/django.mo index 205e6094b..321a4565c 100644 Binary files a/wagtail/wagtailembeds/locale/zh/LC_MESSAGES/django.mo and b/wagtail/wagtailembeds/locale/zh/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailembeds/locale/zh/LC_MESSAGES/django.po b/wagtail/wagtailembeds/locale/zh/LC_MESSAGES/django.po index c5cd2d54d..4514379b6 100644 --- a/wagtail/wagtailembeds/locale/zh/LC_MESSAGES/django.po +++ b/wagtail/wagtailembeds/locale/zh/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:43+0000\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" "PO-Revision-Date: 2014-02-24 17:34+0000\n" "Last-Translator: tomdyson <tom@torchbox.com>\n" "Language-Team: Chinese (http://www.transifex.com/projects/p/wagtail/language/" diff --git a/wagtail/wagtailembeds/locale/zh_TW/LC_MESSAGES/django.mo b/wagtail/wagtailembeds/locale/zh_TW/LC_MESSAGES/django.mo index 7a51d6e23..298bbc5de 100644 Binary files a/wagtail/wagtailembeds/locale/zh_TW/LC_MESSAGES/django.mo and b/wagtail/wagtailembeds/locale/zh_TW/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailembeds/locale/zh_TW/LC_MESSAGES/django.po b/wagtail/wagtailembeds/locale/zh_TW/LC_MESSAGES/django.po index 4a6b9aba2..df6f4e891 100644 --- a/wagtail/wagtailembeds/locale/zh_TW/LC_MESSAGES/django.po +++ b/wagtail/wagtailembeds/locale/zh_TW/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:43+0000\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" "PO-Revision-Date: 2014-02-24 17:34+0000\n" "Last-Translator: wdv4758h <wdv4758h@gmail.com>\n" "Language-Team: \n" diff --git a/wagtail/wagtailembeds/migrations/0001_initial.py b/wagtail/wagtailembeds/south_migrations/0001_initial.py similarity index 100% rename from wagtail/wagtailembeds/migrations/0001_initial.py rename to wagtail/wagtailembeds/south_migrations/0001_initial.py diff --git a/wagtail/wagtailembeds/migrations/0002_auto__add_field_embed_author_name__add_field_embed_provider_name.py b/wagtail/wagtailembeds/south_migrations/0002_auto__add_field_embed_author_name__add_field_embed_provider_name.py similarity index 100% rename from wagtail/wagtailembeds/migrations/0002_auto__add_field_embed_author_name__add_field_embed_provider_name.py rename to wagtail/wagtailembeds/south_migrations/0002_auto__add_field_embed_author_name__add_field_embed_provider_name.py diff --git a/wagtail/wagtailredirects/migrations/__init__.py b/wagtail/wagtailembeds/south_migrations/__init__.py similarity index 100% rename from wagtail/wagtailredirects/migrations/__init__.py rename to wagtail/wagtailembeds/south_migrations/__init__.py diff --git a/wagtail/wagtailembeds/templatetags/embed_filters.py b/wagtail/wagtailembeds/templatetags/embed_filters.py index f6690611b..1eef037e8 100644 --- a/wagtail/wagtailembeds/templatetags/embed_filters.py +++ b/wagtail/wagtailembeds/templatetags/embed_filters.py @@ -1,8 +1,11 @@ import warnings +from wagtail.utils.deprecation import RemovedInWagtail06Warning + + warnings.warn( "The embed_filters tag library has been moved to wagtailembeds_tags. " - "Use {% load wagtailembeds_tags %} instead.", DeprecationWarning) + "Use {% load wagtailembeds_tags %} instead.", RemovedInWagtail06Warning) from wagtail.wagtailembeds.templatetags.wagtailembeds_tags import register, embed diff --git a/wagtail/wagtailforms/locale/en/LC_MESSAGES/django.mo b/wagtail/wagtailforms/locale/en/LC_MESSAGES/django.mo new file mode 100644 index 000000000..3b83aafe9 Binary files /dev/null and b/wagtail/wagtailforms/locale/en/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailforms/locale/en/LC_MESSAGES/django.po b/wagtail/wagtailforms/locale/en/LC_MESSAGES/django.po index 3c183ff0f..4b64a68e9 100644 --- a/wagtail/wagtailforms/locale/en/LC_MESSAGES/django.po +++ b/wagtail/wagtailforms/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:44+0000\n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -79,7 +79,7 @@ msgstr "" msgid "Optional - form submissions will be emailed to this address" msgstr "" -#: wagtail_hooks.py:22 templates/wagtailforms/index.html:3 +#: wagtail_hooks.py:23 templates/wagtailforms/index.html:3 #: templates/wagtailforms/index.html:6 msgid "Forms" msgstr "" diff --git a/wagtail/wagtailforms/migrations/0001_initial.py b/wagtail/wagtailforms/south_migrations/0001_initial.py similarity index 100% rename from wagtail/wagtailforms/migrations/0001_initial.py rename to wagtail/wagtailforms/south_migrations/0001_initial.py diff --git a/wagtail/wagtailsearch/migrations/__init__.py b/wagtail/wagtailforms/south_migrations/__init__.py similarity index 100% rename from wagtail/wagtailsearch/migrations/__init__.py rename to wagtail/wagtailforms/south_migrations/__init__.py diff --git a/wagtail/wagtailimages/admin_urls.py b/wagtail/wagtailimages/admin_urls.py new file mode 100644 index 000000000..44bc61224 --- /dev/null +++ b/wagtail/wagtailimages/admin_urls.py @@ -0,0 +1,23 @@ +from django.conf.urls import url + +from wagtail.wagtailimages.views import images, chooser, multiple + + +urlpatterns = [ + url(r'^$', images.index, name='wagtailimages_index'), + url(r'^(\d+)/$', images.edit, name='wagtailimages_edit_image'), + url(r'^(\d+)/delete/$', images.delete, name='wagtailimages_delete_image'), + url(r'^(\d+)/generate_url/$', images.url_generator, name='wagtailimages_url_generator'), + url(r'^(\d+)/generate_url/(.*)/$', images.generate_url, name='wagtailimages_generate_url'), + url(r'^add/$', images.add, name='wagtailimages_add_image'), + url(r'^usage/(\d+)/$', images.usage, name='wagtailimages_image_usage'), + + url(r'^multiple/add/$', multiple.add, name='wagtailimages_add_multiple'), + url(r'^multiple/(\d+)/$', multiple.edit, name='wagtailimages_edit_multiple'), + url(r'^multiple/(\d+)/delete/$', multiple.delete, name='wagtailimages_delete_multiple'), + + url(r'^chooser/$', chooser.chooser, name='wagtailimages_chooser'), + url(r'^chooser/(\d+)/$', chooser.image_chosen, name='wagtailimages_image_chosen'), + url(r'^chooser/upload/$', chooser.chooser_upload, name='wagtailimages_chooser_upload'), + url(r'^chooser/(\d+)/select_format/$', chooser.chooser_select_format, name='wagtailimages_chooser_select_format'), +] diff --git a/wagtail/wagtailimages/backends/base.py b/wagtail/wagtailimages/backends/base.py index 7024c358d..a374f6ce1 100644 --- a/wagtail/wagtailimages/backends/base.py +++ b/wagtail/wagtailimages/backends/base.py @@ -1,5 +1,7 @@ from django.conf import settings +from wagtail.wagtailimages.utils import crop + class BaseImageBackend(object): def __init__(self, params): @@ -27,10 +29,34 @@ class BaseImageBackend(object): """ raise NotImplementedError('subclasses of BaseImageBackend must provide an resize() method') - def crop_to_centre(self, image, size): - raise NotImplementedError('subclasses of BaseImageBackend must provide a crop_to_centre() method') + def image_data_as_rgb(self, image): + raise NotImplementedError('subclasses of BaseImageBackend must provide an image_data_as_rgb() method') - def resize_to_max(self, image, size): + def crop(self, image, crop_box): + raise NotImplementedError('subclasses of BaseImageBackend must provide a crop() method') + + def crop_to_centre(self, image, size): + crop_box = crop.crop_to_centre(image.size, size) + if crop_box.size != image.size: + return self.crop(image, crop_box) + else: + return image + + def crop_to_point(self, image, size, focal_point): + crop_box = crop.crop_to_point(image.size, size, focal_point) + + # Don't crop if we don't need to + if crop_box.size != image.size: + image = self.crop(image, crop_box) + + # If the focal points are too large, the cropping system may not + # crop it fully, resize the image if this has happened: + if crop_box.size != size: + image = self.resize_to_fill(image, size) + + return image + + def resize_to_max(self, image, size, focal_point=None): """ Resize image down to fit within the given dimensions, preserving aspect ratio. Will leave image unchanged if it's already within those dimensions. @@ -54,7 +80,7 @@ class BaseImageBackend(object): return self.resize(image, final_size) - def resize_to_min(self, image, size): + def resize_to_min(self, image, size, focal_point=None): """ Resize image down to cover the given dimensions, preserving aspect ratio. Will leave image unchanged if width or height is already within those limits. @@ -78,7 +104,7 @@ class BaseImageBackend(object): return self.resize(image, final_size) - def resize_to_width(self, image, target_width): + def resize_to_width(self, image, target_width, focal_point=None): """ Resize image down to the given width, preserving aspect ratio. Will leave image unchanged if it's already within that width. @@ -94,7 +120,7 @@ class BaseImageBackend(object): return self.resize(image, final_size) - def resize_to_height(self, image, target_height): + def resize_to_height(self, image, target_height, focal_point=None): """ Resize image down to the given height, preserving aspect ratio. Will leave image unchanged if it's already within that height. @@ -110,16 +136,18 @@ class BaseImageBackend(object): return self.resize(image, final_size) - def resize_to_fill(self, image, size): + def resize_to_fill(self, image, size, focal_point=None): """ Resize down and crop image to fill the given dimensions. Most suitable for thumbnails. (The final image will match the requested size, unless one or the other dimension is already smaller than the target size) """ - resized_image = self.resize_to_min(image, size) - return self.crop_to_centre(resized_image, size) + if focal_point is not None: + return self.crop_to_point(image, size, focal_point) + else: + resized_image = self.resize_to_min(image, size) + return self.crop_to_centre(resized_image, size) - - def no_operation(self, image, param): + def no_operation(self, image, param, focal_point=None): """Return the image unchanged""" return image diff --git a/wagtail/wagtailimages/backends/pillow.py b/wagtail/wagtailimages/backends/pillow.py index 96976c277..a1963f931 100644 --- a/wagtail/wagtailimages/backends/pillow.py +++ b/wagtail/wagtailimages/backends/pillow.py @@ -1,8 +1,9 @@ from __future__ import absolute_import -from .base import BaseImageBackend import PIL.Image +from wagtail.wagtailimages.backends.base import BaseImageBackend + class PillowBackend(BaseImageBackend): def __init__(self, params): @@ -20,19 +21,15 @@ class PillowBackend(BaseImageBackend): image = image.convert('RGB') return image.resize(size, PIL.Image.ANTIALIAS) - def crop_to_centre(self, image, size): - (original_width, original_height) = image.size - (target_width, target_height) = size + def crop(self, image, crop_box): + return image.crop(crop_box) - # final dimensions should not exceed original dimensions - final_width = min(original_width, target_width) - final_height = min(original_height, target_height) + def image_data_as_rgb(self, image): + # https://github.com/thumbor/thumbor/blob/f52360dc96eedd9fc914fcf19eaf2358f7e2480c/thumbor/engines/pil.py#L206-L215 + if image.mode not in ['RGB', 'RGBA']: + if 'A' in image.mode: + image = image.convert('RGBA') + else: + image = image.convert('RGB') - if final_width == original_width and final_height == original_height: - return image - - left = (original_width - final_width) / 2 - top = (original_height - final_height) / 2 - return image.crop( - (left, top, left + final_width, top + final_height) - ) + return image.mode, image.tostring() diff --git a/wagtail/wagtailimages/backends/wand.py b/wagtail/wagtailimages/backends/wand.py index 91f2d255a..3c41f60c1 100644 --- a/wagtail/wagtailimages/backends/wand.py +++ b/wagtail/wagtailimages/backends/wand.py @@ -1,9 +1,10 @@ from __future__ import absolute_import -from .base import BaseImageBackend from wand.image import Image from wand.api import library +from wagtail.wagtailimages.backends.base import BaseImageBackend + class WandBackend(BaseImageBackend): def __init__(self, params): @@ -24,22 +25,17 @@ class WandBackend(BaseImageBackend): new_image.resize(size[0], size[1]) return new_image - def crop_to_centre(self, image, size): - (original_width, original_height) = image.size - (target_width, target_height) = size - - # final dimensions should not exceed original dimensions - final_width = min(original_width, target_width) - final_height = min(original_height, target_height) - - if final_width == original_width and final_height == original_height: - return image - - left = (original_width - final_width) / 2 - top = (original_height - final_height) / 2 - + def crop(self, image, crop_box): new_image = image.clone() new_image.crop( - left=left, top=top, right=left + final_width, bottom=top + final_height + left=crop_box[0], top=crop_box[1], right=crop_box[2], bottom=crop_box[3] ) return new_image + + def image_data_as_rgb(self, image): + # Only return image data if this image is not animated + if image.animation: + return + + return 'RGB', image.make_blob('RGB') + diff --git a/wagtail/wagtailimages/forms.py b/wagtail/wagtailimages/forms.py index 5c38efc32..5f98fd1b0 100644 --- a/wagtail/wagtailimages/forms.py +++ b/wagtail/wagtailimages/forms.py @@ -1,5 +1,6 @@ from django import forms from django.forms.models import modelform_factory +from django.utils.translation import ugettext as _ from wagtail.wagtailimages.models import get_image_model from wagtail.wagtailimages.formats import get_image_formats @@ -14,6 +15,11 @@ def get_image_form(): widgets={'file': forms.FileInput()}) +def get_image_form_for_multi(): + # exclude the file widget + return modelform_factory(get_image_model(), exclude=('file',)) + + class ImageInsertionForm(forms.Form): """ Form for selecting parameters of the image (e.g. format) prior to insertion @@ -24,3 +30,19 @@ class ImageInsertionForm(forms.Form): widget=forms.RadioSelect ) alt_text = forms.CharField() + + +class URLGeneratorForm(forms.Form): + filter_method = forms.ChoiceField( + label=_("Filter"), + choices=( + ('original', _("Original size")), + ('width', _("Resize to width")), + ('height', _("Resize to height")), + ('min', _("Resize to min")), + ('max', _("Resize to max")), + ('fill', _("Resize to fill")), + ), + ) + width = forms.IntegerField(_("Width"), min_value=0) + height = forms.IntegerField(_("Height"), min_value=0) diff --git a/wagtail/wagtailimages/locale/bg/LC_MESSAGES/django.mo b/wagtail/wagtailimages/locale/bg/LC_MESSAGES/django.mo index d85efeef8..bbfc710a9 100644 Binary files a/wagtail/wagtailimages/locale/bg/LC_MESSAGES/django.mo and b/wagtail/wagtailimages/locale/bg/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailimages/locale/bg/LC_MESSAGES/django.po b/wagtail/wagtailimages/locale/bg/LC_MESSAGES/django.po index 019a2e8e7..d065aad7e 100644 --- a/wagtail/wagtailimages/locale/bg/LC_MESSAGES/django.po +++ b/wagtail/wagtailimages/locale/bg/LC_MESSAGES/django.po @@ -1,53 +1,72 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: -# LyuboslavPetrov <petrov.lyuboslav@gmail.com>, 2014 +# Lyuboslav Petrov <petrov.lyuboslav@gmail.com>, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:53+0000\n" -"PO-Revision-Date: 2014-03-14 21:12+0000\n" -"Last-Translator: serafeim <serafeim@torchbox.com>\n" -"Language-Team: Bulgarian (http://www.transifex.com/projects/p/wagtail/" -"language/bg/)\n" -"Language: bg\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Bulgarian (http://www.transifex.com/projects/p/wagtail/language/bg/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: bg\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: models.py:29 +#: forms.py:37 +msgid "Filter" +msgstr "" + +#: forms.py:39 +msgid "Original size" +msgstr "" + +#: forms.py:40 +msgid "Resize to width" +msgstr "" + +#: forms.py:41 +msgid "Resize to height" +msgstr "" + +#: forms.py:42 +msgid "Resize to min" +msgstr "" + +#: forms.py:43 +msgid "Resize to max" +msgstr "" + +#: forms.py:44 +msgid "Resize to fill" +msgstr "" + +#: forms.py:47 +msgid "Width" +msgstr "" + +#: forms.py:48 +msgid "Height" +msgstr "" + +#: models.py:34 templates/wagtailimages/images/usage.html:16 msgid "Title" msgstr "Заглавие" -#: models.py:44 +#: models.py:49 msgid "File" msgstr "Файл" -#: models.py:50 +#: models.py:55 msgid "Tags" msgstr "Тагове" -#: utils.py:17 -#, fuzzy -msgid "" -"Not a valid image. Please use a gif, jpeg or png file with the correct file " -"extension." -msgstr "" -"Невалиден формат на изображение. Моля ползвайте gif, jpeg или png файлове." - -#: utils.py:28 -#, fuzzy, python-format -msgid "" -"Not a valid %s image. Please use a gif, jpeg or png file with the correct " -"file extension." -msgstr "" -"Невалиден формат на изображение. Моля ползвайте gif, jpeg или png файлове." - -#: wagtail_hooks.py:23 templates/wagtailimages/images/index.html:5 +#: wagtail_hooks.py:64 templates/wagtailimages/images/index.html:5 #: templates/wagtailimages/images/index.html:18 msgid "Images" msgstr "Изображения" @@ -82,13 +101,8 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "" -"\n" -" Има едно съвпадение\n" -" " -msgstr[1] "" -"\n" -"Има %(counter)s съвпадения" +msgstr[0] "\n Има едно съвпадение\n " +msgstr[1] "\nИма %(counter)s съвпадения" #: templates/wagtailimages/chooser/results.html:13 #: templates/wagtailimages/images/results.html:13 @@ -144,6 +158,7 @@ msgid "Yes, delete" msgstr "Да, изтрий го" #: templates/wagtailimages/images/edit.html:4 +#: templates/wagtailimages/images/url_generator.html:4 #, python-format msgid "Editing image %(title)s" msgstr "Редакция на %(title)s" @@ -160,32 +175,121 @@ msgstr "" #: templates/wagtailimages/images/results.html:34 #, python-format msgid "" -"You've not uploaded any images. Why not <a href=" -"\"%(wagtailimages_add_image_url)s\">add one now</a>?" -msgstr "" -"Не сте качили никакви изображения. Защо не <a href=" -"\"%(wagtailimages_add_image_url)s\">качите едно сега</a>?" +"You've not uploaded any images. Why not <a " +"href=\"%(wagtailimages_add_image_url)s\">add one now</a>?" +msgstr "Не сте качили никакви изображения. Защо не <a href=\"%(wagtailimages_add_image_url)s\">качите едно сега</a>?" -#: views/images.py:31 views/images.py:42 +#: templates/wagtailimages/images/url_generator.html:9 +msgid "Generating URL" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:25 +msgid "URL" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:28 +msgid "Preview" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:34 +msgid "" +"Note that images generated larger than the screen will appear smaller when " +"previewed here, so they fit the screen." +msgstr "" + +#: templates/wagtailimages/images/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtailimages/images/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtailimages/images/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtailimages/images/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtailimages/images/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtailimages/images/usage.html:26 +msgid "Edit this page" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:3 +msgid "Add multiple images" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:13 +msgid "Add images" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:18 +msgid "Drag and drop images into this area to upload immediately." +msgstr "" + +#: templates/wagtailimages/multiple/add.html:22 +msgid "Or choose from your computer" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:47 +msgid "" +"Upload successful. Please update this image with a more appropriate title, " +"if necessary. You may also delete the image completely if the upload wasn't " +"required." +msgstr "" + +#: templates/wagtailimages/multiple/add.html:48 +msgid "Sorry, upload failed." +msgstr "" + +#: templates/wagtailimages/multiple/edit_form.html:10 +msgid "Update" +msgstr "" + +#: templates/wagtailimages/multiple/edit_form.html:11 +msgid "Delete" +msgstr "" + +#: utils/validators.py:17 utils/validators.py:28 +msgid "" +"Not a valid image. Please use a gif, jpeg or png file with the correct file " +"extension (*.gif, *.jpg or *.png)." +msgstr "" + +#: utils/validators.py:35 +#, python-format +msgid "" +"Not a valid %s image. Please use a gif, jpeg or png file with the correct " +"file extension (*.gif, *.jpg or *.png)." +msgstr "" + +#: views/images.py:37 views/images.py:47 msgid "Search images" msgstr "" -#: views/images.py:94 +#: views/images.py:99 msgid "Image '{0}' updated." msgstr "Изображение '{0}' обновено." -#: views/images.py:97 +#: views/images.py:102 msgid "The image could not be saved due to errors." msgstr "Изображението не можеше да бъде запазено поради грешки." -#: views/images.py:116 +#: views/images.py:188 msgid "Image '{0}' deleted." msgstr "Изображение '{0}' изтрито." -#: views/images.py:134 +#: views/images.py:206 msgid "Image '{0}' added." msgstr "Изображение '{0}' добавено." -#: views/images.py:137 +#: views/images.py:209 msgid "The image could not be created due to errors." msgstr "Изображението не можеше да бъде създадено поради грешки." diff --git a/wagtail/wagtailimages/locale/ca/LC_MESSAGES/django.mo b/wagtail/wagtailimages/locale/ca/LC_MESSAGES/django.mo index 5d6166928..08f5ccfdb 100644 Binary files a/wagtail/wagtailimages/locale/ca/LC_MESSAGES/django.mo and b/wagtail/wagtailimages/locale/ca/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailimages/locale/ca/LC_MESSAGES/django.po b/wagtail/wagtailimages/locale/ca/LC_MESSAGES/django.po index 3fa7b7478..d43082fd6 100644 --- a/wagtail/wagtailimages/locale/ca/LC_MESSAGES/django.po +++ b/wagtail/wagtailimages/locale/ca/LC_MESSAGES/django.po @@ -1,55 +1,72 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: -# Lloople <d.lloople@gmail.com>, 2014 +# David Llop <d.lloople@gmail.com>, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:53+0000\n" -"PO-Revision-Date: 2014-03-14 21:58+0000\n" -"Last-Translator: Lloople <d.lloople@gmail.com>\n" -"Language-Team: Catalan (http://www.transifex.com/projects/p/wagtail/language/" -"ca/)\n" -"Language: ca\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Catalan (http://www.transifex.com/projects/p/wagtail/language/ca/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ca\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: models.py:29 +#: forms.py:37 +msgid "Filter" +msgstr "" + +#: forms.py:39 +msgid "Original size" +msgstr "" + +#: forms.py:40 +msgid "Resize to width" +msgstr "" + +#: forms.py:41 +msgid "Resize to height" +msgstr "" + +#: forms.py:42 +msgid "Resize to min" +msgstr "" + +#: forms.py:43 +msgid "Resize to max" +msgstr "" + +#: forms.py:44 +msgid "Resize to fill" +msgstr "" + +#: forms.py:47 +msgid "Width" +msgstr "" + +#: forms.py:48 +msgid "Height" +msgstr "" + +#: models.py:34 templates/wagtailimages/images/usage.html:16 msgid "Title" msgstr "Títol" -#: models.py:44 +#: models.py:49 msgid "File" msgstr "Arxiu" -#: models.py:50 +#: models.py:55 msgid "Tags" msgstr "Tags" -#: utils.py:17 -#, fuzzy -msgid "" -"Not a valid image. Please use a gif, jpeg or png file with the correct file " -"extension." -msgstr "" -"No és un format d'imatge vàlid. Si us plau fes servir gif, jpeg o png com a " -"formats." - -#: utils.py:28 -#, fuzzy, python-format -msgid "" -"Not a valid %s image. Please use a gif, jpeg or png file with the correct " -"file extension." -msgstr "" -"No és un format d'imatge vàlid. Si us plau fes servir gif, jpeg o png com a " -"formats." - -#: wagtail_hooks.py:23 templates/wagtailimages/images/index.html:5 +#: wagtail_hooks.py:64 templates/wagtailimages/images/index.html:5 #: templates/wagtailimages/images/index.html:18 msgid "Images" msgstr "Imatges" @@ -84,12 +101,8 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "" -"\n" -"Hi ha un resultat" -msgstr[1] "" -"\n" -"Hi han %(counter)s resultats" +msgstr[0] "\nHi ha un resultat" +msgstr[1] "\nHi han %(counter)s resultats" #: templates/wagtailimages/chooser/results.html:13 #: templates/wagtailimages/images/results.html:13 @@ -145,6 +158,7 @@ msgid "Yes, delete" msgstr "Si, esborra" #: templates/wagtailimages/images/edit.html:4 +#: templates/wagtailimages/images/url_generator.html:4 #, python-format msgid "Editing image %(title)s" msgstr "Editant imatge %(title)s" @@ -161,32 +175,121 @@ msgstr "Ho sentim, cap imatge coincideix amb \"<em>%(query_string)s</em>\"" #: templates/wagtailimages/images/results.html:34 #, python-format msgid "" -"You've not uploaded any images. Why not <a href=" -"\"%(wagtailimages_add_image_url)s\">add one now</a>?" -msgstr "" -"No has pujat cap imatge. Per què no <a href=\"%(wagtailimages_add_image_url)s" -"\">afegeixes una ara</a>?" +"You've not uploaded any images. Why not <a " +"href=\"%(wagtailimages_add_image_url)s\">add one now</a>?" +msgstr "No has pujat cap imatge. Per què no <a href=\"%(wagtailimages_add_image_url)s\">afegeixes una ara</a>?" -#: views/images.py:31 views/images.py:42 +#: templates/wagtailimages/images/url_generator.html:9 +msgid "Generating URL" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:25 +msgid "URL" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:28 +msgid "Preview" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:34 +msgid "" +"Note that images generated larger than the screen will appear smaller when " +"previewed here, so they fit the screen." +msgstr "" + +#: templates/wagtailimages/images/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtailimages/images/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtailimages/images/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtailimages/images/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtailimages/images/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtailimages/images/usage.html:26 +msgid "Edit this page" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:3 +msgid "Add multiple images" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:13 +msgid "Add images" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:18 +msgid "Drag and drop images into this area to upload immediately." +msgstr "" + +#: templates/wagtailimages/multiple/add.html:22 +msgid "Or choose from your computer" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:47 +msgid "" +"Upload successful. Please update this image with a more appropriate title, " +"if necessary. You may also delete the image completely if the upload wasn't " +"required." +msgstr "" + +#: templates/wagtailimages/multiple/add.html:48 +msgid "Sorry, upload failed." +msgstr "" + +#: templates/wagtailimages/multiple/edit_form.html:10 +msgid "Update" +msgstr "" + +#: templates/wagtailimages/multiple/edit_form.html:11 +msgid "Delete" +msgstr "" + +#: utils/validators.py:17 utils/validators.py:28 +msgid "" +"Not a valid image. Please use a gif, jpeg or png file with the correct file " +"extension (*.gif, *.jpg or *.png)." +msgstr "" + +#: utils/validators.py:35 +#, python-format +msgid "" +"Not a valid %s image. Please use a gif, jpeg or png file with the correct " +"file extension (*.gif, *.jpg or *.png)." +msgstr "" + +#: views/images.py:37 views/images.py:47 msgid "Search images" msgstr "Cercar imatges" -#: views/images.py:94 +#: views/images.py:99 msgid "Image '{0}' updated." msgstr "Imatge '{0}' actualitzada." -#: views/images.py:97 +#: views/images.py:102 msgid "The image could not be saved due to errors." msgstr "No s'ha pogut desar la imatge." -#: views/images.py:116 +#: views/images.py:188 msgid "Image '{0}' deleted." msgstr "Imatge '{0}' eliminada." -#: views/images.py:134 +#: views/images.py:206 msgid "Image '{0}' added." msgstr "Imatge '{0}' afegida." -#: views/images.py:137 +#: views/images.py:209 msgid "The image could not be created due to errors." msgstr "No s'ha pogut crear la imatge." diff --git a/wagtail/wagtailimages/locale/de/LC_MESSAGES/django.mo b/wagtail/wagtailimages/locale/de/LC_MESSAGES/django.mo index 8f9ffa29c..0cb48f45d 100644 Binary files a/wagtail/wagtailimages/locale/de/LC_MESSAGES/django.mo and b/wagtail/wagtailimages/locale/de/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailimages/locale/de/LC_MESSAGES/django.po b/wagtail/wagtailimages/locale/de/LC_MESSAGES/django.po index 62997f97c..9f186eb44 100644 --- a/wagtail/wagtailimages/locale/de/LC_MESSAGES/django.po +++ b/wagtail/wagtailimages/locale/de/LC_MESSAGES/django.po @@ -1,54 +1,73 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: -# jspielmann <j@spielmannsolutions.com>, 2014 +# Johannes Spielmann <j@spielmannsolutions.com>, 2014 # pcraston <patrick@craston.com>, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:53+0000\n" -"PO-Revision-Date: 2014-03-24 19:01+0000\n" -"Last-Translator: pcraston <patrick@craston.com>\n" -"Language-Team: German (http://www.transifex.com/projects/p/wagtail/language/" -"de/)\n" -"Language: de\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: German (http://www.transifex.com/projects/p/wagtail/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: models.py:29 +#: forms.py:37 +msgid "Filter" +msgstr "" + +#: forms.py:39 +msgid "Original size" +msgstr "" + +#: forms.py:40 +msgid "Resize to width" +msgstr "" + +#: forms.py:41 +msgid "Resize to height" +msgstr "" + +#: forms.py:42 +msgid "Resize to min" +msgstr "" + +#: forms.py:43 +msgid "Resize to max" +msgstr "" + +#: forms.py:44 +msgid "Resize to fill" +msgstr "" + +#: forms.py:47 +msgid "Width" +msgstr "" + +#: forms.py:48 +msgid "Height" +msgstr "" + +#: models.py:34 templates/wagtailimages/images/usage.html:16 msgid "Title" msgstr "Titel" -#: models.py:44 +#: models.py:49 msgid "File" msgstr "Datei" -#: models.py:50 +#: models.py:55 msgid "Tags" msgstr "Schlagwörter" -#: utils.py:17 -#, fuzzy -msgid "" -"Not a valid image. Please use a gif, jpeg or png file with the correct file " -"extension." -msgstr "" -"Kein gültiges Bildformat. Bitte benutzen Sie GIF-, JPEG- oder PNG-Dateien." - -#: utils.py:28 -#, fuzzy, python-format -msgid "" -"Not a valid %s image. Please use a gif, jpeg or png file with the correct " -"file extension." -msgstr "" -"Kein gültiges Bildformat. Bitte benutzen Sie GIF-, JPEG- oder PNG-Dateien." - -#: wagtail_hooks.py:23 templates/wagtailimages/images/index.html:5 +#: wagtail_hooks.py:64 templates/wagtailimages/images/index.html:5 #: templates/wagtailimages/images/index.html:18 msgid "Images" msgstr "Bilder" @@ -83,14 +102,8 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "" -"\n" -" Es gibt ein Ergebnis\n" -" " -msgstr[1] "" -"\n" -" Es gibt %(counter)s Ergebnisse\n" -" " +msgstr[0] "\n Es gibt ein Ergebnis\n " +msgstr[1] "\n Es gibt %(counter)s Ergebnisse\n " #: templates/wagtailimages/chooser/results.html:13 #: templates/wagtailimages/images/results.html:13 @@ -146,6 +159,7 @@ msgid "Yes, delete" msgstr "Ja, löschen" #: templates/wagtailimages/images/edit.html:4 +#: templates/wagtailimages/images/url_generator.html:4 #, python-format msgid "Editing image %(title)s" msgstr "Bild %(title)s bearbeiten" @@ -157,38 +171,126 @@ msgstr "Bearbeiten" #: templates/wagtailimages/images/results.html:31 #, python-format msgid "Sorry, no images match \"<em>%(query_string)s</em>\"" -msgstr "" -"Es gibt leider keine Bilder zum Suchbegriff \"<em>%(query_string)s</em>\"" +msgstr "Es gibt leider keine Bilder zum Suchbegriff \"<em>%(query_string)s</em>\"" #: templates/wagtailimages/images/results.html:34 #, python-format msgid "" -"You've not uploaded any images. Why not <a href=" -"\"%(wagtailimages_add_image_url)s\">add one now</a>?" -msgstr "" -"Sie haben noch keine Bilder hochgeladen. <a href=" -"\"%(wagtailimages_add_image_url)s\">Laden Sie doch jetzt eins hoch!</a>" +"You've not uploaded any images. Why not <a " +"href=\"%(wagtailimages_add_image_url)s\">add one now</a>?" +msgstr "Sie haben noch keine Bilder hochgeladen. <a href=\"%(wagtailimages_add_image_url)s\">Laden Sie doch jetzt eins hoch!</a>" -#: views/images.py:31 views/images.py:42 +#: templates/wagtailimages/images/url_generator.html:9 +msgid "Generating URL" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:25 +msgid "URL" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:28 +msgid "Preview" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:34 +msgid "" +"Note that images generated larger than the screen will appear smaller when " +"previewed here, so they fit the screen." +msgstr "" + +#: templates/wagtailimages/images/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtailimages/images/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtailimages/images/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtailimages/images/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtailimages/images/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtailimages/images/usage.html:26 +msgid "Edit this page" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:3 +msgid "Add multiple images" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:13 +msgid "Add images" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:18 +msgid "Drag and drop images into this area to upload immediately." +msgstr "" + +#: templates/wagtailimages/multiple/add.html:22 +msgid "Or choose from your computer" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:47 +msgid "" +"Upload successful. Please update this image with a more appropriate title, " +"if necessary. You may also delete the image completely if the upload wasn't " +"required." +msgstr "" + +#: templates/wagtailimages/multiple/add.html:48 +msgid "Sorry, upload failed." +msgstr "" + +#: templates/wagtailimages/multiple/edit_form.html:10 +msgid "Update" +msgstr "" + +#: templates/wagtailimages/multiple/edit_form.html:11 +msgid "Delete" +msgstr "" + +#: utils/validators.py:17 utils/validators.py:28 +msgid "" +"Not a valid image. Please use a gif, jpeg or png file with the correct file " +"extension (*.gif, *.jpg or *.png)." +msgstr "" + +#: utils/validators.py:35 +#, python-format +msgid "" +"Not a valid %s image. Please use a gif, jpeg or png file with the correct " +"file extension (*.gif, *.jpg or *.png)." +msgstr "" + +#: views/images.py:37 views/images.py:47 msgid "Search images" msgstr "Nach Bildern suchen" -#: views/images.py:94 +#: views/images.py:99 msgid "Image '{0}' updated." msgstr "Bild '{0}' geändert." -#: views/images.py:97 +#: views/images.py:102 msgid "The image could not be saved due to errors." msgstr "Aufgrund von Fehlern konnte das Bild nicht gespeichert werden." -#: views/images.py:116 +#: views/images.py:188 msgid "Image '{0}' deleted." msgstr "Bild '{0}' gelöscht." -#: views/images.py:134 +#: views/images.py:206 msgid "Image '{0}' added." msgstr "Bild '{0}' hinzugefügt." -#: views/images.py:137 +#: views/images.py:209 msgid "The image could not be created due to errors." msgstr "Aufgrund von Fehlern konnte das Bild nicht erstellt werden." diff --git a/wagtail/wagtailimages/locale/el/LC_MESSAGES/django.mo b/wagtail/wagtailimages/locale/el/LC_MESSAGES/django.mo index 07a20313a..fb25dfafc 100644 Binary files a/wagtail/wagtailimages/locale/el/LC_MESSAGES/django.mo and b/wagtail/wagtailimages/locale/el/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailimages/locale/el/LC_MESSAGES/django.po b/wagtail/wagtailimages/locale/el/LC_MESSAGES/django.po index 260846989..92bb5f8af 100644 --- a/wagtail/wagtailimages/locale/el/LC_MESSAGES/django.po +++ b/wagtail/wagtailimages/locale/el/LC_MESSAGES/django.po @@ -1,51 +1,72 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # serafeim <serafeim@torchbox.com>, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:53+0000\n" -"PO-Revision-Date: 2014-03-14 21:17+0000\n" -"Last-Translator: serafeim <serafeim@torchbox.com>\n" -"Language-Team: Greek (http://www.transifex.com/projects/p/wagtail/language/" -"el/)\n" -"Language: el\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Greek (http://www.transifex.com/projects/p/wagtail/language/el/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: el\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: models.py:29 +#: forms.py:37 +msgid "Filter" +msgstr "" + +#: forms.py:39 +msgid "Original size" +msgstr "" + +#: forms.py:40 +msgid "Resize to width" +msgstr "" + +#: forms.py:41 +msgid "Resize to height" +msgstr "" + +#: forms.py:42 +msgid "Resize to min" +msgstr "" + +#: forms.py:43 +msgid "Resize to max" +msgstr "" + +#: forms.py:44 +msgid "Resize to fill" +msgstr "" + +#: forms.py:47 +msgid "Width" +msgstr "" + +#: forms.py:48 +msgid "Height" +msgstr "" + +#: models.py:34 templates/wagtailimages/images/usage.html:16 msgid "Title" msgstr "Τίτλος" -#: models.py:44 +#: models.py:49 msgid "File" msgstr "Αρχείο" -#: models.py:50 +#: models.py:55 msgid "Tags" msgstr "Ετικέτες" -#: utils.py:17 -#, fuzzy -msgid "" -"Not a valid image. Please use a gif, jpeg or png file with the correct file " -"extension." -msgstr "Πρέπει να ανεβάσετε αρχείο εικόνας τύπου gif, gpeg ή png." - -#: utils.py:28 -#, fuzzy, python-format -msgid "" -"Not a valid %s image. Please use a gif, jpeg or png file with the correct " -"file extension." -msgstr "Πρέπει να ανεβάσετε αρχείο εικόνας τύπου gif, gpeg ή png." - -#: wagtail_hooks.py:23 templates/wagtailimages/images/index.html:5 +#: wagtail_hooks.py:64 templates/wagtailimages/images/index.html:5 #: templates/wagtailimages/images/index.html:18 msgid "Images" msgstr "Εικόνες" @@ -80,13 +101,8 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "" -"\n" -"Βρέθηκε ένα αποτέλεσμα" -msgstr[1] "" -"\n" -" Βρέθηκαν %(counter)s αποτελέσματα\n" -" " +msgstr[0] "\nΒρέθηκε ένα αποτέλεσμα" +msgstr[1] "\n Βρέθηκαν %(counter)s αποτελέσματα\n " #: templates/wagtailimages/chooser/results.html:13 #: templates/wagtailimages/images/results.html:13 @@ -142,6 +158,7 @@ msgid "Yes, delete" msgstr "Ναι, να διαγραφεί" #: templates/wagtailimages/images/edit.html:4 +#: templates/wagtailimages/images/url_generator.html:4 #, python-format msgid "Editing image %(title)s" msgstr "Επεξεργασία εικόνας %(title)s" @@ -153,38 +170,126 @@ msgstr "Διόρθωση" #: templates/wagtailimages/images/results.html:31 #, python-format msgid "Sorry, no images match \"<em>%(query_string)s</em>\"" -msgstr "" -"Λυπούμαστε, καμία εικόνα δε ταιριάζει με το \"<em>%(query_string)s</em>\"" +msgstr "Λυπούμαστε, καμία εικόνα δε ταιριάζει με το \"<em>%(query_string)s</em>\"" #: templates/wagtailimages/images/results.html:34 #, python-format msgid "" -"You've not uploaded any images. Why not <a href=" -"\"%(wagtailimages_add_image_url)s\">add one now</a>?" -msgstr "" -"Δεν υπάρχουν εικόνες. Θέλετε να <a href=\"%(wagtailimages_add_image_url)s" -"\">προσθέσετε μερικές</a>;" +"You've not uploaded any images. Why not <a " +"href=\"%(wagtailimages_add_image_url)s\">add one now</a>?" +msgstr "Δεν υπάρχουν εικόνες. Θέλετε να <a href=\"%(wagtailimages_add_image_url)s\">προσθέσετε μερικές</a>;" -#: views/images.py:31 views/images.py:42 +#: templates/wagtailimages/images/url_generator.html:9 +msgid "Generating URL" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:25 +msgid "URL" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:28 +msgid "Preview" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:34 +msgid "" +"Note that images generated larger than the screen will appear smaller when " +"previewed here, so they fit the screen." +msgstr "" + +#: templates/wagtailimages/images/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtailimages/images/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtailimages/images/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtailimages/images/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtailimages/images/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtailimages/images/usage.html:26 +msgid "Edit this page" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:3 +msgid "Add multiple images" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:13 +msgid "Add images" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:18 +msgid "Drag and drop images into this area to upload immediately." +msgstr "" + +#: templates/wagtailimages/multiple/add.html:22 +msgid "Or choose from your computer" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:47 +msgid "" +"Upload successful. Please update this image with a more appropriate title, " +"if necessary. You may also delete the image completely if the upload wasn't " +"required." +msgstr "" + +#: templates/wagtailimages/multiple/add.html:48 +msgid "Sorry, upload failed." +msgstr "" + +#: templates/wagtailimages/multiple/edit_form.html:10 +msgid "Update" +msgstr "" + +#: templates/wagtailimages/multiple/edit_form.html:11 +msgid "Delete" +msgstr "" + +#: utils/validators.py:17 utils/validators.py:28 +msgid "" +"Not a valid image. Please use a gif, jpeg or png file with the correct file " +"extension (*.gif, *.jpg or *.png)." +msgstr "" + +#: utils/validators.py:35 +#, python-format +msgid "" +"Not a valid %s image. Please use a gif, jpeg or png file with the correct " +"file extension (*.gif, *.jpg or *.png)." +msgstr "" + +#: views/images.py:37 views/images.py:47 msgid "Search images" msgstr "Αναζήτηση εικόνων" -#: views/images.py:94 +#: views/images.py:99 msgid "Image '{0}' updated." msgstr "Η εικόνα '{0}' ενημερώθηκε." -#: views/images.py:97 +#: views/images.py:102 msgid "The image could not be saved due to errors." msgstr "Δεν ήταν δυνατή η αποθήκευση της εικόνας." -#: views/images.py:116 +#: views/images.py:188 msgid "Image '{0}' deleted." msgstr "Η εικόνα '{0}' διαγράφηκε." -#: views/images.py:134 +#: views/images.py:206 msgid "Image '{0}' added." msgstr "Η εικόνα '{0}' δημιουργήθηκε." -#: views/images.py:137 +#: views/images.py:209 msgid "The image could not be created due to errors." msgstr "Δεν ήταν δυνατή η δημιουργία της εικόνας." diff --git a/wagtail/wagtailimages/locale/en/LC_MESSAGES/django.mo b/wagtail/wagtailimages/locale/en/LC_MESSAGES/django.mo index 4b726f7d6..44e531ab0 100644 Binary files a/wagtail/wagtailimages/locale/en/LC_MESSAGES/django.mo and b/wagtail/wagtailimages/locale/en/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailimages/locale/en/LC_MESSAGES/django.po b/wagtail/wagtailimages/locale/en/LC_MESSAGES/django.po index 035259450..3fddd59f3 100644 --- a/wagtail/wagtailimages/locale/en/LC_MESSAGES/django.po +++ b/wagtail/wagtailimages/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:53+0000\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -17,32 +17,55 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: models.py:29 +#: forms.py:37 +msgid "Filter" +msgstr "" + +#: forms.py:39 +msgid "Original size" +msgstr "" + +#: forms.py:40 +msgid "Resize to width" +msgstr "" + +#: forms.py:41 +msgid "Resize to height" +msgstr "" + +#: forms.py:42 +msgid "Resize to min" +msgstr "" + +#: forms.py:43 +msgid "Resize to max" +msgstr "" + +#: forms.py:44 +msgid "Resize to fill" +msgstr "" + +#: forms.py:47 +msgid "Width" +msgstr "" + +#: forms.py:48 +msgid "Height" +msgstr "" + +#: models.py:34 templates/wagtailimages/images/usage.html:16 msgid "Title" msgstr "" -#: models.py:44 +#: models.py:49 msgid "File" msgstr "" -#: models.py:50 +#: models.py:55 msgid "Tags" msgstr "" -#: utils.py:17 -msgid "" -"Not a valid image. Please use a gif, jpeg or png file with the correct file " -"extension." -msgstr "" - -#: utils.py:28 -#, python-format -msgid "" -"Not a valid %s image. Please use a gif, jpeg or png file with the correct " -"file extension." -msgstr "" - -#: wagtail_hooks.py:23 templates/wagtailimages/images/index.html:5 +#: wagtail_hooks.py:64 templates/wagtailimages/images/index.html:5 #: templates/wagtailimages/images/index.html:18 msgid "Images" msgstr "" @@ -134,6 +157,7 @@ msgid "Yes, delete" msgstr "" #: templates/wagtailimages/images/edit.html:4 +#: templates/wagtailimages/images/url_generator.html:4 #, python-format msgid "Editing image %(title)s" msgstr "" @@ -154,26 +178,117 @@ msgid "" "\"%(wagtailimages_add_image_url)s\">add one now</a>?" msgstr "" -#: views/images.py:31 views/images.py:42 +#: templates/wagtailimages/images/url_generator.html:9 +msgid "Generating URL" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:25 +msgid "URL" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:28 +msgid "Preview" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:34 +msgid "" +"Note that images generated larger than the screen will appear smaller when " +"previewed here, so they fit the screen." +msgstr "" + +#: templates/wagtailimages/images/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtailimages/images/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtailimages/images/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtailimages/images/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtailimages/images/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtailimages/images/usage.html:26 +msgid "Edit this page" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:3 +msgid "Add multiple images" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:13 +msgid "Add images" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:18 +msgid "Drag and drop images into this area to upload immediately." +msgstr "" + +#: templates/wagtailimages/multiple/add.html:22 +msgid "Or choose from your computer" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:47 +msgid "" +"Upload successful. Please update this image with a more appropriate title, " +"if necessary. You may also delete the image completely if the upload wasn't " +"required." +msgstr "" + +#: templates/wagtailimages/multiple/add.html:48 +msgid "Sorry, upload failed." +msgstr "" + +#: templates/wagtailimages/multiple/edit_form.html:10 +msgid "Update" +msgstr "" + +#: templates/wagtailimages/multiple/edit_form.html:11 +msgid "Delete" +msgstr "" + +#: utils/validators.py:17 utils/validators.py:28 +msgid "" +"Not a valid image. Please use a gif, jpeg or png file with the correct file " +"extension (*.gif, *.jpg or *.png)." +msgstr "" + +#: utils/validators.py:35 +#, python-format +msgid "" +"Not a valid %s image. Please use a gif, jpeg or png file with the correct " +"file extension (*.gif, *.jpg or *.png)." +msgstr "" + +#: views/images.py:37 views/images.py:47 msgid "Search images" msgstr "" -#: views/images.py:94 +#: views/images.py:99 msgid "Image '{0}' updated." msgstr "" -#: views/images.py:97 +#: views/images.py:102 msgid "The image could not be saved due to errors." msgstr "" -#: views/images.py:116 +#: views/images.py:188 msgid "Image '{0}' deleted." msgstr "" -#: views/images.py:134 +#: views/images.py:206 msgid "Image '{0}' added." msgstr "" -#: views/images.py:137 +#: views/images.py:209 msgid "The image could not be created due to errors." msgstr "" diff --git a/wagtail/wagtailimages/locale/es/LC_MESSAGES/django.mo b/wagtail/wagtailimages/locale/es/LC_MESSAGES/django.mo index e6210845b..d57e9c728 100644 Binary files a/wagtail/wagtailimages/locale/es/LC_MESSAGES/django.mo and b/wagtail/wagtailimages/locale/es/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailimages/locale/es/LC_MESSAGES/django.po b/wagtail/wagtailimages/locale/es/LC_MESSAGES/django.po index 5079ae3e5..9f8743311 100644 --- a/wagtail/wagtailimages/locale/es/LC_MESSAGES/django.po +++ b/wagtail/wagtailimages/locale/es/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # fooflare <amos.oviedo@gmail.com>, 2014 # fooflare <amos.oviedo@gmail.com>, 2014 @@ -9,48 +9,65 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:53+0000\n" -"PO-Revision-Date: 2014-03-23 10:21+0000\n" -"Last-Translator: fooflare <amos.oviedo@gmail.com>\n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/wagtail/language/" -"es/)\n" -"Language: es\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Spanish (http://www.transifex.com/projects/p/wagtail/language/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: models.py:29 +#: forms.py:37 +msgid "Filter" +msgstr "" + +#: forms.py:39 +msgid "Original size" +msgstr "" + +#: forms.py:40 +msgid "Resize to width" +msgstr "" + +#: forms.py:41 +msgid "Resize to height" +msgstr "" + +#: forms.py:42 +msgid "Resize to min" +msgstr "" + +#: forms.py:43 +msgid "Resize to max" +msgstr "" + +#: forms.py:44 +msgid "Resize to fill" +msgstr "" + +#: forms.py:47 +msgid "Width" +msgstr "" + +#: forms.py:48 +msgid "Height" +msgstr "" + +#: models.py:34 templates/wagtailimages/images/usage.html:16 msgid "Title" msgstr "Título" -#: models.py:44 +#: models.py:49 msgid "File" msgstr "Archivo" -#: models.py:50 +#: models.py:55 msgid "Tags" msgstr "Etiquetas" -#: utils.py:17 -#, fuzzy -msgid "" -"Not a valid image. Please use a gif, jpeg or png file with the correct file " -"extension." -msgstr "" -"No es un formato válido de imagen. Por favor, usa en su lugar un archivo " -"gif, jpeg o png." - -#: utils.py:28 -#, fuzzy, python-format -msgid "" -"Not a valid %s image. Please use a gif, jpeg or png file with the correct " -"file extension." -msgstr "" -"No es un formato válido de imagen. Por favor, usa en su lugar un archivo " -"gif, jpeg o png." - -#: wagtail_hooks.py:23 templates/wagtailimages/images/index.html:5 +#: wagtail_hooks.py:64 templates/wagtailimages/images/index.html:5 #: templates/wagtailimages/images/index.html:18 msgid "Images" msgstr "Imágenes" @@ -85,14 +102,8 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "" -"\n" -" Hay una coincidencia\n" -" " -msgstr[1] "" -"\n" -" Hay %(counter)s coincidencias\n" -" " +msgstr[0] "\n Hay una coincidencia\n " +msgstr[1] "\n Hay %(counter)s coincidencias\n " #: templates/wagtailimages/chooser/results.html:13 #: templates/wagtailimages/images/results.html:13 @@ -148,6 +159,7 @@ msgid "Yes, delete" msgstr "Sí, eliminar" #: templates/wagtailimages/images/edit.html:4 +#: templates/wagtailimages/images/url_generator.html:4 #, python-format msgid "Editing image %(title)s" msgstr "Editando imagen %(title)s" @@ -159,39 +171,126 @@ msgstr "Editando" #: templates/wagtailimages/images/results.html:31 #, python-format msgid "Sorry, no images match \"<em>%(query_string)s</em>\"" -msgstr "" -"Lo sentimos, no hay coincidencias en las imágenes \"<em>%(query_string)s</em>" -"\"" +msgstr "Lo sentimos, no hay coincidencias en las imágenes \"<em>%(query_string)s</em>\"" #: templates/wagtailimages/images/results.html:34 #, python-format msgid "" -"You've not uploaded any images. Why not <a href=" -"\"%(wagtailimages_add_image_url)s\">add one now</a>?" -msgstr "" -"No has subido imágenes. ¿Por qué no <a href=\"%(wagtailimages_add_image_url)s" -"\">añadir una ahora</a>?" +"You've not uploaded any images. Why not <a " +"href=\"%(wagtailimages_add_image_url)s\">add one now</a>?" +msgstr "No has subido imágenes. ¿Por qué no <a href=\"%(wagtailimages_add_image_url)s\">añadir una ahora</a>?" -#: views/images.py:31 views/images.py:42 +#: templates/wagtailimages/images/url_generator.html:9 +msgid "Generating URL" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:25 +msgid "URL" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:28 +msgid "Preview" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:34 +msgid "" +"Note that images generated larger than the screen will appear smaller when " +"previewed here, so they fit the screen." +msgstr "" + +#: templates/wagtailimages/images/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtailimages/images/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtailimages/images/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtailimages/images/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtailimages/images/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtailimages/images/usage.html:26 +msgid "Edit this page" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:3 +msgid "Add multiple images" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:13 +msgid "Add images" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:18 +msgid "Drag and drop images into this area to upload immediately." +msgstr "" + +#: templates/wagtailimages/multiple/add.html:22 +msgid "Or choose from your computer" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:47 +msgid "" +"Upload successful. Please update this image with a more appropriate title, " +"if necessary. You may also delete the image completely if the upload wasn't " +"required." +msgstr "" + +#: templates/wagtailimages/multiple/add.html:48 +msgid "Sorry, upload failed." +msgstr "" + +#: templates/wagtailimages/multiple/edit_form.html:10 +msgid "Update" +msgstr "" + +#: templates/wagtailimages/multiple/edit_form.html:11 +msgid "Delete" +msgstr "" + +#: utils/validators.py:17 utils/validators.py:28 +msgid "" +"Not a valid image. Please use a gif, jpeg or png file with the correct file " +"extension (*.gif, *.jpg or *.png)." +msgstr "" + +#: utils/validators.py:35 +#, python-format +msgid "" +"Not a valid %s image. Please use a gif, jpeg or png file with the correct " +"file extension (*.gif, *.jpg or *.png)." +msgstr "" + +#: views/images.py:37 views/images.py:47 msgid "Search images" msgstr "Buscar imágenes" -#: views/images.py:94 +#: views/images.py:99 msgid "Image '{0}' updated." msgstr "Imagen '{0}' actualizada." -#: views/images.py:97 +#: views/images.py:102 msgid "The image could not be saved due to errors." msgstr "La imagen no puedo ser guardada debido a errores" -#: views/images.py:116 +#: views/images.py:188 msgid "Image '{0}' deleted." msgstr "Imagen '{0}' eliminada." -#: views/images.py:134 +#: views/images.py:206 msgid "Image '{0}' added." msgstr "Imagen '{0}' añadida." -#: views/images.py:137 +#: views/images.py:209 msgid "The image could not be created due to errors." msgstr "La imagen no pudo ser creada debido a errores." diff --git a/wagtail/wagtailimages/locale/eu/LC_MESSAGES/django.mo b/wagtail/wagtailimages/locale/eu/LC_MESSAGES/django.mo index f5afff9e4..b3e5368fc 100644 Binary files a/wagtail/wagtailimages/locale/eu/LC_MESSAGES/django.mo and b/wagtail/wagtailimages/locale/eu/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailimages/locale/eu/LC_MESSAGES/django.po b/wagtail/wagtailimages/locale/eu/LC_MESSAGES/django.po index 6a2bb4615..c07a35c6d 100644 --- a/wagtail/wagtailimages/locale/eu/LC_MESSAGES/django.po +++ b/wagtail/wagtailimages/locale/eu/LC_MESSAGES/django.po @@ -1,49 +1,71 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:53+0000\n" -"PO-Revision-Date: 2014-03-14 21:12+0000\n" -"Last-Translator: serafeim <serafeim@torchbox.com>\n" -"Language-Team: Basque (http://www.transifex.com/projects/p/wagtail/language/" -"eu/)\n" -"Language: eu\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Basque (http://www.transifex.com/projects/p/wagtail/language/eu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: eu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: models.py:29 +#: forms.py:37 +msgid "Filter" +msgstr "" + +#: forms.py:39 +msgid "Original size" +msgstr "" + +#: forms.py:40 +msgid "Resize to width" +msgstr "" + +#: forms.py:41 +msgid "Resize to height" +msgstr "" + +#: forms.py:42 +msgid "Resize to min" +msgstr "" + +#: forms.py:43 +msgid "Resize to max" +msgstr "" + +#: forms.py:44 +msgid "Resize to fill" +msgstr "" + +#: forms.py:47 +msgid "Width" +msgstr "" + +#: forms.py:48 +msgid "Height" +msgstr "" + +#: models.py:34 templates/wagtailimages/images/usage.html:16 msgid "Title" msgstr "" -#: models.py:44 +#: models.py:49 msgid "File" msgstr "" -#: models.py:50 +#: models.py:55 msgid "Tags" msgstr "" -#: utils.py:17 -msgid "" -"Not a valid image. Please use a gif, jpeg or png file with the correct file " -"extension." -msgstr "" - -#: utils.py:28 -#, python-format -msgid "" -"Not a valid %s image. Please use a gif, jpeg or png file with the correct " -"file extension." -msgstr "" - -#: wagtail_hooks.py:23 templates/wagtailimages/images/index.html:5 +#: wagtail_hooks.py:64 templates/wagtailimages/images/index.html:5 #: templates/wagtailimages/images/index.html:18 msgid "Images" msgstr "" @@ -135,6 +157,7 @@ msgid "Yes, delete" msgstr "" #: templates/wagtailimages/images/edit.html:4 +#: templates/wagtailimages/images/url_generator.html:4 #, python-format msgid "Editing image %(title)s" msgstr "" @@ -151,30 +174,121 @@ msgstr "" #: templates/wagtailimages/images/results.html:34 #, python-format msgid "" -"You've not uploaded any images. Why not <a href=" -"\"%(wagtailimages_add_image_url)s\">add one now</a>?" +"You've not uploaded any images. Why not <a " +"href=\"%(wagtailimages_add_image_url)s\">add one now</a>?" msgstr "" -#: views/images.py:31 views/images.py:42 +#: templates/wagtailimages/images/url_generator.html:9 +msgid "Generating URL" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:25 +msgid "URL" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:28 +msgid "Preview" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:34 +msgid "" +"Note that images generated larger than the screen will appear smaller when " +"previewed here, so they fit the screen." +msgstr "" + +#: templates/wagtailimages/images/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtailimages/images/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtailimages/images/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtailimages/images/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtailimages/images/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtailimages/images/usage.html:26 +msgid "Edit this page" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:3 +msgid "Add multiple images" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:13 +msgid "Add images" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:18 +msgid "Drag and drop images into this area to upload immediately." +msgstr "" + +#: templates/wagtailimages/multiple/add.html:22 +msgid "Or choose from your computer" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:47 +msgid "" +"Upload successful. Please update this image with a more appropriate title, " +"if necessary. You may also delete the image completely if the upload wasn't " +"required." +msgstr "" + +#: templates/wagtailimages/multiple/add.html:48 +msgid "Sorry, upload failed." +msgstr "" + +#: templates/wagtailimages/multiple/edit_form.html:10 +msgid "Update" +msgstr "" + +#: templates/wagtailimages/multiple/edit_form.html:11 +msgid "Delete" +msgstr "" + +#: utils/validators.py:17 utils/validators.py:28 +msgid "" +"Not a valid image. Please use a gif, jpeg or png file with the correct file " +"extension (*.gif, *.jpg or *.png)." +msgstr "" + +#: utils/validators.py:35 +#, python-format +msgid "" +"Not a valid %s image. Please use a gif, jpeg or png file with the correct " +"file extension (*.gif, *.jpg or *.png)." +msgstr "" + +#: views/images.py:37 views/images.py:47 msgid "Search images" msgstr "" -#: views/images.py:94 +#: views/images.py:99 msgid "Image '{0}' updated." msgstr "" -#: views/images.py:97 +#: views/images.py:102 msgid "The image could not be saved due to errors." msgstr "" -#: views/images.py:116 +#: views/images.py:188 msgid "Image '{0}' deleted." msgstr "" -#: views/images.py:134 +#: views/images.py:206 msgid "Image '{0}' added." msgstr "" -#: views/images.py:137 +#: views/images.py:209 msgid "The image could not be created due to errors." msgstr "" diff --git a/wagtail/wagtailimages/locale/fr/LC_MESSAGES/django.mo b/wagtail/wagtailimages/locale/fr/LC_MESSAGES/django.mo index ffe2d5ee6..7655a52f3 100644 Binary files a/wagtail/wagtailimages/locale/fr/LC_MESSAGES/django.mo and b/wagtail/wagtailimages/locale/fr/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailimages/locale/fr/LC_MESSAGES/django.po b/wagtail/wagtailimages/locale/fr/LC_MESSAGES/django.po index 824522083..fe6d971b6 100644 --- a/wagtail/wagtailimages/locale/fr/LC_MESSAGES/django.po +++ b/wagtail/wagtailimages/locale/fr/LC_MESSAGES/django.po @@ -1,53 +1,72 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # nahuel, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:53+0000\n" -"PO-Revision-Date: 2014-03-18 23:15+0000\n" -"Last-Translator: nahuel\n" -"Language-Team: French (http://www.transifex.com/projects/p/wagtail/language/" -"fr/)\n" -"Language: fr\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: French (http://www.transifex.com/projects/p/wagtail/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: models.py:29 +#: forms.py:37 +msgid "Filter" +msgstr "" + +#: forms.py:39 +msgid "Original size" +msgstr "" + +#: forms.py:40 +msgid "Resize to width" +msgstr "" + +#: forms.py:41 +msgid "Resize to height" +msgstr "" + +#: forms.py:42 +msgid "Resize to min" +msgstr "" + +#: forms.py:43 +msgid "Resize to max" +msgstr "" + +#: forms.py:44 +msgid "Resize to fill" +msgstr "" + +#: forms.py:47 +msgid "Width" +msgstr "" + +#: forms.py:48 +msgid "Height" +msgstr "" + +#: models.py:34 templates/wagtailimages/images/usage.html:16 msgid "Title" msgstr "Titre" -#: models.py:44 +#: models.py:49 msgid "File" msgstr "Fichier" -#: models.py:50 +#: models.py:55 msgid "Tags" msgstr "Mots-clés" -#: utils.py:17 -#, fuzzy -msgid "" -"Not a valid image. Please use a gif, jpeg or png file with the correct file " -"extension." -msgstr "" -"Format d'image invalide. Utilisez à la place un fichier gif, jpeg ou png." - -#: utils.py:28 -#, fuzzy, python-format -msgid "" -"Not a valid %s image. Please use a gif, jpeg or png file with the correct " -"file extension." -msgstr "" -"Format d'image invalide. Utilisez à la place un fichier gif, jpeg ou png." - -#: wagtail_hooks.py:23 templates/wagtailimages/images/index.html:5 +#: wagtail_hooks.py:64 templates/wagtailimages/images/index.html:5 #: templates/wagtailimages/images/index.html:18 msgid "Images" msgstr "Images" @@ -82,14 +101,8 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "" -"\n" -" Il y a une correspondance\n" -" " -msgstr[1] "" -"\n" -" Il y a %(counter)s correspondances\n" -" " +msgstr[0] "\n Il y a une correspondance\n " +msgstr[1] "\n Il y a %(counter)s correspondances\n " #: templates/wagtailimages/chooser/results.html:13 #: templates/wagtailimages/images/results.html:13 @@ -145,6 +158,7 @@ msgid "Yes, delete" msgstr "Oui, supprimer" #: templates/wagtailimages/images/edit.html:4 +#: templates/wagtailimages/images/url_generator.html:4 #, python-format msgid "Editing image %(title)s" msgstr "Édition de l'image %(title)s" @@ -161,30 +175,121 @@ msgstr "Désolé, aucune image ne correspond à \"<em>%(query_string)s</em>\"" #: templates/wagtailimages/images/results.html:34 #, python-format msgid "" -"You've not uploaded any images. Why not <a href=" -"\"%(wagtailimages_add_image_url)s\">add one now</a>?" +"You've not uploaded any images. Why not <a " +"href=\"%(wagtailimages_add_image_url)s\">add one now</a>?" msgstr "" -#: views/images.py:31 views/images.py:42 +#: templates/wagtailimages/images/url_generator.html:9 +msgid "Generating URL" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:25 +msgid "URL" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:28 +msgid "Preview" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:34 +msgid "" +"Note that images generated larger than the screen will appear smaller when " +"previewed here, so they fit the screen." +msgstr "" + +#: templates/wagtailimages/images/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtailimages/images/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtailimages/images/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtailimages/images/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtailimages/images/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtailimages/images/usage.html:26 +msgid "Edit this page" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:3 +msgid "Add multiple images" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:13 +msgid "Add images" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:18 +msgid "Drag and drop images into this area to upload immediately." +msgstr "" + +#: templates/wagtailimages/multiple/add.html:22 +msgid "Or choose from your computer" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:47 +msgid "" +"Upload successful. Please update this image with a more appropriate title, " +"if necessary. You may also delete the image completely if the upload wasn't " +"required." +msgstr "" + +#: templates/wagtailimages/multiple/add.html:48 +msgid "Sorry, upload failed." +msgstr "" + +#: templates/wagtailimages/multiple/edit_form.html:10 +msgid "Update" +msgstr "" + +#: templates/wagtailimages/multiple/edit_form.html:11 +msgid "Delete" +msgstr "" + +#: utils/validators.py:17 utils/validators.py:28 +msgid "" +"Not a valid image. Please use a gif, jpeg or png file with the correct file " +"extension (*.gif, *.jpg or *.png)." +msgstr "" + +#: utils/validators.py:35 +#, python-format +msgid "" +"Not a valid %s image. Please use a gif, jpeg or png file with the correct " +"file extension (*.gif, *.jpg or *.png)." +msgstr "" + +#: views/images.py:37 views/images.py:47 msgid "Search images" msgstr "" -#: views/images.py:94 +#: views/images.py:99 msgid "Image '{0}' updated." msgstr "Image '{0}' mise à jour." -#: views/images.py:97 +#: views/images.py:102 msgid "The image could not be saved due to errors." msgstr "" -#: views/images.py:116 +#: views/images.py:188 msgid "Image '{0}' deleted." msgstr "Image '{0}' supprimée." -#: views/images.py:134 +#: views/images.py:206 msgid "Image '{0}' added." msgstr "Image '{0}' ajoutée." -#: views/images.py:137 +#: views/images.py:209 msgid "The image could not be created due to errors." msgstr "" diff --git a/wagtail/wagtailimages/locale/gl/LC_MESSAGES/django.mo b/wagtail/wagtailimages/locale/gl/LC_MESSAGES/django.mo index 674a09a72..69f7ddd9d 100644 Binary files a/wagtail/wagtailimages/locale/gl/LC_MESSAGES/django.mo and b/wagtail/wagtailimages/locale/gl/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailimages/locale/gl/LC_MESSAGES/django.po b/wagtail/wagtailimages/locale/gl/LC_MESSAGES/django.po index ed219144d..1208c799e 100644 --- a/wagtail/wagtailimages/locale/gl/LC_MESSAGES/django.po +++ b/wagtail/wagtailimages/locale/gl/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # fooflare <amos.oviedo@gmail.com>, 2014 # fooflare <amos.oviedo@gmail.com>, 2014 @@ -9,48 +9,65 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:53+0000\n" -"PO-Revision-Date: 2014-03-23 10:32+0000\n" -"Last-Translator: fooflare <amos.oviedo@gmail.com>\n" -"Language-Team: Galician (http://www.transifex.com/projects/p/wagtail/" -"language/gl/)\n" -"Language: gl\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Galician (http://www.transifex.com/projects/p/wagtail/language/gl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: gl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: models.py:29 +#: forms.py:37 +msgid "Filter" +msgstr "" + +#: forms.py:39 +msgid "Original size" +msgstr "" + +#: forms.py:40 +msgid "Resize to width" +msgstr "" + +#: forms.py:41 +msgid "Resize to height" +msgstr "" + +#: forms.py:42 +msgid "Resize to min" +msgstr "" + +#: forms.py:43 +msgid "Resize to max" +msgstr "" + +#: forms.py:44 +msgid "Resize to fill" +msgstr "" + +#: forms.py:47 +msgid "Width" +msgstr "" + +#: forms.py:48 +msgid "Height" +msgstr "" + +#: models.py:34 templates/wagtailimages/images/usage.html:16 msgid "Title" msgstr "Título" -#: models.py:44 +#: models.py:49 msgid "File" msgstr "Arquivo" -#: models.py:50 +#: models.py:55 msgid "Tags" msgstr "Etiquetas" -#: utils.py:17 -#, fuzzy -msgid "" -"Not a valid image. Please use a gif, jpeg or png file with the correct file " -"extension." -msgstr "" -"Non é un formato válido de imaxe. Por favor, usa no seu lugar un arquivo " -"gif, jpeg o png." - -#: utils.py:28 -#, fuzzy, python-format -msgid "" -"Not a valid %s image. Please use a gif, jpeg or png file with the correct " -"file extension." -msgstr "" -"Non é un formato válido de imaxe. Por favor, usa no seu lugar un arquivo " -"gif, jpeg o png." - -#: wagtail_hooks.py:23 templates/wagtailimages/images/index.html:5 +#: wagtail_hooks.py:64 templates/wagtailimages/images/index.html:5 #: templates/wagtailimages/images/index.html:18 msgid "Images" msgstr "Imaxes" @@ -85,14 +102,8 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "" -"\n" -" Hai unha coincidencia\n" -" " -msgstr[1] "" -"\n" -" Hai %(counter)s coincidencias\n" -" " +msgstr[0] "\n Hai unha coincidencia\n " +msgstr[1] "\n Hai %(counter)s coincidencias\n " #: templates/wagtailimages/chooser/results.html:13 #: templates/wagtailimages/images/results.html:13 @@ -148,6 +159,7 @@ msgid "Yes, delete" msgstr "Sí, eliminar" #: templates/wagtailimages/images/edit.html:4 +#: templates/wagtailimages/images/url_generator.html:4 #, python-format msgid "Editing image %(title)s" msgstr "Editando imaxe %(title)s" @@ -164,32 +176,121 @@ msgstr "Sentímolo, ningunha imaxe contén \"<em>%(query_string)s</em>\"" #: templates/wagtailimages/images/results.html:34 #, python-format msgid "" -"You've not uploaded any images. Why not <a href=" -"\"%(wagtailimages_add_image_url)s\">add one now</a>?" -msgstr "" -"No subiches imaxes. ¿Por qué non <a href=\"%(wagtailimages_add_image_url)s" -"\">engadir unha agora</a>?" +"You've not uploaded any images. Why not <a " +"href=\"%(wagtailimages_add_image_url)s\">add one now</a>?" +msgstr "No subiches imaxes. ¿Por qué non <a href=\"%(wagtailimages_add_image_url)s\">engadir unha agora</a>?" -#: views/images.py:31 views/images.py:42 +#: templates/wagtailimages/images/url_generator.html:9 +msgid "Generating URL" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:25 +msgid "URL" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:28 +msgid "Preview" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:34 +msgid "" +"Note that images generated larger than the screen will appear smaller when " +"previewed here, so they fit the screen." +msgstr "" + +#: templates/wagtailimages/images/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtailimages/images/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtailimages/images/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtailimages/images/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtailimages/images/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtailimages/images/usage.html:26 +msgid "Edit this page" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:3 +msgid "Add multiple images" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:13 +msgid "Add images" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:18 +msgid "Drag and drop images into this area to upload immediately." +msgstr "" + +#: templates/wagtailimages/multiple/add.html:22 +msgid "Or choose from your computer" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:47 +msgid "" +"Upload successful. Please update this image with a more appropriate title, " +"if necessary. You may also delete the image completely if the upload wasn't " +"required." +msgstr "" + +#: templates/wagtailimages/multiple/add.html:48 +msgid "Sorry, upload failed." +msgstr "" + +#: templates/wagtailimages/multiple/edit_form.html:10 +msgid "Update" +msgstr "" + +#: templates/wagtailimages/multiple/edit_form.html:11 +msgid "Delete" +msgstr "" + +#: utils/validators.py:17 utils/validators.py:28 +msgid "" +"Not a valid image. Please use a gif, jpeg or png file with the correct file " +"extension (*.gif, *.jpg or *.png)." +msgstr "" + +#: utils/validators.py:35 +#, python-format +msgid "" +"Not a valid %s image. Please use a gif, jpeg or png file with the correct " +"file extension (*.gif, *.jpg or *.png)." +msgstr "" + +#: views/images.py:37 views/images.py:47 msgid "Search images" msgstr "Buscar imaxes" -#: views/images.py:94 +#: views/images.py:99 msgid "Image '{0}' updated." msgstr "Imaxe '{0}' actualizada." -#: views/images.py:97 +#: views/images.py:102 msgid "The image could not be saved due to errors." msgstr "A imaxe non puido ser gardada debido a erros" -#: views/images.py:116 +#: views/images.py:188 msgid "Image '{0}' deleted." msgstr "Imaxe '{0}' eliminada." -#: views/images.py:134 +#: views/images.py:206 msgid "Image '{0}' added." msgstr "Imaxe '{0}' engadida." -#: views/images.py:137 +#: views/images.py:209 msgid "The image could not be created due to errors." msgstr "A imaxe non puido ser creada debido a erros." diff --git a/wagtail/wagtailimages/locale/mn/LC_MESSAGES/django.mo b/wagtail/wagtailimages/locale/mn/LC_MESSAGES/django.mo index 85f5890bd..04e2a47d0 100644 Binary files a/wagtail/wagtailimages/locale/mn/LC_MESSAGES/django.mo and b/wagtail/wagtailimages/locale/mn/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailimages/locale/mn/LC_MESSAGES/django.po b/wagtail/wagtailimages/locale/mn/LC_MESSAGES/django.po index b6c48082f..f641c1c3e 100644 --- a/wagtail/wagtailimages/locale/mn/LC_MESSAGES/django.po +++ b/wagtail/wagtailimages/locale/mn/LC_MESSAGES/django.po @@ -1,51 +1,72 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: -# delgermurun <info@delgermurun.com>, 2014 +# Delgermurun Purevkhuuu <info@delgermurun.com>, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:53+0000\n" -"PO-Revision-Date: 2014-03-14 21:12+0000\n" -"Last-Translator: serafeim <serafeim@torchbox.com>\n" -"Language-Team: Mongolian (http://www.transifex.com/projects/p/wagtail/" -"language/mn/)\n" -"Language: mn\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Mongolian (http://www.transifex.com/projects/p/wagtail/language/mn/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: mn\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: models.py:29 +#: forms.py:37 +msgid "Filter" +msgstr "" + +#: forms.py:39 +msgid "Original size" +msgstr "" + +#: forms.py:40 +msgid "Resize to width" +msgstr "" + +#: forms.py:41 +msgid "Resize to height" +msgstr "" + +#: forms.py:42 +msgid "Resize to min" +msgstr "" + +#: forms.py:43 +msgid "Resize to max" +msgstr "" + +#: forms.py:44 +msgid "Resize to fill" +msgstr "" + +#: forms.py:47 +msgid "Width" +msgstr "" + +#: forms.py:48 +msgid "Height" +msgstr "" + +#: models.py:34 templates/wagtailimages/images/usage.html:16 msgid "Title" msgstr "Гарчиг" -#: models.py:44 +#: models.py:49 msgid "File" msgstr "Файл" -#: models.py:50 +#: models.py:55 msgid "Tags" msgstr "Шошго" -#: utils.py:17 -#, fuzzy -msgid "" -"Not a valid image. Please use a gif, jpeg or png file with the correct file " -"extension." -msgstr "Буруу форматтай зураг байна. gif, jpeg, png форматыг зөвшөөрнө." - -#: utils.py:28 -#, fuzzy, python-format -msgid "" -"Not a valid %s image. Please use a gif, jpeg or png file with the correct " -"file extension." -msgstr "Буруу форматтай зураг байна. gif, jpeg, png форматыг зөвшөөрнө." - -#: wagtail_hooks.py:23 templates/wagtailimages/images/index.html:5 +#: wagtail_hooks.py:64 templates/wagtailimages/images/index.html:5 #: templates/wagtailimages/images/index.html:18 msgid "Images" msgstr "Зургууд" @@ -80,12 +101,8 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "" -"\n" -"1 зураг олдлоо" -msgstr[1] "" -"\n" -"%(counter)s зураг олдлоо" +msgstr[0] "\n1 зураг олдлоо" +msgstr[1] "\n%(counter)s зураг олдлоо" #: templates/wagtailimages/chooser/results.html:13 #: templates/wagtailimages/images/results.html:13 @@ -141,6 +158,7 @@ msgid "Yes, delete" msgstr "Тийм, устга" #: templates/wagtailimages/images/edit.html:4 +#: templates/wagtailimages/images/url_generator.html:4 #, python-format msgid "Editing image %(title)s" msgstr "%(title)s зургийг засч байна" @@ -157,32 +175,121 @@ msgstr "" #: templates/wagtailimages/images/results.html:34 #, python-format msgid "" -"You've not uploaded any images. Why not <a href=" -"\"%(wagtailimages_add_image_url)s\">add one now</a>?" -msgstr "" -"Та зураг оруулаагүй байна. Яагаад <a href=\\\"%(wagtailimages_add_image_url)s" -"\\\">одоо нэгийг оруулж болохгүй гэж</a>?" +"You've not uploaded any images. Why not <a " +"href=\"%(wagtailimages_add_image_url)s\">add one now</a>?" +msgstr "Та зураг оруулаагүй байна. Яагаад <a href=\\\"%(wagtailimages_add_image_url)s\\\">одоо нэгийг оруулж болохгүй гэж</a>?" -#: views/images.py:31 views/images.py:42 +#: templates/wagtailimages/images/url_generator.html:9 +msgid "Generating URL" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:25 +msgid "URL" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:28 +msgid "Preview" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:34 +msgid "" +"Note that images generated larger than the screen will appear smaller when " +"previewed here, so they fit the screen." +msgstr "" + +#: templates/wagtailimages/images/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtailimages/images/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtailimages/images/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtailimages/images/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtailimages/images/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtailimages/images/usage.html:26 +msgid "Edit this page" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:3 +msgid "Add multiple images" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:13 +msgid "Add images" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:18 +msgid "Drag and drop images into this area to upload immediately." +msgstr "" + +#: templates/wagtailimages/multiple/add.html:22 +msgid "Or choose from your computer" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:47 +msgid "" +"Upload successful. Please update this image with a more appropriate title, " +"if necessary. You may also delete the image completely if the upload wasn't " +"required." +msgstr "" + +#: templates/wagtailimages/multiple/add.html:48 +msgid "Sorry, upload failed." +msgstr "" + +#: templates/wagtailimages/multiple/edit_form.html:10 +msgid "Update" +msgstr "" + +#: templates/wagtailimages/multiple/edit_form.html:11 +msgid "Delete" +msgstr "" + +#: utils/validators.py:17 utils/validators.py:28 +msgid "" +"Not a valid image. Please use a gif, jpeg or png file with the correct file " +"extension (*.gif, *.jpg or *.png)." +msgstr "" + +#: utils/validators.py:35 +#, python-format +msgid "" +"Not a valid %s image. Please use a gif, jpeg or png file with the correct " +"file extension (*.gif, *.jpg or *.png)." +msgstr "" + +#: views/images.py:37 views/images.py:47 msgid "Search images" msgstr "Зураг хайх" -#: views/images.py:94 +#: views/images.py:99 msgid "Image '{0}' updated." msgstr "'{0}' зураг засагдлаа." -#: views/images.py:97 +#: views/images.py:102 msgid "The image could not be saved due to errors." msgstr "Зураг энэ алдаануудаас шалтгаалан хадгалагдсангүй." -#: views/images.py:116 +#: views/images.py:188 msgid "Image '{0}' deleted." msgstr "'{0}' зураг устлаа." -#: views/images.py:134 +#: views/images.py:206 msgid "Image '{0}' added." msgstr "'{0}' зураг нэмэгдлээ." -#: views/images.py:137 +#: views/images.py:209 msgid "The image could not be created due to errors." msgstr "Зураг энэ алдаануудаас шалтгаалан хадгалагдсангүй." diff --git a/wagtail/wagtailimages/locale/pl/LC_MESSAGES/django.mo b/wagtail/wagtailimages/locale/pl/LC_MESSAGES/django.mo index d11ef1bec..c586dfedc 100644 Binary files a/wagtail/wagtailimages/locale/pl/LC_MESSAGES/django.mo and b/wagtail/wagtailimages/locale/pl/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailimages/locale/pl/LC_MESSAGES/django.po b/wagtail/wagtailimages/locale/pl/LC_MESSAGES/django.po index d0925b373..5cdbdd5c8 100644 --- a/wagtail/wagtailimages/locale/pl/LC_MESSAGES/django.po +++ b/wagtail/wagtailimages/locale/pl/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # utek <mail@utek.pl>, 2014 # utek <mail@utek.pl>, 2014 @@ -9,49 +9,65 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:53+0000\n" -"PO-Revision-Date: 2014-03-14 22:16+0000\n" -"Last-Translator: utek <mail@utek.pl>\n" -"Language-Team: Polish (http://www.transifex.com/projects/p/wagtail/language/" -"pl/)\n" -"Language: pl\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Polish (http://www.transifex.com/projects/p/wagtail/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2);\n" +"Language: pl\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: models.py:29 +#: forms.py:37 +msgid "Filter" +msgstr "" + +#: forms.py:39 +msgid "Original size" +msgstr "" + +#: forms.py:40 +msgid "Resize to width" +msgstr "" + +#: forms.py:41 +msgid "Resize to height" +msgstr "" + +#: forms.py:42 +msgid "Resize to min" +msgstr "" + +#: forms.py:43 +msgid "Resize to max" +msgstr "" + +#: forms.py:44 +msgid "Resize to fill" +msgstr "" + +#: forms.py:47 +msgid "Width" +msgstr "" + +#: forms.py:48 +msgid "Height" +msgstr "" + +#: models.py:34 templates/wagtailimages/images/usage.html:16 msgid "Title" msgstr "Tytuł" -#: models.py:44 +#: models.py:49 msgid "File" msgstr "Plik" -#: models.py:50 +#: models.py:55 msgid "Tags" msgstr "Tagi" -#: utils.py:17 -#, fuzzy -msgid "" -"Not a valid image. Please use a gif, jpeg or png file with the correct file " -"extension." -msgstr "" -"Niepoprawny format obrazu. Użyj proszę jednego z następujących formatów: " -"gif, jpeg lub png." - -#: utils.py:28 -#, fuzzy, python-format -msgid "" -"Not a valid %s image. Please use a gif, jpeg or png file with the correct " -"file extension." -msgstr "" -"Niepoprawny format obrazu. Użyj proszę jednego z następujących formatów: " -"gif, jpeg lub png." - -#: wagtail_hooks.py:23 templates/wagtailimages/images/index.html:5 +#: wagtail_hooks.py:64 templates/wagtailimages/images/index.html:5 #: templates/wagtailimages/images/index.html:18 msgid "Images" msgstr "Obrazy" @@ -86,18 +102,9 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "" -"\n" -" Jedno dopasowanie\n" -" " -msgstr[1] "" -"\n" -" Znaleziono %(counter)s dopasowania\n" -" " -msgstr[2] "" -"\n" -" Znaleziono %(counter)s dopasowań\n" -" " +msgstr[0] "\n Jedno dopasowanie\n " +msgstr[1] "\n Znaleziono %(counter)s dopasowania\n " +msgstr[2] "\n Znaleziono %(counter)s dopasowań\n " #: templates/wagtailimages/chooser/results.html:13 #: templates/wagtailimages/images/results.html:13 @@ -153,6 +160,7 @@ msgid "Yes, delete" msgstr "Tak, usuń" #: templates/wagtailimages/images/edit.html:4 +#: templates/wagtailimages/images/url_generator.html:4 #, python-format msgid "Editing image %(title)s" msgstr "Edycja obrazu %(title)s" @@ -169,32 +177,121 @@ msgstr "Przepraszamy, żaden obraz nie pasuje do \"<em>%(query_string)s</em>\"" #: templates/wagtailimages/images/results.html:34 #, python-format msgid "" -"You've not uploaded any images. Why not <a href=" -"\"%(wagtailimages_add_image_url)s\">add one now</a>?" -msgstr "" -"Nie przesłano żadnych obrazów. Czemu nie <a href=" -"\"%(wagtailimages_add_image_url)s\">dodać jednego teraz</a>?" +"You've not uploaded any images. Why not <a " +"href=\"%(wagtailimages_add_image_url)s\">add one now</a>?" +msgstr "Nie przesłano żadnych obrazów. Czemu nie <a href=\"%(wagtailimages_add_image_url)s\">dodać jednego teraz</a>?" -#: views/images.py:31 views/images.py:42 +#: templates/wagtailimages/images/url_generator.html:9 +msgid "Generating URL" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:25 +msgid "URL" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:28 +msgid "Preview" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:34 +msgid "" +"Note that images generated larger than the screen will appear smaller when " +"previewed here, so they fit the screen." +msgstr "" + +#: templates/wagtailimages/images/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtailimages/images/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtailimages/images/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtailimages/images/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtailimages/images/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtailimages/images/usage.html:26 +msgid "Edit this page" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:3 +msgid "Add multiple images" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:13 +msgid "Add images" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:18 +msgid "Drag and drop images into this area to upload immediately." +msgstr "" + +#: templates/wagtailimages/multiple/add.html:22 +msgid "Or choose from your computer" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:47 +msgid "" +"Upload successful. Please update this image with a more appropriate title, " +"if necessary. You may also delete the image completely if the upload wasn't " +"required." +msgstr "" + +#: templates/wagtailimages/multiple/add.html:48 +msgid "Sorry, upload failed." +msgstr "" + +#: templates/wagtailimages/multiple/edit_form.html:10 +msgid "Update" +msgstr "" + +#: templates/wagtailimages/multiple/edit_form.html:11 +msgid "Delete" +msgstr "" + +#: utils/validators.py:17 utils/validators.py:28 +msgid "" +"Not a valid image. Please use a gif, jpeg or png file with the correct file " +"extension (*.gif, *.jpg or *.png)." +msgstr "" + +#: utils/validators.py:35 +#, python-format +msgid "" +"Not a valid %s image. Please use a gif, jpeg or png file with the correct " +"file extension (*.gif, *.jpg or *.png)." +msgstr "" + +#: views/images.py:37 views/images.py:47 msgid "Search images" msgstr "Szukaj obrazów" -#: views/images.py:94 +#: views/images.py:99 msgid "Image '{0}' updated." msgstr "Uaktualniono obraz '{0}'." -#: views/images.py:97 +#: views/images.py:102 msgid "The image could not be saved due to errors." msgstr "Obraz nie mógł zostać zapisany z powodu błędów." -#: views/images.py:116 +#: views/images.py:188 msgid "Image '{0}' deleted." msgstr "Usunięto obraz '{0}'." -#: views/images.py:134 +#: views/images.py:206 msgid "Image '{0}' added." msgstr "Dodano obraz '{0}'." -#: views/images.py:137 +#: views/images.py:209 msgid "The image could not be created due to errors." msgstr "Obraz nie mógł zostać stworzony z powodu błędów." diff --git a/wagtail/wagtailimages/locale/ro/LC_MESSAGES/django.mo b/wagtail/wagtailimages/locale/ro/LC_MESSAGES/django.mo index 8f17cf88a..da519e31a 100644 Binary files a/wagtail/wagtailimages/locale/ro/LC_MESSAGES/django.mo and b/wagtail/wagtailimages/locale/ro/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailimages/locale/ro/LC_MESSAGES/django.po b/wagtail/wagtailimages/locale/ro/LC_MESSAGES/django.po index f3554ce8e..ac03909ae 100644 --- a/wagtail/wagtailimages/locale/ro/LC_MESSAGES/django.po +++ b/wagtail/wagtailimages/locale/ro/LC_MESSAGES/django.po @@ -1,52 +1,72 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: -# zerolab, 2014 +# Dan Braghis, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:53+0000\n" -"PO-Revision-Date: 2014-03-18 13:20+0000\n" -"Last-Translator: zerolab\n" -"Language-Team: Romanian (http://www.transifex.com/projects/p/wagtail/" -"language/ro/)\n" -"Language: ro\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Romanian (http://www.transifex.com/projects/p/wagtail/language/ro/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?" -"2:1));\n" +"Language: ro\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" -#: models.py:29 +#: forms.py:37 +msgid "Filter" +msgstr "" + +#: forms.py:39 +msgid "Original size" +msgstr "" + +#: forms.py:40 +msgid "Resize to width" +msgstr "" + +#: forms.py:41 +msgid "Resize to height" +msgstr "" + +#: forms.py:42 +msgid "Resize to min" +msgstr "" + +#: forms.py:43 +msgid "Resize to max" +msgstr "" + +#: forms.py:44 +msgid "Resize to fill" +msgstr "" + +#: forms.py:47 +msgid "Width" +msgstr "" + +#: forms.py:48 +msgid "Height" +msgstr "" + +#: models.py:34 templates/wagtailimages/images/usage.html:16 msgid "Title" msgstr "Titlu" -#: models.py:44 +#: models.py:49 msgid "File" msgstr "Fișier" -#: models.py:50 +#: models.py:55 msgid "Tags" msgstr "Etichete" -#: utils.py:17 -#, fuzzy -msgid "" -"Not a valid image. Please use a gif, jpeg or png file with the correct file " -"extension." -msgstr "Format nevalid. Încercați un fișier gif, jpeg sau png în schimb." - -#: utils.py:28 -#, fuzzy, python-format -msgid "" -"Not a valid %s image. Please use a gif, jpeg or png file with the correct " -"file extension." -msgstr "Format nevalid. Încercați un fișier gif, jpeg sau png în schimb." - -#: wagtail_hooks.py:23 templates/wagtailimages/images/index.html:5 +#: wagtail_hooks.py:64 templates/wagtailimages/images/index.html:5 #: templates/wagtailimages/images/index.html:18 msgid "Images" msgstr "Imagini" @@ -81,15 +101,9 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "" -"\n" -"Există o potrivire" -msgstr[1] "" -"\n" -"Sunt %(counter)s potriviri" -msgstr[2] "" -"\n" -"Sunt %(counter)s potriviri" +msgstr[0] "\nExistă o potrivire" +msgstr[1] "\nSunt %(counter)s potriviri" +msgstr[2] "\nSunt %(counter)s potriviri" #: templates/wagtailimages/chooser/results.html:13 #: templates/wagtailimages/images/results.html:13 @@ -145,6 +159,7 @@ msgid "Yes, delete" msgstr "Da, șterge" #: templates/wagtailimages/images/edit.html:4 +#: templates/wagtailimages/images/url_generator.html:4 #, python-format msgid "Editing image %(title)s" msgstr "Editare imagine %(title)s" @@ -156,38 +171,126 @@ msgstr "Editare" #: templates/wagtailimages/images/results.html:31 #, python-format msgid "Sorry, no images match \"<em>%(query_string)s</em>\"" -msgstr "" -"Ne pare rău, \"<em>%(query_string)s</em>\" nu se potrivește cu nici o imagine" +msgstr "Ne pare rău, \"<em>%(query_string)s</em>\" nu se potrivește cu nici o imagine" #: templates/wagtailimages/images/results.html:34 #, python-format msgid "" -"You've not uploaded any images. Why not <a href=" -"\"%(wagtailimages_add_image_url)s\">add one now</a>?" -msgstr "" -"Nu ați încărcat nici o imagine. De să nu <a href=" -"\"%(wagtailimages_add_image_url)s\">adăugați una</a>?" +"You've not uploaded any images. Why not <a " +"href=\"%(wagtailimages_add_image_url)s\">add one now</a>?" +msgstr "Nu ați încărcat nici o imagine. De să nu <a href=\"%(wagtailimages_add_image_url)s\">adăugați una</a>?" -#: views/images.py:31 views/images.py:42 +#: templates/wagtailimages/images/url_generator.html:9 +msgid "Generating URL" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:25 +msgid "URL" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:28 +msgid "Preview" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:34 +msgid "" +"Note that images generated larger than the screen will appear smaller when " +"previewed here, so they fit the screen." +msgstr "" + +#: templates/wagtailimages/images/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtailimages/images/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtailimages/images/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtailimages/images/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtailimages/images/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtailimages/images/usage.html:26 +msgid "Edit this page" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:3 +msgid "Add multiple images" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:13 +msgid "Add images" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:18 +msgid "Drag and drop images into this area to upload immediately." +msgstr "" + +#: templates/wagtailimages/multiple/add.html:22 +msgid "Or choose from your computer" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:47 +msgid "" +"Upload successful. Please update this image with a more appropriate title, " +"if necessary. You may also delete the image completely if the upload wasn't " +"required." +msgstr "" + +#: templates/wagtailimages/multiple/add.html:48 +msgid "Sorry, upload failed." +msgstr "" + +#: templates/wagtailimages/multiple/edit_form.html:10 +msgid "Update" +msgstr "" + +#: templates/wagtailimages/multiple/edit_form.html:11 +msgid "Delete" +msgstr "" + +#: utils/validators.py:17 utils/validators.py:28 +msgid "" +"Not a valid image. Please use a gif, jpeg or png file with the correct file " +"extension (*.gif, *.jpg or *.png)." +msgstr "" + +#: utils/validators.py:35 +#, python-format +msgid "" +"Not a valid %s image. Please use a gif, jpeg or png file with the correct " +"file extension (*.gif, *.jpg or *.png)." +msgstr "" + +#: views/images.py:37 views/images.py:47 msgid "Search images" msgstr "Caută imagini" -#: views/images.py:94 +#: views/images.py:99 msgid "Image '{0}' updated." msgstr "Imaginea '{0}' a fost actualizată." -#: views/images.py:97 +#: views/images.py:102 msgid "The image could not be saved due to errors." msgstr "Imaginea nu a fost salvată din cauza erorilor." -#: views/images.py:116 +#: views/images.py:188 msgid "Image '{0}' deleted." msgstr "Imaginea '{0}' a fost ștearsă." -#: views/images.py:134 +#: views/images.py:206 msgid "Image '{0}' added." msgstr "Imaginea '{0}' a fost adăugată." -#: views/images.py:137 +#: views/images.py:209 msgid "The image could not be created due to errors." msgstr "Imaginea nu a fost creată din cauza erorilor." diff --git a/wagtail/wagtailimages/locale/zh/LC_MESSAGES/django.mo b/wagtail/wagtailimages/locale/zh/LC_MESSAGES/django.mo index dcd1d9e79..2910f1010 100644 Binary files a/wagtail/wagtailimages/locale/zh/LC_MESSAGES/django.mo and b/wagtail/wagtailimages/locale/zh/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailimages/locale/zh/LC_MESSAGES/django.po b/wagtail/wagtailimages/locale/zh/LC_MESSAGES/django.po index 8eabb8a5b..564fcb35c 100644 --- a/wagtail/wagtailimages/locale/zh/LC_MESSAGES/django.po +++ b/wagtail/wagtailimages/locale/zh/LC_MESSAGES/django.po @@ -1,50 +1,71 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:53+0000\n" -"PO-Revision-Date: 2014-03-14 21:12+0000\n" -"Last-Translator: serafeim <serafeim@torchbox.com>\n" -"Language-Team: Chinese (http://www.transifex.com/projects/p/wagtail/language/" -"zh/)\n" -"Language: zh\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Chinese (http://www.transifex.com/projects/p/wagtail/language/zh/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: zh\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: models.py:29 +#: forms.py:37 +msgid "Filter" +msgstr "" + +#: forms.py:39 +msgid "Original size" +msgstr "" + +#: forms.py:40 +msgid "Resize to width" +msgstr "" + +#: forms.py:41 +msgid "Resize to height" +msgstr "" + +#: forms.py:42 +msgid "Resize to min" +msgstr "" + +#: forms.py:43 +msgid "Resize to max" +msgstr "" + +#: forms.py:44 +msgid "Resize to fill" +msgstr "" + +#: forms.py:47 +msgid "Width" +msgstr "" + +#: forms.py:48 +msgid "Height" +msgstr "" + +#: models.py:34 templates/wagtailimages/images/usage.html:16 msgid "Title" msgstr "标题" -#: models.py:44 +#: models.py:49 msgid "File" msgstr "文件" -#: models.py:50 +#: models.py:55 msgid "Tags" msgstr "标签" -#: utils.py:17 -#, fuzzy -msgid "" -"Not a valid image. Please use a gif, jpeg or png file with the correct file " -"extension." -msgstr "不是有效的图片格式。请用gif,jpeg或者png格式的图片" - -#: utils.py:28 -#, fuzzy, python-format -msgid "" -"Not a valid %s image. Please use a gif, jpeg or png file with the correct " -"file extension." -msgstr "不是有效的图片格式。请用gif,jpeg或者png格式的图片" - -#: wagtail_hooks.py:23 templates/wagtailimages/images/index.html:5 +#: wagtail_hooks.py:64 templates/wagtailimages/images/index.html:5 #: templates/wagtailimages/images/index.html:18 msgid "Images" msgstr "图片" @@ -135,6 +156,7 @@ msgid "Yes, delete" msgstr "是的,删除" #: templates/wagtailimages/images/edit.html:4 +#: templates/wagtailimages/images/url_generator.html:4 #, python-format msgid "Editing image %(title)s" msgstr "编辑图片 %(title)s" @@ -151,32 +173,121 @@ msgstr "" #: templates/wagtailimages/images/results.html:34 #, python-format msgid "" -"You've not uploaded any images. Why not <a href=" -"\"%(wagtailimages_add_image_url)s\">add one now</a>?" -msgstr "" -"没有任何上传的图片。为什么不 <a href=\"%(wagtailimages_add_image_url)s\">添加" -"一个</a>?" +"You've not uploaded any images. Why not <a " +"href=\"%(wagtailimages_add_image_url)s\">add one now</a>?" +msgstr "没有任何上传的图片。为什么不 <a href=\"%(wagtailimages_add_image_url)s\">添加一个</a>?" -#: views/images.py:31 views/images.py:42 +#: templates/wagtailimages/images/url_generator.html:9 +msgid "Generating URL" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:25 +msgid "URL" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:28 +msgid "Preview" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:34 +msgid "" +"Note that images generated larger than the screen will appear smaller when " +"previewed here, so they fit the screen." +msgstr "" + +#: templates/wagtailimages/images/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtailimages/images/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtailimages/images/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtailimages/images/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtailimages/images/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtailimages/images/usage.html:26 +msgid "Edit this page" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:3 +msgid "Add multiple images" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:13 +msgid "Add images" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:18 +msgid "Drag and drop images into this area to upload immediately." +msgstr "" + +#: templates/wagtailimages/multiple/add.html:22 +msgid "Or choose from your computer" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:47 +msgid "" +"Upload successful. Please update this image with a more appropriate title, " +"if necessary. You may also delete the image completely if the upload wasn't " +"required." +msgstr "" + +#: templates/wagtailimages/multiple/add.html:48 +msgid "Sorry, upload failed." +msgstr "" + +#: templates/wagtailimages/multiple/edit_form.html:10 +msgid "Update" +msgstr "" + +#: templates/wagtailimages/multiple/edit_form.html:11 +msgid "Delete" +msgstr "" + +#: utils/validators.py:17 utils/validators.py:28 +msgid "" +"Not a valid image. Please use a gif, jpeg or png file with the correct file " +"extension (*.gif, *.jpg or *.png)." +msgstr "" + +#: utils/validators.py:35 +#, python-format +msgid "" +"Not a valid %s image. Please use a gif, jpeg or png file with the correct " +"file extension (*.gif, *.jpg or *.png)." +msgstr "" + +#: views/images.py:37 views/images.py:47 msgid "Search images" msgstr "" -#: views/images.py:94 +#: views/images.py:99 msgid "Image '{0}' updated." msgstr "图片 '{0}' 已更新" -#: views/images.py:97 +#: views/images.py:102 msgid "The image could not be saved due to errors." msgstr "图片 因为有错不能被保存" -#: views/images.py:116 +#: views/images.py:188 msgid "Image '{0}' deleted." msgstr "图片 '{0}' 已删除." -#: views/images.py:134 +#: views/images.py:206 msgid "Image '{0}' added." msgstr "图片 '{0}' 已添加." -#: views/images.py:137 +#: views/images.py:209 msgid "The image could not be created due to errors." msgstr "图片因为有错不能被创建" diff --git a/wagtail/wagtailimages/locale/zh_TW/LC_MESSAGES/django.mo b/wagtail/wagtailimages/locale/zh_TW/LC_MESSAGES/django.mo index 284cefcb2..442bea2b6 100644 Binary files a/wagtail/wagtailimages/locale/zh_TW/LC_MESSAGES/django.mo and b/wagtail/wagtailimages/locale/zh_TW/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailimages/locale/zh_TW/LC_MESSAGES/django.po b/wagtail/wagtailimages/locale/zh_TW/LC_MESSAGES/django.po index 3764ea36e..bcde4adb6 100644 --- a/wagtail/wagtailimages/locale/zh_TW/LC_MESSAGES/django.po +++ b/wagtail/wagtailimages/locale/zh_TW/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:53+0000\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" "PO-Revision-Date: 2014-03-14 21:12+0000\n" "Last-Translator: wdv4758h <wdv4758h@gmail.com>\n" "Language-Team: \n" @@ -17,33 +17,55 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: models.py:29 +#: forms.py:37 +msgid "Filter" +msgstr "" + +#: forms.py:39 +msgid "Original size" +msgstr "" + +#: forms.py:40 +msgid "Resize to width" +msgstr "" + +#: forms.py:41 +msgid "Resize to height" +msgstr "" + +#: forms.py:42 +msgid "Resize to min" +msgstr "" + +#: forms.py:43 +msgid "Resize to max" +msgstr "" + +#: forms.py:44 +msgid "Resize to fill" +msgstr "" + +#: forms.py:47 +msgid "Width" +msgstr "" + +#: forms.py:48 +msgid "Height" +msgstr "" + +#: models.py:34 templates/wagtailimages/images/usage.html:16 msgid "Title" msgstr "標題" -#: models.py:44 +#: models.py:49 msgid "File" msgstr "文件" -#: models.py:50 +#: models.py:55 msgid "Tags" msgstr "標籤" -#: utils.py:17 -#, fuzzy -msgid "" -"Not a valid image. Please use a gif, jpeg or png file with the correct file " -"extension." -msgstr "不是有效的圖片格式。請用 gif、jpeg 或者 png 格式的圖片" - -#: utils.py:28 -#, fuzzy, python-format -msgid "" -"Not a valid %s image. Please use a gif, jpeg or png file with the correct " -"file extension." -msgstr "不是有效的圖片格式。請用 gif、jpeg 或者 png 格式的圖片" - -#: wagtail_hooks.py:23 templates/wagtailimages/images/index.html:5 +#: wagtail_hooks.py:64 templates/wagtailimages/images/index.html:5 #: templates/wagtailimages/images/index.html:18 msgid "Images" msgstr "圖片" @@ -139,6 +161,7 @@ msgid "Yes, delete" msgstr "是的,刪除" #: templates/wagtailimages/images/edit.html:4 +#: templates/wagtailimages/images/url_generator.html:4 #, python-format msgid "Editing image %(title)s" msgstr "編輯圖片 %(title)s" @@ -161,26 +184,121 @@ msgstr "" "沒有任何上傳的圖片。為什麼不 <a href=\"%(wagtailimages_add_image_url)s\">新增" "一個呢</a>?" -#: views/images.py:31 views/images.py:42 +#: templates/wagtailimages/images/url_generator.html:9 +msgid "Generating URL" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:25 +msgid "URL" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:28 +msgid "Preview" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:34 +msgid "" +"Note that images generated larger than the screen will appear smaller when " +"previewed here, so they fit the screen." +msgstr "" + +#: templates/wagtailimages/images/usage.html:3 +#, fuzzy, python-format +msgid "Usage of %(title)s" +msgstr "編輯圖片 %(title)s" + +#: templates/wagtailimages/images/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtailimages/images/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtailimages/images/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtailimages/images/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtailimages/images/usage.html:26 +msgid "Edit this page" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:3 +#, fuzzy +msgid "Add multiple images" +msgstr "新增一個圖片" + +#: templates/wagtailimages/multiple/add.html:13 +#, fuzzy +msgid "Add images" +msgstr "新增圖片" + +#: templates/wagtailimages/multiple/add.html:18 +msgid "Drag and drop images into this area to upload immediately." +msgstr "" + +#: templates/wagtailimages/multiple/add.html:22 +msgid "Or choose from your computer" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:47 +msgid "" +"Upload successful. Please update this image with a more appropriate title, " +"if necessary. You may also delete the image completely if the upload wasn't " +"required." +msgstr "" + +#: templates/wagtailimages/multiple/add.html:48 +msgid "Sorry, upload failed." +msgstr "" + +#: templates/wagtailimages/multiple/edit_form.html:10 +msgid "Update" +msgstr "" + +#: templates/wagtailimages/multiple/edit_form.html:11 +#, fuzzy +msgid "Delete" +msgstr "刪除圖片" + +#: utils/validators.py:17 utils/validators.py:28 +#, fuzzy +msgid "" +"Not a valid image. Please use a gif, jpeg or png file with the correct file " +"extension (*.gif, *.jpg or *.png)." +msgstr "不是有效的圖片格式。請用 gif、jpeg 或者 png 格式的圖片" + +#: utils/validators.py:35 +#, fuzzy, python-format +msgid "" +"Not a valid %s image. Please use a gif, jpeg or png file with the correct " +"file extension (*.gif, *.jpg or *.png)." +msgstr "不是有效的圖片格式。請用 gif、jpeg 或者 png 格式的圖片" + +#: views/images.py:37 views/images.py:47 msgid "Search images" msgstr "搜尋圖片" -#: views/images.py:94 +#: views/images.py:99 msgid "Image '{0}' updated." msgstr "圖片 '{0}' 已更新" -#: views/images.py:97 +#: views/images.py:102 msgid "The image could not be saved due to errors." msgstr "圖片因有錯誤而無法儲存。" -#: views/images.py:116 +#: views/images.py:188 msgid "Image '{0}' deleted." msgstr "圖片 '{0}' 已刪除." -#: views/images.py:134 +#: views/images.py:206 msgid "Image '{0}' added." msgstr "圖片 '{0}' 已加入." -#: views/images.py:137 +#: views/images.py:209 msgid "The image could not be created due to errors." msgstr "圖片因有錯而不能被建立。" diff --git a/wagtail/wagtailimages/models.py b/wagtail/wagtailimages/models.py index c561cdcc5..b29d50e0c 100644 --- a/wagtail/wagtailimages/models.py +++ b/wagtail/wagtailimages/models.py @@ -8,20 +8,25 @@ from taggit.managers import TaggableManager from django.core.files import File from django.core.exceptions import ImproperlyConfigured, ObjectDoesNotExist from django.db import models -from django.db.models.signals import pre_delete +from django.db.models.signals import pre_delete, pre_save from django.dispatch.dispatcher import receiver from django.utils.safestring import mark_safe from django.utils.html import escape, format_html_join from django.conf import settings from django.utils.translation import ugettext_lazy as _ from django.utils.encoding import python_2_unicode_compatible +from django.utils.functional import cached_property +from django.core.urlresolvers import reverse from unidecode import unidecode from wagtail.wagtailadmin.taggable import TagSearchable from wagtail.wagtailimages.backends import get_image_backend from wagtail.wagtailsearch import indexed -from .utils import validate_image_format +from wagtail.wagtailimages.utils.validators import validate_image_format +from wagtail.wagtailimages.utils.focal_point import FocalPoint +from wagtail.wagtailimages.utils.feature_detection import FeatureDetector, opencv_available +from wagtail.wagtailadmin.utils import get_object_usage @python_2_unicode_compatible @@ -49,6 +54,19 @@ class AbstractImage(models.Model, TagSearchable): tags = TaggableManager(help_text=None, blank=True, verbose_name=_('Tags')) + focal_point_x = models.PositiveIntegerField(null=True, editable=False) + focal_point_y = models.PositiveIntegerField(null=True, editable=False) + focal_point_width = models.PositiveIntegerField(null=True, editable=False) + focal_point_height = models.PositiveIntegerField(null=True, editable=False) + + def get_usage(self): + return get_object_usage(self) + + @property + def usage_url(self): + return reverse('wagtailimages_image_usage', + args=(self.id,)) + search_fields = TagSearchable.search_fields + ( indexed.FilterField('uploaded_by_user'), ) @@ -56,6 +74,60 @@ class AbstractImage(models.Model, TagSearchable): def __str__(self): return self.title + @property + def focal_point(self): + if self.focal_point_x is not None and \ + self.focal_point_y is not None and \ + self.focal_point_width is not None and \ + self.focal_point_height is not None: + return FocalPoint( + self.focal_point_x, + self.focal_point_y, + width=self.focal_point_width, + height=self.focal_point_height, + ) + + @focal_point.setter + def focal_point(self, focal_point): + if focal_point is not None: + self.focal_point_x = focal_point.x + self.focal_point_y = focal_point.y + self.focal_point_width = focal_point.width + self.focal_point_height = focal_point.height + else: + self.focal_point_x = None + self.focal_point_y = None + self.focal_point_width = None + self.focal_point_height = None + + def get_suggested_focal_point(self, backend_name='default'): + backend = get_image_backend(backend_name) + image_file = self.file.file + + # Make sure image is open and seeked to the beginning + image_file.open('rb') + image_file.seek(0) + + # Load the image + image = backend.open_image(self.file.file) + image_data = backend.image_data_as_rgb(image) + + # Make sure we have image data + # If the image is animated, image_data_as_rgb will return None + if image_data is None: + return + + # Use feature detection to find a focal point + feature_detector = FeatureDetector(image.size, image_data[0], image_data[1]) + focal_point = feature_detector.get_focal_point() + + # Add 20% extra room around the edge of the focal point + if focal_point: + focal_point.width *= 1.20 + focal_point.height *= 1.20 + + return focal_point + def get_rendition(self, filter): if not hasattr(filter, 'process_image'): # assume we've been passed a filter spec string, rather than a Filter object @@ -63,17 +135,50 @@ class AbstractImage(models.Model, TagSearchable): filter, created = Filter.objects.get_or_create(spec=filter) try: - rendition = self.renditions.get(filter=filter) + if self.focal_point: + rendition = self.renditions.get( + filter=filter, + focal_point_key=self.focal_point.get_key(), + ) + else: + rendition = self.renditions.get( + filter=filter, + focal_point_key=None, + ) except ObjectDoesNotExist: file_field = self.file # If we have a backend attribute then pass it to process # image - else pass 'default' backend_name = getattr(self, 'backend', 'default') - generated_image_file = filter.process_image(file_field.file, backend_name=backend_name) + generated_image = filter.process_image(file_field.file, backend_name=backend_name, focal_point=self.focal_point) - rendition, created = self.renditions.get_or_create( - filter=filter, defaults={'file': generated_image_file}) + # generate new filename derived from old one, inserting the filter spec and focal point key before the extension + if self.focal_point is not None: + focal_point_key = "focus-" + self.focal_point.get_key() + else: + focal_point_key = "focus-none" + + input_filename_parts = os.path.basename(file_field.file.name).split('.') + filename_without_extension = '.'.join(input_filename_parts[:-1]) + filename_without_extension = filename_without_extension[:60] # trim filename base so that we're well under 100 chars + output_filename_parts = [filename_without_extension, focal_point_key, filter.spec] + input_filename_parts[-1:] + output_filename = '.'.join(output_filename_parts) + + generated_image_file = File(generated_image, name=output_filename) + + if self.focal_point: + rendition, created = self.renditions.get_or_create( + filter=filter, + focal_point_key=self.focal_point.get_key(), + defaults={'file': generated_image_file} + ) + else: + rendition, created = self.renditions.get_or_create( + filter=filter, + focal_point_key=None, + defaults={'file': generated_image_file} + ) return rendition @@ -112,6 +217,19 @@ class Image(AbstractImage): pass +# Do smartcropping calculations when user saves an image without a focal point +@receiver(pre_save, sender=Image) +def image_feature_detection(sender, instance, **kwargs): + if getattr(settings, 'WAGTAILIMAGES_FEATURE_DETECTION_ENABLED', False): + if not opencv_available: + raise ImproperlyConfigured("pyOpenCV could not be found.") + + # Make sure the image doesn't already have a focal point + if instance.focal_point is None: + # Set the focal point + instance.focal_point = instance.get_suggested_focal_point() + + # Receive the pre_delete signal and delete the file associated with the model instance. @receiver(pre_delete, sender=Image) def image_delete(sender, instance, **kwargs): @@ -153,75 +271,73 @@ class Filter(models.Model): 'original': 'no_operation', } - def __init__(self, *args, **kwargs): - super(Filter, self).__init__(*args, **kwargs) - self.method = None # will be populated when needed, by parsing the spec string + class InvalidFilterSpecError(ValueError): + pass def _parse_spec_string(self): - # parse the spec string and save the results to - # self.method_name and self.method_arg. There are various possible - # formats to match against: + # parse the spec string and return the method name and method arg. + # There are various possible formats to match against: # 'original' # 'width-200' # 'max-320x200' if self.spec == 'original': - self.method_name = Filter.OPERATION_NAMES['original'] - self.method_arg = None - return + return Filter.OPERATION_NAMES['original'], None match = re.match(r'(width|height)-(\d+)$', self.spec) if match: - self.method_name = Filter.OPERATION_NAMES[match.group(1)] - self.method_arg = int(match.group(2)) - return + return Filter.OPERATION_NAMES[match.group(1)], int(match.group(2)) match = re.match(r'(max|min|fill)-(\d+)x(\d+)$', self.spec) if match: - self.method_name = Filter.OPERATION_NAMES[match.group(1)] width = int(match.group(2)) height = int(match.group(3)) - self.method_arg = (width, height) - return + return Filter.OPERATION_NAMES[match.group(1)], (width, height) # Spec is not one of our recognised patterns - raise ValueError("Invalid image filter spec: %r" % self.spec) + raise Filter.InvalidFilterSpecError("Invalid image filter spec: %r" % self.spec) - def process_image(self, input_file, backend_name='default'): + @cached_property + def _method(self): + return self._parse_spec_string() + + def is_valid(self): + try: + self._parse_spec_string() + return True + except Filter.InvalidFilterSpecError: + return False + + def process_image(self, input_file, output_file=None, focal_point=None, backend_name='default'): """ - Given an input image file as a django.core.files.File object, - generate an output image with this filter applied, returning it - as another django.core.files.File object + Run this filter on the given image file then write the result into output_file and return it + If output_file is not given, a new BytesIO will be used instead """ + # Get backend backend = get_image_backend(backend_name) - if not self.method: - self._parse_spec_string() + # Parse spec string + method_name, method_arg = self._method - # If file is closed, open it + # Open image input_file.open('rb') image = backend.open_image(input_file) file_format = image.format - method = getattr(backend, self.method_name) + # Process image + method = getattr(backend, method_name) + image = method(image, method_arg, focal_point=focal_point) - image = method(image, self.method_arg) + # Make sure we have an output file + if output_file is None: + output_file = BytesIO() - output = BytesIO() - backend.save_image(image, output, file_format) + # Write output + backend.save_image(image, output_file, file_format) - # and then close the input file + # Close the input file input_file.close() - # generate new filename derived from old one, inserting the filter spec string before the extension - input_filename_parts = os.path.basename(input_file.name).split('.') - filename_without_extension = '.'.join(input_filename_parts[:-1]) - filename_without_extension = filename_without_extension[:60] # trim filename base so that we're well under 100 chars - output_filename_parts = [filename_without_extension, self.spec] + input_filename_parts[-1:] - output_filename = '.'.join(output_filename_parts) - - output_file = File(output, name=output_filename) - return output_file @@ -230,6 +346,7 @@ class AbstractRendition(models.Model): file = models.ImageField(upload_to='images', width_field='width', height_field='height') width = models.IntegerField(editable=False) height = models.IntegerField(editable=False) + focal_point_key = models.CharField(max_length=255, null=True, editable=False) @property def url(self): @@ -257,7 +374,7 @@ class Rendition(AbstractRendition): class Meta: unique_together = ( - ('image', 'filter'), + ('image', 'filter', 'focal_point_key'), ) @@ -266,3 +383,4 @@ class Rendition(AbstractRendition): def rendition_delete(sender, instance, **kwargs): # Pass false so FileField doesn't save the model. instance.file.delete(False) + diff --git a/wagtail/wagtailimages/migrations/0001_initial.py b/wagtail/wagtailimages/south_migrations/0001_initial.py similarity index 100% rename from wagtail/wagtailimages/migrations/0001_initial.py rename to wagtail/wagtailimages/south_migrations/0001_initial.py diff --git a/wagtail/wagtailimages/migrations/0002_initial_data.py b/wagtail/wagtailimages/south_migrations/0002_initial_data.py similarity index 100% rename from wagtail/wagtailimages/migrations/0002_initial_data.py rename to wagtail/wagtailimages/south_migrations/0002_initial_data.py diff --git a/wagtail/wagtailimages/south_migrations/0003_focal_point_fields.py b/wagtail/wagtailimages/south_migrations/0003_focal_point_fields.py new file mode 100644 index 000000000..c9b6be1f8 --- /dev/null +++ b/wagtail/wagtailimages/south_migrations/0003_focal_point_fields.py @@ -0,0 +1,136 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Removing unique constraint on 'Rendition', fields ['image', 'filter'] + db.delete_unique('wagtailimages_rendition', ['image_id', 'filter_id']) + + # Adding field 'Image.focal_point_x' + db.add_column('wagtailimages_image', 'focal_point_x', + self.gf('django.db.models.fields.PositiveIntegerField')(null=True), + keep_default=False) + + # Adding field 'Image.focal_point_y' + db.add_column('wagtailimages_image', 'focal_point_y', + self.gf('django.db.models.fields.PositiveIntegerField')(null=True), + keep_default=False) + + # Adding field 'Image.focal_point_width' + db.add_column('wagtailimages_image', 'focal_point_width', + self.gf('django.db.models.fields.PositiveIntegerField')(null=True), + keep_default=False) + + # Adding field 'Image.focal_point_height' + db.add_column('wagtailimages_image', 'focal_point_height', + self.gf('django.db.models.fields.PositiveIntegerField')(null=True), + keep_default=False) + + # Adding field 'Rendition.focal_point_key' + db.add_column('wagtailimages_rendition', 'focal_point_key', + self.gf('django.db.models.fields.CharField')(max_length=255, null=True), + keep_default=False) + + # Adding unique constraint on 'Rendition', fields ['image', 'filter', 'focal_point_key'] + db.create_unique('wagtailimages_rendition', ['image_id', 'filter_id', 'focal_point_key']) + + + def backwards(self, orm): + # Removing unique constraint on 'Rendition', fields ['image', 'filter', 'focal_point_key'] + db.delete_unique('wagtailimages_rendition', ['image_id', 'filter_id', 'focal_point_key']) + + # Deleting field 'Image.focal_point_x' + db.delete_column('wagtailimages_image', 'focal_point_x') + + # Deleting field 'Image.focal_point_y' + db.delete_column('wagtailimages_image', 'focal_point_y') + + # Deleting field 'Image.focal_point_width' + db.delete_column('wagtailimages_image', 'focal_point_width') + + # Deleting field 'Image.focal_point_height' + db.delete_column('wagtailimages_image', 'focal_point_height') + + # Deleting field 'Rendition.focal_point_key' + db.delete_column('wagtailimages_rendition', 'focal_point_key') + + # Adding unique constraint on 'Rendition', fields ['image', 'filter'] + db.create_unique('wagtailimages_rendition', ['image_id', 'filter_id']) + + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'user_set'", 'blank': 'True', 'to': "orm['auth.Group']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'user_set'", 'blank': 'True', 'to': "orm['auth.Permission']"}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + 'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + 'wagtailimages.filter': { + 'Meta': {'object_name': 'Filter'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'spec': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}) + }, + 'wagtailimages.image': { + 'Meta': {'object_name': 'Image'}, + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'file': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}), + 'focal_point_height': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True'}), + 'focal_point_width': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True'}), + 'focal_point_x': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True'}), + 'focal_point_y': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True'}), + 'height': ('django.db.models.fields.IntegerField', [], {}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'uploaded_by_user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}), + 'width': ('django.db.models.fields.IntegerField', [], {}) + }, + 'wagtailimages.rendition': { + 'Meta': {'unique_together': "(('image', 'filter', 'focal_point_key'),)", 'object_name': 'Rendition'}, + 'file': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}), + 'filter': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['wagtailimages.Filter']"}), + 'focal_point_key': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), + 'height': ('django.db.models.fields.IntegerField', [], {}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'image': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'renditions'", 'to': "orm['wagtailimages.Image']"}), + 'width': ('django.db.models.fields.IntegerField', [], {}) + } + } + + complete_apps = ['wagtailimages'] \ No newline at end of file diff --git a/wagtail/wagtailusers/migrations/__init__.py b/wagtail/wagtailimages/south_migrations/__init__.py similarity index 100% rename from wagtail/wagtailusers/migrations/__init__.py rename to wagtail/wagtailimages/south_migrations/__init__.py diff --git a/wagtail/wagtailimages/static/wagtailimages/js/add-multiple.js b/wagtail/wagtailimages/static/wagtailimages/js/add-multiple.js new file mode 100644 index 000000000..05c72feb4 --- /dev/null +++ b/wagtail/wagtailimages/static/wagtailimages/js/add-multiple.js @@ -0,0 +1,155 @@ +$(function(){ + // Redirect users that don't support filereader + if(!$('html').hasClass('filereader')){ + document.location.href = window.simple_upload_url; + return false; + } + + // prevents browser default drag/drop + $(document).bind('drop dragover', function (e) { + e.preventDefault(); + }); + + $('#fileupload').fileupload({ + dataType: 'html', + sequentialUploads: true, + dropZone: $('.drop-zone'), + acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i, + previewMinWidth:150, + previewMaxWidth:150, + previewMinHeight:150, + previewMaxHeight:150, + + add: function (e, data) { + var $this = $(this); + var that = $this.data('blueimp-fileupload') || $this.data('fileupload') + var li = $($('#upload-list-item').html()).addClass('upload-uploading') + var options = that.options; + + $('#upload-list').append(li); + data.context = li; + + data.process(function () { + return $this.fileupload('process', data); + }).always(function () { + data.context.removeClass('processing'); + data.context.find('.left').each(function(index, elm){ + $(elm).append(data.files[index].name); + }); + data.context.find('.preview .thumb').each(function (index, elm) { + $(elm).addClass('hasthumb') + $(elm).append(data.files[index].preview); + }); + }).done(function () { + data.context.find('.start').prop('disabled', false); + if ((that._trigger('added', e, data) !== false) && + (options.autoUpload || data.autoUpload) && + data.autoUpload !== false) { + data.submit(); + } + }).fail(function () { + if (data.files.error) { + data.context.each(function (index) { + var error = data.files[index].error; + if (error) { + $(this).find('.error').text(error); + } + }); + } + }); + + }, + + progress: function (e, data) { + if (e.isDefaultPrevented()) { + return false; + } + + var progress = Math.floor(data.loaded / data.total * 100); + data.context.each(function () { + $(this).find('.progress').addClass('active').attr('aria-valuenow', progress).find('.bar').css( + 'width', + progress + '%' + ).html(progress + '%'); + }); + }, + + progressall: function (e, data) { + var progress = parseInt(data.loaded / data.total * 100, 10); + $('#overall-progress').addClass('active').attr('aria-valuenow', progress).find('.bar').css( + 'width', + progress + '%' + ).html(progress + '%'); + + if (progress >= 100){ + $('#overall-progress').removeClass('active').find('.bar').css('width','0%'); + } + }, + + done: function (e, data) { + var itemElement = $(data.context); + var response = $.parseJSON(data.result); + + if(response.success){ + itemElement.addClass('upload-success') + + $('.right', itemElement).append(response.form); + + // run tagit enhancement + $('.tag_field input', itemElement).tagit(window.tagit_opts); + } else { + itemElement.addClass('upload-failure'); + $('.right .error_messages', itemElement).append(response.error_message); + } + + }, + + fail: function(e, data){ + var itemElement = $(data.context); + itemElement.addClass('upload-failure'); + }, + + always: function(e, data){ + var itemElement = $(data.context); + itemElement.removeClass('upload-uploading').addClass('upload-complete'); + }, + }); + + // ajax-enhance forms added on done() + $('#upload-list').on('submit', 'form', function(e){ + var form = $(this); + var itemElement = form.closest('#upload-list > li'); + + console.log(form); + + e.preventDefault(); + + $.post(this.action, form.serialize(), function(data) { + if (data.success) { + itemElement.slideUp(function(){$(this).remove()}); + }else{ + form.replaceWith(data.form); + // run tagit enhancement on new form + $('.tag_field input', form).tagit(window.tagit_opts); + } + }); + }); + + $('#upload-list').on('click', '.delete', function(e){ + var form = $(this).closest('form'); + var itemElement = form.closest('#upload-list > li'); + + e.preventDefault(); + + var CSRFToken = $('input[name="csrfmiddlewaretoken"]', form).val(); + + $.post(this.href, {csrfmiddlewaretoken: CSRFToken}, function(data) { + if (data.success) { + itemElement.slideUp(function(){$(this).remove()}); + }else{ + + } + }); + }); + +}); \ No newline at end of file diff --git a/wagtail/wagtailimages/static/wagtailimages/js/image-url-generator.js b/wagtail/wagtailimages/static/wagtailimages/js/image-url-generator.js new file mode 100644 index 000000000..c9f8ed1e7 --- /dev/null +++ b/wagtail/wagtailimages/static/wagtailimages/js/image-url-generator.js @@ -0,0 +1,69 @@ +$(function() { + "use strict"; + + $('.image-url-generator').each(function() { + var $this = $(this); + var $form = $this.find('form'); + var $filterMethodField = $form.find('select#id_filter_method'); + var $widthField = $form.find('input#id_width'); + var $heightField = $form.find('input#id_height'); + var $result = $this.find('#result-url'); + var $loadingMask = $this.find('.loading-mask') + var $preview = $this.find('img.preview'); + var $sizeNote = $('#note-size') + + var generatorUrl = $this.data('generatorUrl'); + + function formChangeHandler() { + var filterSpec = $filterMethodField.val(); + + $loadingMask.addClass('loading'); + + if (filterSpec == 'original') { + $widthField.prop('disabled', true); + $heightField.prop('disabled', true); + } else if (filterSpec == 'width') { + $widthField.prop('disabled', false); + $heightField.prop('disabled', true); + filterSpec += '-' + $widthField.val(); + } else if (filterSpec == 'height') { + $widthField.prop('disabled', true); + $heightField.prop('disabled', false); + filterSpec += '-' + $heightField.val(); + } else if (filterSpec == 'min' || filterSpec == 'max' || filterSpec == 'fill') { + $widthField.prop('disabled', false); + $heightField.prop('disabled', false); + filterSpec += '-' + $widthField.val() + 'x' + $heightField.val(); + } + + // Display note about scaled down images if image is large + if($widthField.val() > $(window).width()){ + $sizeNote.show(); + }else{ + $sizeNote.hide(); + } + + // Fields with width and height + $.getJSON(generatorUrl.replace('__filterspec__', filterSpec)) + .done(function(data) { + $result.val(data['url']); + $preview.attr('src', data['local_url']); + $loadingMask.removeClass('loading'); + }) + .fail(function(data) { + $result.val(data.responseJSON['error']); + $preview.attr('src', ''); + $loadingMask.removeClass('loading'); + }); + } + + $form.change($.debounce(500, formChangeHandler)); + $form.keyup($.debounce(500, formChangeHandler)); + formChangeHandler(); + + // When the user clicks the URL, automatically select the whole thing (for easier copying) + $result.click(function() { + $(this).select(); + }); + }); +}); diff --git a/wagtail/wagtailimages/static/wagtailimages/js/vendor/canvas-to-blob.min.js b/wagtail/wagtailimages/static/wagtailimages/js/vendor/canvas-to-blob.min.js new file mode 100644 index 000000000..dd95826c9 --- /dev/null +++ b/wagtail/wagtailimages/static/wagtailimages/js/vendor/canvas-to-blob.min.js @@ -0,0 +1 @@ +!function(a){"use strict";var b=a.HTMLCanvasElement&&a.HTMLCanvasElement.prototype,c=a.Blob&&function(){try{return Boolean(new Blob)}catch(a){return!1}}(),d=c&&a.Uint8Array&&function(){try{return 100===new Blob([new Uint8Array(100)]).size}catch(a){return!1}}(),e=a.BlobBuilder||a.WebKitBlobBuilder||a.MozBlobBuilder||a.MSBlobBuilder,f=(c||e)&&a.atob&&a.ArrayBuffer&&a.Uint8Array&&function(a){var b,f,g,h,i,j;for(b=a.split(",")[0].indexOf("base64")>=0?atob(a.split(",")[1]):decodeURIComponent(a.split(",")[1]),f=new ArrayBuffer(b.length),g=new Uint8Array(f),h=0;h<b.length;h+=1)g[h]=b.charCodeAt(h);return i=a.split(",")[0].split(":")[1].split(";")[0],c?new Blob([d?g:f],{type:i}):(j=new e,j.append(f),j.getBlob(i))};a.HTMLCanvasElement&&!b.toBlob&&(b.mozGetAsFile?b.toBlob=function(a,c,d){d&&b.toDataURL&&f?a(f(this.toDataURL(c,d))):a(this.mozGetAsFile("blob",c))}:b.toDataURL&&f&&(b.toBlob=function(a,b,c){a(f(this.toDataURL(b,c)))})),"function"==typeof define&&define.amd?define(function(){return f}):a.dataURLtoBlob=f}(this); \ No newline at end of file diff --git a/wagtail/wagtailimages/static/wagtailimages/js/vendor/jquery.fileupload-image.js b/wagtail/wagtailimages/static/wagtailimages/js/vendor/jquery.fileupload-image.js new file mode 100644 index 000000000..164a1cbbf --- /dev/null +++ b/wagtail/wagtailimages/static/wagtailimages/js/vendor/jquery.fileupload-image.js @@ -0,0 +1,315 @@ +/* + * jQuery File Upload Image Preview & Resize Plugin 1.7.2 + * https://github.com/blueimp/jQuery-File-Upload + * + * Copyright 2013, Sebastian Tschan + * https://blueimp.net + * + * Licensed under the MIT license: + * http://www.opensource.org/licenses/MIT + */ + +/* jshint nomen:false */ +/* global define, window, Blob */ + +(function (factory) { + 'use strict'; + if (typeof define === 'function' && define.amd) { + // Register as an anonymous AMD module: + define([ + 'jquery', + 'load-image', + 'load-image-meta', + 'load-image-exif', + 'load-image-ios', + 'canvas-to-blob', + './jquery.fileupload-process' + ], factory); + } else { + // Browser globals: + factory( + window.jQuery, + window.loadImage + ); + } +}(function ($, loadImage) { + 'use strict'; + + // Prepend to the default processQueue: + $.blueimp.fileupload.prototype.options.processQueue.unshift( + { + action: 'loadImageMetaData', + disableImageHead: '@', + disableExif: '@', + disableExifThumbnail: '@', + disableExifSub: '@', + disableExifGps: '@', + disabled: '@disableImageMetaDataLoad' + }, + { + action: 'loadImage', + // Use the action as prefix for the "@" options: + prefix: true, + fileTypes: '@', + maxFileSize: '@', + noRevoke: '@', + disabled: '@disableImageLoad' + }, + { + action: 'resizeImage', + // Use "image" as prefix for the "@" options: + prefix: 'image', + maxWidth: '@', + maxHeight: '@', + minWidth: '@', + minHeight: '@', + crop: '@', + orientation: '@', + forceResize: '@', + disabled: '@disableImageResize' + }, + { + action: 'saveImage', + quality: '@imageQuality', + type: '@imageType', + disabled: '@disableImageResize' + }, + { + action: 'saveImageMetaData', + disabled: '@disableImageMetaDataSave' + }, + { + action: 'resizeImage', + // Use "preview" as prefix for the "@" options: + prefix: 'preview', + maxWidth: '@', + maxHeight: '@', + minWidth: '@', + minHeight: '@', + crop: '@', + orientation: '@', + thumbnail: '@', + canvas: '@', + disabled: '@disableImagePreview' + }, + { + action: 'setImage', + name: '@imagePreviewName', + disabled: '@disableImagePreview' + }, + { + action: 'deleteImageReferences', + disabled: '@disableImageReferencesDeletion' + } + ); + + // The File Upload Resize plugin extends the fileupload widget + // with image resize functionality: + $.widget('blueimp.fileupload', $.blueimp.fileupload, { + + options: { + // The regular expression for the types of images to load: + // matched against the file type: + loadImageFileTypes: /^image\/(gif|jpeg|png|svg\+xml)$/, + // The maximum file size of images to load: + loadImageMaxFileSize: 10000000, // 10MB + // The maximum width of resized images: + imageMaxWidth: 1920, + // The maximum height of resized images: + imageMaxHeight: 1080, + // Defines the image orientation (1-8) or takes the orientation + // value from Exif data if set to true: + imageOrientation: false, + // Define if resized images should be cropped or only scaled: + imageCrop: false, + // Disable the resize image functionality by default: + disableImageResize: true, + // The maximum width of the preview images: + previewMaxWidth: 80, + // The maximum height of the preview images: + previewMaxHeight: 80, + // Defines the preview orientation (1-8) or takes the orientation + // value from Exif data if set to true: + previewOrientation: true, + // Create the preview using the Exif data thumbnail: + previewThumbnail: true, + // Define if preview images should be cropped or only scaled: + previewCrop: false, + // Define if preview images should be resized as canvas elements: + previewCanvas: true + }, + + processActions: { + + // Loads the image given via data.files and data.index + // as img element, if the browser supports the File API. + // Accepts the options fileTypes (regular expression) + // and maxFileSize (integer) to limit the files to load: + loadImage: function (data, options) { + if (options.disabled) { + return data; + } + var that = this, + file = data.files[data.index], + dfd = $.Deferred(); + if (($.type(options.maxFileSize) === 'number' && + file.size > options.maxFileSize) || + (options.fileTypes && + !options.fileTypes.test(file.type)) || + !loadImage( + file, + function (img) { + if (img.src) { + data.img = img; + } + dfd.resolveWith(that, [data]); + }, + options + )) { + return data; + } + return dfd.promise(); + }, + + // Resizes the image given as data.canvas or data.img + // and updates data.canvas or data.img with the resized image. + // Also stores the resized image as preview property. + // Accepts the options maxWidth, maxHeight, minWidth, + // minHeight, canvas and crop: + resizeImage: function (data, options) { + if (options.disabled || !(data.canvas || data.img)) { + return data; + } + options = $.extend({canvas: true}, options); + var that = this, + dfd = $.Deferred(), + img = (options.canvas && data.canvas) || data.img, + resolve = function (newImg) { + if (newImg && (newImg.width !== img.width || + newImg.height !== img.height || + options.forceResize)) { + data[newImg.getContext ? 'canvas' : 'img'] = newImg; + } + data.preview = newImg; + dfd.resolveWith(that, [data]); + }, + thumbnail; + if (data.exif) { + if (options.orientation === true) { + options.orientation = data.exif.get('Orientation'); + } + if (options.thumbnail) { + thumbnail = data.exif.get('Thumbnail'); + if (thumbnail) { + loadImage(thumbnail, resolve, options); + return dfd.promise(); + } + } + // Prevent orienting the same image twice: + if (data.orientation) { + delete options.orientation; + } else { + data.orientation = options.orientation; + } + } + if (img) { + resolve(loadImage.scale(img, options)); + return dfd.promise(); + } + return data; + }, + + // Saves the processed image given as data.canvas + // inplace at data.index of data.files: + saveImage: function (data, options) { + if (!data.canvas || options.disabled) { + return data; + } + var that = this, + file = data.files[data.index], + dfd = $.Deferred(); + if (data.canvas.toBlob) { + data.canvas.toBlob( + function (blob) { + if (!blob.name) { + if (file.type === blob.type) { + blob.name = file.name; + } else if (file.name) { + blob.name = file.name.replace( + /\..+$/, + '.' + blob.type.substr(6) + ); + } + } + // Don't restore invalid meta data: + if (file.type !== blob.type) { + delete data.imageHead; + } + // Store the created blob at the position + // of the original file in the files list: + data.files[data.index] = blob; + dfd.resolveWith(that, [data]); + }, + options.type || file.type, + options.quality + ); + } else { + return data; + } + return dfd.promise(); + }, + + loadImageMetaData: function (data, options) { + if (options.disabled) { + return data; + } + var that = this, + dfd = $.Deferred(); + loadImage.parseMetaData(data.files[data.index], function (result) { + $.extend(data, result); + dfd.resolveWith(that, [data]); + }, options); + return dfd.promise(); + }, + + saveImageMetaData: function (data, options) { + if (!(data.imageHead && data.canvas && + data.canvas.toBlob && !options.disabled)) { + return data; + } + var file = data.files[data.index], + blob = new Blob([ + data.imageHead, + // Resized images always have a head size of 20 bytes, + // including the JPEG marker and a minimal JFIF header: + this._blobSlice.call(file, 20) + ], {type: file.type}); + blob.name = file.name; + data.files[data.index] = blob; + return data; + }, + + // Sets the resized version of the image as a property of the + // file object, must be called after "saveImage": + setImage: function (data, options) { + if (data.preview && !options.disabled) { + data.files[data.index][options.name || 'preview'] = data.preview; + } + return data; + }, + + deleteImageReferences: function (data, options) { + if (!options.disabled) { + delete data.img; + delete data.canvas; + delete data.preview; + delete data.imageHead; + } + return data; + } + + } + + }); + +})); \ No newline at end of file diff --git a/wagtail/wagtailimages/static/wagtailimages/js/vendor/jquery.fileupload-process.js b/wagtail/wagtailimages/static/wagtailimages/js/vendor/jquery.fileupload-process.js new file mode 100644 index 000000000..1e9f3b268 --- /dev/null +++ b/wagtail/wagtailimages/static/wagtailimages/js/vendor/jquery.fileupload-process.js @@ -0,0 +1,172 @@ +/* + * jQuery File Upload Processing Plugin 1.3.0 + * https://github.com/blueimp/jQuery-File-Upload + * + * Copyright 2012, Sebastian Tschan + * https://blueimp.net + * + * Licensed under the MIT license: + * http://www.opensource.org/licenses/MIT + */ + +/* jshint nomen:false */ +/* global define, window */ + +(function (factory) { + 'use strict'; + if (typeof define === 'function' && define.amd) { + // Register as an anonymous AMD module: + define([ + 'jquery', + './jquery.fileupload' + ], factory); + } else { + // Browser globals: + factory( + window.jQuery + ); + } +}(function ($) { + 'use strict'; + + var originalAdd = $.blueimp.fileupload.prototype.options.add; + + // The File Upload Processing plugin extends the fileupload widget + // with file processing functionality: + $.widget('blueimp.fileupload', $.blueimp.fileupload, { + + options: { + // The list of processing actions: + processQueue: [ + /* + { + action: 'log', + type: 'debug' + } + */ + ], + add: function (e, data) { + var $this = $(this); + data.process(function () { + return $this.fileupload('process', data); + }); + originalAdd.call(this, e, data); + } + }, + + processActions: { + /* + log: function (data, options) { + console[options.type]( + 'Processing "' + data.files[data.index].name + '"' + ); + } + */ + }, + + _processFile: function (data, originalData) { + var that = this, + dfd = $.Deferred().resolveWith(that, [data]), + chain = dfd.promise(); + this._trigger('process', null, data); + $.each(data.processQueue, function (i, settings) { + var func = function (data) { + if (originalData.errorThrown) { + return $.Deferred() + .rejectWith(that, [originalData]).promise(); + } + return that.processActions[settings.action].call( + that, + data, + settings + ); + }; + chain = chain.pipe(func, settings.always && func); + }); + chain + .done(function () { + that._trigger('processdone', null, data); + that._trigger('processalways', null, data); + }) + .fail(function () { + that._trigger('processfail', null, data); + that._trigger('processalways', null, data); + }); + return chain; + }, + + // Replaces the settings of each processQueue item that + // are strings starting with an "@", using the remaining + // substring as key for the option map, + // e.g. "@autoUpload" is replaced with options.autoUpload: + _transformProcessQueue: function (options) { + var processQueue = []; + $.each(options.processQueue, function () { + var settings = {}, + action = this.action, + prefix = this.prefix === true ? action : this.prefix; + $.each(this, function (key, value) { + if ($.type(value) === 'string' && + value.charAt(0) === '@') { + settings[key] = options[ + value.slice(1) || (prefix ? prefix + + key.charAt(0).toUpperCase() + key.slice(1) : key) + ]; + } else { + settings[key] = value; + } + + }); + processQueue.push(settings); + }); + options.processQueue = processQueue; + }, + + // Returns the number of files currently in the processsing queue: + processing: function () { + return this._processing; + }, + + // Processes the files given as files property of the data parameter, + // returns a Promise object that allows to bind callbacks: + process: function (data) { + var that = this, + options = $.extend({}, this.options, data); + if (options.processQueue && options.processQueue.length) { + this._transformProcessQueue(options); + if (this._processing === 0) { + this._trigger('processstart'); + } + $.each(data.files, function (index) { + var opts = index ? $.extend({}, options) : options, + func = function () { + if (data.errorThrown) { + return $.Deferred() + .rejectWith(that, [data]).promise(); + } + return that._processFile(opts, data); + }; + opts.index = index; + that._processing += 1; + that._processingQueue = that._processingQueue.pipe(func, func) + .always(function () { + that._processing -= 1; + if (that._processing === 0) { + that._trigger('processstop'); + } + }); + }); + } + return this._processingQueue; + }, + + _create: function () { + this._super(); + this._processing = 0; + this._processingQueue = $.Deferred().resolveWith(this) + .promise(); + } + + }); + +})); \ No newline at end of file diff --git a/wagtail/wagtailimages/static/wagtailimages/js/vendor/jquery.fileupload.js b/wagtail/wagtailimages/static/wagtailimages/js/vendor/jquery.fileupload.js new file mode 100644 index 000000000..0803592d6 --- /dev/null +++ b/wagtail/wagtailimages/static/wagtailimages/js/vendor/jquery.fileupload.js @@ -0,0 +1,1426 @@ +/* + * jQuery File Upload Plugin 5.40.1 + * https://github.com/blueimp/jQuery-File-Upload + * + * Copyright 2010, Sebastian Tschan + * https://blueimp.net + * + * Licensed under the MIT license: + * http://www.opensource.org/licenses/MIT + */ + +/* jshint nomen:false */ +/* global define, window, document, location, Blob, FormData */ + +(function (factory) { + 'use strict'; + if (typeof define === 'function' && define.amd) { + // Register as an anonymous AMD module: + define([ + 'jquery', + 'jquery.ui.widget' + ], factory); + } else { + // Browser globals: + factory(window.jQuery); + } +}(function ($) { + 'use strict'; + + // Detect file input support, based on + // http://viljamis.com/blog/2012/file-upload-support-on-mobile/ + $.support.fileInput = !(new RegExp( + // Handle devices which give false positives for the feature detection: + '(Android (1\\.[0156]|2\\.[01]))' + + '|(Windows Phone (OS 7|8\\.0))|(XBLWP)|(ZuneWP)|(WPDesktop)' + + '|(w(eb)?OSBrowser)|(webOS)' + + '|(Kindle/(1\\.0|2\\.[05]|3\\.0))' + ).test(window.navigator.userAgent) || + // Feature detection for all other devices: + $('<input type="file">').prop('disabled')); + + // The FileReader API is not actually used, but works as feature detection, + // as some Safari versions (5?) support XHR file uploads via the FormData API, + // but not non-multipart XHR file uploads. + // window.XMLHttpRequestUpload is not available on IE10, so we check for + // window.ProgressEvent instead to detect XHR2 file upload capability: + $.support.xhrFileUpload = !!(window.ProgressEvent && window.FileReader); + $.support.xhrFormDataFileUpload = !!window.FormData; + + // Detect support for Blob slicing (required for chunked uploads): + $.support.blobSlice = window.Blob && (Blob.prototype.slice || + Blob.prototype.webkitSlice || Blob.prototype.mozSlice); + + // The fileupload widget listens for change events on file input fields defined + // via fileInput setting and paste or drop events of the given dropZone. + // In addition to the default jQuery Widget methods, the fileupload widget + // exposes the "add" and "send" methods, to add or directly send files using + // the fileupload API. + // By default, files added via file input selection, paste, drag & drop or + // "add" method are uploaded immediately, but it is possible to override + // the "add" callback option to queue file uploads. + $.widget('blueimp.fileupload', { + + options: { + // The drop target element(s), by the default the complete document. + // Set to null to disable drag & drop support: + dropZone: $(document), + // The paste target element(s), by the default the complete document. + // Set to null to disable paste support: + pasteZone: $(document), + // The file input field(s), that are listened to for change events. + // If undefined, it is set to the file input fields inside + // of the widget element on plugin initialization. + // Set to null to disable the change listener. + fileInput: undefined, + // By default, the file input field is replaced with a clone after + // each input field change event. This is required for iframe transport + // queues and allows change events to be fired for the same file + // selection, but can be disabled by setting the following option to false: + replaceFileInput: true, + // The parameter name for the file form data (the request argument name). + // If undefined or empty, the name property of the file input field is + // used, or "files[]" if the file input name property is also empty, + // can be a string or an array of strings: + paramName: undefined, + // By default, each file of a selection is uploaded using an individual + // request for XHR type uploads. Set to false to upload file + // selections in one request each: + singleFileUploads: true, + // To limit the number of files uploaded with one XHR request, + // set the following option to an integer greater than 0: + limitMultiFileUploads: undefined, + // The following option limits the number of files uploaded with one + // XHR request to keep the request size under or equal to the defined + // limit in bytes: + limitMultiFileUploadSize: undefined, + // Multipart file uploads add a number of bytes to each uploaded file, + // therefore the following option adds an overhead for each file used + // in the limitMultiFileUploadSize configuration: + limitMultiFileUploadSizeOverhead: 512, + // Set the following option to true to issue all file upload requests + // in a sequential order: + sequentialUploads: false, + // To limit the number of concurrent uploads, + // set the following option to an integer greater than 0: + limitConcurrentUploads: undefined, + // Set the following option to true to force iframe transport uploads: + forceIframeTransport: false, + // Set the following option to the location of a redirect url on the + // origin server, for cross-domain iframe transport uploads: + redirect: undefined, + // The parameter name for the redirect url, sent as part of the form + // data and set to 'redirect' if this option is empty: + redirectParamName: undefined, + // Set the following option to the location of a postMessage window, + // to enable postMessage transport uploads: + postMessage: undefined, + // By default, XHR file uploads are sent as multipart/form-data. + // The iframe transport is always using multipart/form-data. + // Set to false to enable non-multipart XHR uploads: + multipart: true, + // To upload large files in smaller chunks, set the following option + // to a preferred maximum chunk size. If set to 0, null or undefined, + // or the browser does not support the required Blob API, files will + // be uploaded as a whole. + maxChunkSize: undefined, + // When a non-multipart upload or a chunked multipart upload has been + // aborted, this option can be used to resume the upload by setting + // it to the size of the already uploaded bytes. This option is most + // useful when modifying the options object inside of the "add" or + // "send" callbacks, as the options are cloned for each file upload. + uploadedBytes: undefined, + // By default, failed (abort or error) file uploads are removed from the + // global progress calculation. Set the following option to false to + // prevent recalculating the global progress data: + recalculateProgress: true, + // Interval in milliseconds to calculate and trigger progress events: + progressInterval: 100, + // Interval in milliseconds to calculate progress bitrate: + bitrateInterval: 500, + // By default, uploads are started automatically when adding files: + autoUpload: true, + + // Error and info messages: + messages: { + uploadedBytes: 'Uploaded bytes exceed file size' + }, + + // Translation function, gets the message key to be translated + // and an object with context specific data as arguments: + i18n: function (message, context) { + message = this.messages[message] || message.toString(); + if (context) { + $.each(context, function (key, value) { + message = message.replace('{' + key + '}', value); + }); + } + return message; + }, + + // Additional form data to be sent along with the file uploads can be set + // using this option, which accepts an array of objects with name and + // value properties, a function returning such an array, a FormData + // object (for XHR file uploads), or a simple object. + // The form of the first fileInput is given as parameter to the function: + formData: function (form) { + return form.serializeArray(); + }, + + // The add callback is invoked as soon as files are added to the fileupload + // widget (via file input selection, drag & drop, paste or add API call). + // If the singleFileUploads option is enabled, this callback will be + // called once for each file in the selection for XHR file uploads, else + // once for each file selection. + // + // The upload starts when the submit method is invoked on the data parameter. + // The data object contains a files property holding the added files + // and allows you to override plugin options as well as define ajax settings. + // + // Listeners for this callback can also be bound the following way: + // .bind('fileuploadadd', func); + // + // data.submit() returns a Promise object and allows to attach additional + // handlers using jQuery's Deferred callbacks: + // data.submit().done(func).fail(func).always(func); + add: function (e, data) { + if (e.isDefaultPrevented()) { + return false; + } + if (data.autoUpload || (data.autoUpload !== false && + $(this).fileupload('option', 'autoUpload'))) { + data.process().done(function () { + data.submit(); + }); + } + }, + + // Other callbacks: + + // Callback for the submit event of each file upload: + // submit: function (e, data) {}, // .bind('fileuploadsubmit', func); + + // Callback for the start of each file upload request: + // send: function (e, data) {}, // .bind('fileuploadsend', func); + + // Callback for successful uploads: + // done: function (e, data) {}, // .bind('fileuploaddone', func); + + // Callback for failed (abort or error) uploads: + // fail: function (e, data) {}, // .bind('fileuploadfail', func); + + // Callback for completed (success, abort or error) requests: + // always: function (e, data) {}, // .bind('fileuploadalways', func); + + // Callback for upload progress events: + // progress: function (e, data) {}, // .bind('fileuploadprogress', func); + + // Callback for global upload progress events: + // progressall: function (e, data) {}, // .bind('fileuploadprogressall', func); + + // Callback for uploads start, equivalent to the global ajaxStart event: + // start: function (e) {}, // .bind('fileuploadstart', func); + + // Callback for uploads stop, equivalent to the global ajaxStop event: + // stop: function (e) {}, // .bind('fileuploadstop', func); + + // Callback for change events of the fileInput(s): + // change: function (e, data) {}, // .bind('fileuploadchange', func); + + // Callback for paste events to the pasteZone(s): + // paste: function (e, data) {}, // .bind('fileuploadpaste', func); + + // Callback for drop events of the dropZone(s): + // drop: function (e, data) {}, // .bind('fileuploaddrop', func); + + // Callback for dragover events of the dropZone(s): + // dragover: function (e) {}, // .bind('fileuploaddragover', func); + + // Callback for the start of each chunk upload request: + // chunksend: function (e, data) {}, // .bind('fileuploadchunksend', func); + + // Callback for successful chunk uploads: + // chunkdone: function (e, data) {}, // .bind('fileuploadchunkdone', func); + + // Callback for failed (abort or error) chunk uploads: + // chunkfail: function (e, data) {}, // .bind('fileuploadchunkfail', func); + + // Callback for completed (success, abort or error) chunk upload requests: + // chunkalways: function (e, data) {}, // .bind('fileuploadchunkalways', func); + + // The plugin options are used as settings object for the ajax calls. + // The following are jQuery ajax settings required for the file uploads: + processData: false, + contentType: false, + cache: false + }, + + // A list of options that require reinitializing event listeners and/or + // special initialization code: + _specialOptions: [ + 'fileInput', + 'dropZone', + 'pasteZone', + 'multipart', + 'forceIframeTransport' + ], + + _blobSlice: $.support.blobSlice && function () { + var slice = this.slice || this.webkitSlice || this.mozSlice; + return slice.apply(this, arguments); + }, + + _BitrateTimer: function () { + this.timestamp = ((Date.now) ? Date.now() : (new Date()).getTime()); + this.loaded = 0; + this.bitrate = 0; + this.getBitrate = function (now, loaded, interval) { + var timeDiff = now - this.timestamp; + if (!this.bitrate || !interval || timeDiff > interval) { + this.bitrate = (loaded - this.loaded) * (1000 / timeDiff) * 8; + this.loaded = loaded; + this.timestamp = now; + } + return this.bitrate; + }; + }, + + _isXHRUpload: function (options) { + return !options.forceIframeTransport && + ((!options.multipart && $.support.xhrFileUpload) || + $.support.xhrFormDataFileUpload); + }, + + _getFormData: function (options) { + var formData; + if ($.type(options.formData) === 'function') { + return options.formData(options.form); + } + if ($.isArray(options.formData)) { + return options.formData; + } + if ($.type(options.formData) === 'object') { + formData = []; + $.each(options.formData, function (name, value) { + formData.push({name: name, value: value}); + }); + return formData; + } + return []; + }, + + _getTotal: function (files) { + var total = 0; + $.each(files, function (index, file) { + total += file.size || 1; + }); + return total; + }, + + _initProgressObject: function (obj) { + var progress = { + loaded: 0, + total: 0, + bitrate: 0 + }; + if (obj._progress) { + $.extend(obj._progress, progress); + } else { + obj._progress = progress; + } + }, + + _initResponseObject: function (obj) { + var prop; + if (obj._response) { + for (prop in obj._response) { + if (obj._response.hasOwnProperty(prop)) { + delete obj._response[prop]; + } + } + } else { + obj._response = {}; + } + }, + + _onProgress: function (e, data) { + if (e.lengthComputable) { + var now = ((Date.now) ? Date.now() : (new Date()).getTime()), + loaded; + if (data._time && data.progressInterval && + (now - data._time < data.progressInterval) && + e.loaded !== e.total) { + return; + } + data._time = now; + loaded = Math.floor( + e.loaded / e.total * (data.chunkSize || data._progress.total) + ) + (data.uploadedBytes || 0); + // Add the difference from the previously loaded state + // to the global loaded counter: + this._progress.loaded += (loaded - data._progress.loaded); + this._progress.bitrate = this._bitrateTimer.getBitrate( + now, + this._progress.loaded, + data.bitrateInterval + ); + data._progress.loaded = data.loaded = loaded; + data._progress.bitrate = data.bitrate = data._bitrateTimer.getBitrate( + now, + loaded, + data.bitrateInterval + ); + // Trigger a custom progress event with a total data property set + // to the file size(s) of the current upload and a loaded data + // property calculated accordingly: + this._trigger( + 'progress', + $.Event('progress', {delegatedEvent: e}), + data + ); + // Trigger a global progress event for all current file uploads, + // including ajax calls queued for sequential file uploads: + this._trigger( + 'progressall', + $.Event('progressall', {delegatedEvent: e}), + this._progress + ); + } + }, + + _initProgressListener: function (options) { + var that = this, + xhr = options.xhr ? options.xhr() : $.ajaxSettings.xhr(); + // Accesss to the native XHR object is required to add event listeners + // for the upload progress event: + if (xhr.upload) { + $(xhr.upload).bind('progress', function (e) { + var oe = e.originalEvent; + // Make sure the progress event properties get copied over: + e.lengthComputable = oe.lengthComputable; + e.loaded = oe.loaded; + e.total = oe.total; + that._onProgress(e, options); + }); + options.xhr = function () { + return xhr; + }; + } + }, + + _isInstanceOf: function (type, obj) { + // Cross-frame instanceof check + return Object.prototype.toString.call(obj) === '[object ' + type + ']'; + }, + + _initXHRData: function (options) { + var that = this, + formData, + file = options.files[0], + // Ignore non-multipart setting if not supported: + multipart = options.multipart || !$.support.xhrFileUpload, + paramName = $.type(options.paramName) === 'array' ? + options.paramName[0] : options.paramName; + options.headers = $.extend({}, options.headers); + if (options.contentRange) { + options.headers['Content-Range'] = options.contentRange; + } + if (!multipart || options.blob || !this._isInstanceOf('File', file)) { + options.headers['Content-Disposition'] = 'attachment; filename="' + + encodeURI(file.name) + '"'; + } + if (!multipart) { + options.contentType = file.type || 'application/octet-stream'; + options.data = options.blob || file; + } else if ($.support.xhrFormDataFileUpload) { + if (options.postMessage) { + // window.postMessage does not allow sending FormData + // objects, so we just add the File/Blob objects to + // the formData array and let the postMessage window + // create the FormData object out of this array: + formData = this._getFormData(options); + if (options.blob) { + formData.push({ + name: paramName, + value: options.blob + }); + } else { + $.each(options.files, function (index, file) { + formData.push({ + name: ($.type(options.paramName) === 'array' && + options.paramName[index]) || paramName, + value: file + }); + }); + } + } else { + if (that._isInstanceOf('FormData', options.formData)) { + formData = options.formData; + } else { + formData = new FormData(); + $.each(this._getFormData(options), function (index, field) { + formData.append(field.name, field.value); + }); + } + if (options.blob) { + formData.append(paramName, options.blob, file.name); + } else { + $.each(options.files, function (index, file) { + // This check allows the tests to run with + // dummy objects: + if (that._isInstanceOf('File', file) || + that._isInstanceOf('Blob', file)) { + formData.append( + ($.type(options.paramName) === 'array' && + options.paramName[index]) || paramName, + file, + file.uploadName || file.name + ); + } + }); + } + } + options.data = formData; + } + // Blob reference is not needed anymore, free memory: + options.blob = null; + }, + + _initIframeSettings: function (options) { + var targetHost = $('<a></a>').prop('href', options.url).prop('host'); + // Setting the dataType to iframe enables the iframe transport: + options.dataType = 'iframe ' + (options.dataType || ''); + // The iframe transport accepts a serialized array as form data: + options.formData = this._getFormData(options); + // Add redirect url to form data on cross-domain uploads: + if (options.redirect && targetHost && targetHost !== location.host) { + options.formData.push({ + name: options.redirectParamName || 'redirect', + value: options.redirect + }); + } + }, + + _initDataSettings: function (options) { + if (this._isXHRUpload(options)) { + if (!this._chunkedUpload(options, true)) { + if (!options.data) { + this._initXHRData(options); + } + this._initProgressListener(options); + } + if (options.postMessage) { + // Setting the dataType to postmessage enables the + // postMessage transport: + options.dataType = 'postmessage ' + (options.dataType || ''); + } + } else { + this._initIframeSettings(options); + } + }, + + _getParamName: function (options) { + var fileInput = $(options.fileInput), + paramName = options.paramName; + if (!paramName) { + paramName = []; + fileInput.each(function () { + var input = $(this), + name = input.prop('name') || 'files[]', + i = (input.prop('files') || [1]).length; + while (i) { + paramName.push(name); + i -= 1; + } + }); + if (!paramName.length) { + paramName = [fileInput.prop('name') || 'files[]']; + } + } else if (!$.isArray(paramName)) { + paramName = [paramName]; + } + return paramName; + }, + + _initFormSettings: function (options) { + // Retrieve missing options from the input field and the + // associated form, if available: + if (!options.form || !options.form.length) { + options.form = $(options.fileInput.prop('form')); + // If the given file input doesn't have an associated form, + // use the default widget file input's form: + if (!options.form.length) { + options.form = $(this.options.fileInput.prop('form')); + } + } + options.paramName = this._getParamName(options); + if (!options.url) { + options.url = options.form.prop('action') || location.href; + } + // The HTTP request method must be "POST" or "PUT": + options.type = (options.type || + ($.type(options.form.prop('method')) === 'string' && + options.form.prop('method')) || '' + ).toUpperCase(); + if (options.type !== 'POST' && options.type !== 'PUT' && + options.type !== 'PATCH') { + options.type = 'POST'; + } + if (!options.formAcceptCharset) { + options.formAcceptCharset = options.form.attr('accept-charset'); + } + }, + + _getAJAXSettings: function (data) { + var options = $.extend({}, this.options, data); + this._initFormSettings(options); + this._initDataSettings(options); + return options; + }, + + // jQuery 1.6 doesn't provide .state(), + // while jQuery 1.8+ removed .isRejected() and .isResolved(): + _getDeferredState: function (deferred) { + if (deferred.state) { + return deferred.state(); + } + if (deferred.isResolved()) { + return 'resolved'; + } + if (deferred.isRejected()) { + return 'rejected'; + } + return 'pending'; + }, + + // Maps jqXHR callbacks to the equivalent + // methods of the given Promise object: + _enhancePromise: function (promise) { + promise.success = promise.done; + promise.error = promise.fail; + promise.complete = promise.always; + return promise; + }, + + // Creates and returns a Promise object enhanced with + // the jqXHR methods abort, success, error and complete: + _getXHRPromise: function (resolveOrReject, context, args) { + var dfd = $.Deferred(), + promise = dfd.promise(); + context = context || this.options.context || promise; + if (resolveOrReject === true) { + dfd.resolveWith(context, args); + } else if (resolveOrReject === false) { + dfd.rejectWith(context, args); + } + promise.abort = dfd.promise; + return this._enhancePromise(promise); + }, + + // Adds convenience methods to the data callback argument: + _addConvenienceMethods: function (e, data) { + var that = this, + getPromise = function (args) { + return $.Deferred().resolveWith(that, args).promise(); + }; + data.process = function (resolveFunc, rejectFunc) { + if (resolveFunc || rejectFunc) { + data._processQueue = this._processQueue = + (this._processQueue || getPromise([this])).pipe( + function () { + if (data.errorThrown) { + return $.Deferred() + .rejectWith(that, [data]).promise(); + } + return getPromise(arguments); + } + ).pipe(resolveFunc, rejectFunc); + } + return this._processQueue || getPromise([this]); + }; + data.submit = function () { + if (this.state() !== 'pending') { + data.jqXHR = this.jqXHR = + (that._trigger( + 'submit', + $.Event('submit', {delegatedEvent: e}), + this + ) !== false) && that._onSend(e, this); + } + return this.jqXHR || that._getXHRPromise(); + }; + data.abort = function () { + if (this.jqXHR) { + return this.jqXHR.abort(); + } + this.errorThrown = 'abort'; + that._trigger('fail', null, this); + return that._getXHRPromise(false); + }; + data.state = function () { + if (this.jqXHR) { + return that._getDeferredState(this.jqXHR); + } + if (this._processQueue) { + return that._getDeferredState(this._processQueue); + } + }; + data.processing = function () { + return !this.jqXHR && this._processQueue && that + ._getDeferredState(this._processQueue) === 'pending'; + }; + data.progress = function () { + return this._progress; + }; + data.response = function () { + return this._response; + }; + }, + + // Parses the Range header from the server response + // and returns the uploaded bytes: + _getUploadedBytes: function (jqXHR) { + var range = jqXHR.getResponseHeader('Range'), + parts = range && range.split('-'), + upperBytesPos = parts && parts.length > 1 && + parseInt(parts[1], 10); + return upperBytesPos && upperBytesPos + 1; + }, + + // Uploads a file in multiple, sequential requests + // by splitting the file up in multiple blob chunks. + // If the second parameter is true, only tests if the file + // should be uploaded in chunks, but does not invoke any + // upload requests: + _chunkedUpload: function (options, testOnly) { + options.uploadedBytes = options.uploadedBytes || 0; + var that = this, + file = options.files[0], + fs = file.size, + ub = options.uploadedBytes, + mcs = options.maxChunkSize || fs, + slice = this._blobSlice, + dfd = $.Deferred(), + promise = dfd.promise(), + jqXHR, + upload; + if (!(this._isXHRUpload(options) && slice && (ub || mcs < fs)) || + options.data) { + return false; + } + if (testOnly) { + return true; + } + if (ub >= fs) { + file.error = options.i18n('uploadedBytes'); + return this._getXHRPromise( + false, + options.context, + [null, 'error', file.error] + ); + } + // The chunk upload method: + upload = function () { + // Clone the options object for each chunk upload: + var o = $.extend({}, options), + currentLoaded = o._progress.loaded; + o.blob = slice.call( + file, + ub, + ub + mcs, + file.type + ); + // Store the current chunk size, as the blob itself + // will be dereferenced after data processing: + o.chunkSize = o.blob.size; + // Expose the chunk bytes position range: + o.contentRange = 'bytes ' + ub + '-' + + (ub + o.chunkSize - 1) + '/' + fs; + // Process the upload data (the blob and potential form data): + that._initXHRData(o); + // Add progress listeners for this chunk upload: + that._initProgressListener(o); + jqXHR = ((that._trigger('chunksend', null, o) !== false && $.ajax(o)) || + that._getXHRPromise(false, o.context)) + .done(function (result, textStatus, jqXHR) { + ub = that._getUploadedBytes(jqXHR) || + (ub + o.chunkSize); + // Create a progress event if no final progress event + // with loaded equaling total has been triggered + // for this chunk: + if (currentLoaded + o.chunkSize - o._progress.loaded) { + that._onProgress($.Event('progress', { + lengthComputable: true, + loaded: ub - o.uploadedBytes, + total: ub - o.uploadedBytes + }), o); + } + options.uploadedBytes = o.uploadedBytes = ub; + o.result = result; + o.textStatus = textStatus; + o.jqXHR = jqXHR; + that._trigger('chunkdone', null, o); + that._trigger('chunkalways', null, o); + if (ub < fs) { + // File upload not yet complete, + // continue with the next chunk: + upload(); + } else { + dfd.resolveWith( + o.context, + [result, textStatus, jqXHR] + ); + } + }) + .fail(function (jqXHR, textStatus, errorThrown) { + o.jqXHR = jqXHR; + o.textStatus = textStatus; + o.errorThrown = errorThrown; + that._trigger('chunkfail', null, o); + that._trigger('chunkalways', null, o); + dfd.rejectWith( + o.context, + [jqXHR, textStatus, errorThrown] + ); + }); + }; + this._enhancePromise(promise); + promise.abort = function () { + return jqXHR.abort(); + }; + upload(); + return promise; + }, + + _beforeSend: function (e, data) { + if (this._active === 0) { + // the start callback is triggered when an upload starts + // and no other uploads are currently running, + // equivalent to the global ajaxStart event: + this._trigger('start'); + // Set timer for global bitrate progress calculation: + this._bitrateTimer = new this._BitrateTimer(); + // Reset the global progress values: + this._progress.loaded = this._progress.total = 0; + this._progress.bitrate = 0; + } + // Make sure the container objects for the .response() and + // .progress() methods on the data object are available + // and reset to their initial state: + this._initResponseObject(data); + this._initProgressObject(data); + data._progress.loaded = data.loaded = data.uploadedBytes || 0; + data._progress.total = data.total = this._getTotal(data.files) || 1; + data._progress.bitrate = data.bitrate = 0; + this._active += 1; + // Initialize the global progress values: + this._progress.loaded += data.loaded; + this._progress.total += data.total; + }, + + _onDone: function (result, textStatus, jqXHR, options) { + var total = options._progress.total, + response = options._response; + if (options._progress.loaded < total) { + // Create a progress event if no final progress event + // with loaded equaling total has been triggered: + this._onProgress($.Event('progress', { + lengthComputable: true, + loaded: total, + total: total + }), options); + } + response.result = options.result = result; + response.textStatus = options.textStatus = textStatus; + response.jqXHR = options.jqXHR = jqXHR; + this._trigger('done', null, options); + }, + + _onFail: function (jqXHR, textStatus, errorThrown, options) { + var response = options._response; + if (options.recalculateProgress) { + // Remove the failed (error or abort) file upload from + // the global progress calculation: + this._progress.loaded -= options._progress.loaded; + this._progress.total -= options._progress.total; + } + response.jqXHR = options.jqXHR = jqXHR; + response.textStatus = options.textStatus = textStatus; + response.errorThrown = options.errorThrown = errorThrown; + this._trigger('fail', null, options); + }, + + _onAlways: function (jqXHRorResult, textStatus, jqXHRorError, options) { + // jqXHRorResult, textStatus and jqXHRorError are added to the + // options object via done and fail callbacks + this._trigger('always', null, options); + }, + + _onSend: function (e, data) { + if (!data.submit) { + this._addConvenienceMethods(e, data); + } + var that = this, + jqXHR, + aborted, + slot, + pipe, + options = that._getAJAXSettings(data), + send = function () { + that._sending += 1; + // Set timer for bitrate progress calculation: + options._bitrateTimer = new that._BitrateTimer(); + jqXHR = jqXHR || ( + ((aborted || that._trigger( + 'send', + $.Event('send', {delegatedEvent: e}), + options + ) === false) && + that._getXHRPromise(false, options.context, aborted)) || + that._chunkedUpload(options) || $.ajax(options) + ).done(function (result, textStatus, jqXHR) { + that._onDone(result, textStatus, jqXHR, options); + }).fail(function (jqXHR, textStatus, errorThrown) { + that._onFail(jqXHR, textStatus, errorThrown, options); + }).always(function (jqXHRorResult, textStatus, jqXHRorError) { + that._onAlways( + jqXHRorResult, + textStatus, + jqXHRorError, + options + ); + that._sending -= 1; + that._active -= 1; + if (options.limitConcurrentUploads && + options.limitConcurrentUploads > that._sending) { + // Start the next queued upload, + // that has not been aborted: + var nextSlot = that._slots.shift(); + while (nextSlot) { + if (that._getDeferredState(nextSlot) === 'pending') { + nextSlot.resolve(); + break; + } + nextSlot = that._slots.shift(); + } + } + if (that._active === 0) { + // The stop callback is triggered when all uploads have + // been completed, equivalent to the global ajaxStop event: + that._trigger('stop'); + } + }); + return jqXHR; + }; + this._beforeSend(e, options); + if (this.options.sequentialUploads || + (this.options.limitConcurrentUploads && + this.options.limitConcurrentUploads <= this._sending)) { + if (this.options.limitConcurrentUploads > 1) { + slot = $.Deferred(); + this._slots.push(slot); + pipe = slot.pipe(send); + } else { + this._sequence = this._sequence.pipe(send, send); + pipe = this._sequence; + } + // Return the piped Promise object, enhanced with an abort method, + // which is delegated to the jqXHR object of the current upload, + // and jqXHR callbacks mapped to the equivalent Promise methods: + pipe.abort = function () { + aborted = [undefined, 'abort', 'abort']; + if (!jqXHR) { + if (slot) { + slot.rejectWith(options.context, aborted); + } + return send(); + } + return jqXHR.abort(); + }; + return this._enhancePromise(pipe); + } + return send(); + }, + + _onAdd: function (e, data) { + var that = this, + result = true, + options = $.extend({}, this.options, data), + files = data.files, + filesLength = files.length, + limit = options.limitMultiFileUploads, + limitSize = options.limitMultiFileUploadSize, + overhead = options.limitMultiFileUploadSizeOverhead, + batchSize = 0, + paramName = this._getParamName(options), + paramNameSet, + paramNameSlice, + fileSet, + i, + j = 0; + if (limitSize && (!filesLength || files[0].size === undefined)) { + limitSize = undefined; + } + if (!(options.singleFileUploads || limit || limitSize) || + !this._isXHRUpload(options)) { + fileSet = [files]; + paramNameSet = [paramName]; + } else if (!(options.singleFileUploads || limitSize) && limit) { + fileSet = []; + paramNameSet = []; + for (i = 0; i < filesLength; i += limit) { + fileSet.push(files.slice(i, i + limit)); + paramNameSlice = paramName.slice(i, i + limit); + if (!paramNameSlice.length) { + paramNameSlice = paramName; + } + paramNameSet.push(paramNameSlice); + } + } else if (!options.singleFileUploads && limitSize) { + fileSet = []; + paramNameSet = []; + for (i = 0; i < filesLength; i = i + 1) { + batchSize += files[i].size + overhead; + if (i + 1 === filesLength || + ((batchSize + files[i + 1].size + overhead) > limitSize) || + (limit && i + 1 - j >= limit)) { + fileSet.push(files.slice(j, i + 1)); + paramNameSlice = paramName.slice(j, i + 1); + if (!paramNameSlice.length) { + paramNameSlice = paramName; + } + paramNameSet.push(paramNameSlice); + j = i + 1; + batchSize = 0; + } + } + } else { + paramNameSet = paramName; + } + data.originalFiles = files; + $.each(fileSet || files, function (index, element) { + var newData = $.extend({}, data); + newData.files = fileSet ? element : [element]; + newData.paramName = paramNameSet[index]; + that._initResponseObject(newData); + that._initProgressObject(newData); + that._addConvenienceMethods(e, newData); + result = that._trigger( + 'add', + $.Event('add', {delegatedEvent: e}), + newData + ); + return result; + }); + return result; + }, + + _replaceFileInput: function (input) { + var inputClone = input.clone(true); + $('<form></form>').append(inputClone)[0].reset(); + // Detaching allows to insert the fileInput on another form + // without loosing the file input value: + input.after(inputClone).detach(); + // Avoid memory leaks with the detached file input: + $.cleanData(input.unbind('remove')); + // Replace the original file input element in the fileInput + // elements set with the clone, which has been copied including + // event handlers: + this.options.fileInput = this.options.fileInput.map(function (i, el) { + if (el === input[0]) { + return inputClone[0]; + } + return el; + }); + // If the widget has been initialized on the file input itself, + // override this.element with the file input clone: + if (input[0] === this.element[0]) { + this.element = inputClone; + } + }, + + _handleFileTreeEntry: function (entry, path) { + var that = this, + dfd = $.Deferred(), + errorHandler = function (e) { + if (e && !e.entry) { + e.entry = entry; + } + // Since $.when returns immediately if one + // Deferred is rejected, we use resolve instead. + // This allows valid files and invalid items + // to be returned together in one set: + dfd.resolve([e]); + }, + dirReader; + path = path || ''; + if (entry.isFile) { + if (entry._file) { + // Workaround for Chrome bug #149735 + entry._file.relativePath = path; + dfd.resolve(entry._file); + } else { + entry.file(function (file) { + file.relativePath = path; + dfd.resolve(file); + }, errorHandler); + } + } else if (entry.isDirectory) { + dirReader = entry.createReader(); + dirReader.readEntries(function (entries) { + that._handleFileTreeEntries( + entries, + path + entry.name + '/' + ).done(function (files) { + dfd.resolve(files); + }).fail(errorHandler); + }, errorHandler); + } else { + // Return an empy list for file system items + // other than files or directories: + dfd.resolve([]); + } + return dfd.promise(); + }, + + _handleFileTreeEntries: function (entries, path) { + var that = this; + return $.when.apply( + $, + $.map(entries, function (entry) { + return that._handleFileTreeEntry(entry, path); + }) + ).pipe(function () { + return Array.prototype.concat.apply( + [], + arguments + ); + }); + }, + + _getDroppedFiles: function (dataTransfer) { + dataTransfer = dataTransfer || {}; + var items = dataTransfer.items; + if (items && items.length && (items[0].webkitGetAsEntry || + items[0].getAsEntry)) { + return this._handleFileTreeEntries( + $.map(items, function (item) { + var entry; + if (item.webkitGetAsEntry) { + entry = item.webkitGetAsEntry(); + if (entry) { + // Workaround for Chrome bug #149735: + entry._file = item.getAsFile(); + } + return entry; + } + return item.getAsEntry(); + }) + ); + } + return $.Deferred().resolve( + $.makeArray(dataTransfer.files) + ).promise(); + }, + + _getSingleFileInputFiles: function (fileInput) { + fileInput = $(fileInput); + var entries = fileInput.prop('webkitEntries') || + fileInput.prop('entries'), + files, + value; + if (entries && entries.length) { + return this._handleFileTreeEntries(entries); + } + files = $.makeArray(fileInput.prop('files')); + if (!files.length) { + value = fileInput.prop('value'); + if (!value) { + return $.Deferred().resolve([]).promise(); + } + // If the files property is not available, the browser does not + // support the File API and we add a pseudo File object with + // the input value as name with path information removed: + files = [{name: value.replace(/^.*\\/, '')}]; + } else if (files[0].name === undefined && files[0].fileName) { + // File normalization for Safari 4 and Firefox 3: + $.each(files, function (index, file) { + file.name = file.fileName; + file.size = file.fileSize; + }); + } + return $.Deferred().resolve(files).promise(); + }, + + _getFileInputFiles: function (fileInput) { + if (!(fileInput instanceof $) || fileInput.length === 1) { + return this._getSingleFileInputFiles(fileInput); + } + return $.when.apply( + $, + $.map(fileInput, this._getSingleFileInputFiles) + ).pipe(function () { + return Array.prototype.concat.apply( + [], + arguments + ); + }); + }, + + _onChange: function (e) { + var that = this, + data = { + fileInput: $(e.target), + form: $(e.target.form) + }; + this._getFileInputFiles(data.fileInput).always(function (files) { + data.files = files; + if (that.options.replaceFileInput) { + that._replaceFileInput(data.fileInput); + } + if (that._trigger( + 'change', + $.Event('change', {delegatedEvent: e}), + data + ) !== false) { + that._onAdd(e, data); + } + }); + }, + + _onPaste: function (e) { + var items = e.originalEvent && e.originalEvent.clipboardData && + e.originalEvent.clipboardData.items, + data = {files: []}; + if (items && items.length) { + $.each(items, function (index, item) { + var file = item.getAsFile && item.getAsFile(); + if (file) { + data.files.push(file); + } + }); + if (this._trigger( + 'paste', + $.Event('paste', {delegatedEvent: e}), + data + ) !== false) { + this._onAdd(e, data); + } + } + }, + + _onDrop: function (e) { + e.dataTransfer = e.originalEvent && e.originalEvent.dataTransfer; + var that = this, + dataTransfer = e.dataTransfer, + data = {}; + if (dataTransfer && dataTransfer.files && dataTransfer.files.length) { + e.preventDefault(); + this._getDroppedFiles(dataTransfer).always(function (files) { + data.files = files; + if (that._trigger( + 'drop', + $.Event('drop', {delegatedEvent: e}), + data + ) !== false) { + that._onAdd(e, data); + } + }); + } + }, + + _onDragOver: function (e) { + e.dataTransfer = e.originalEvent && e.originalEvent.dataTransfer; + var dataTransfer = e.dataTransfer; + if (dataTransfer && $.inArray('Files', dataTransfer.types) !== -1 && + this._trigger( + 'dragover', + $.Event('dragover', {delegatedEvent: e}) + ) !== false) { + e.preventDefault(); + dataTransfer.dropEffect = 'copy'; + } + }, + + _initEventHandlers: function () { + if (this._isXHRUpload(this.options)) { + this._on(this.options.dropZone, { + dragover: this._onDragOver, + drop: this._onDrop + }); + this._on(this.options.pasteZone, { + paste: this._onPaste + }); + } + if ($.support.fileInput) { + this._on(this.options.fileInput, { + change: this._onChange + }); + } + }, + + _destroyEventHandlers: function () { + this._off(this.options.dropZone, 'dragover drop'); + this._off(this.options.pasteZone, 'paste'); + this._off(this.options.fileInput, 'change'); + }, + + _setOption: function (key, value) { + var reinit = $.inArray(key, this._specialOptions) !== -1; + if (reinit) { + this._destroyEventHandlers(); + } + this._super(key, value); + if (reinit) { + this._initSpecialOptions(); + this._initEventHandlers(); + } + }, + + _initSpecialOptions: function () { + var options = this.options; + if (options.fileInput === undefined) { + options.fileInput = this.element.is('input[type="file"]') ? + this.element : this.element.find('input[type="file"]'); + } else if (!(options.fileInput instanceof $)) { + options.fileInput = $(options.fileInput); + } + if (!(options.dropZone instanceof $)) { + options.dropZone = $(options.dropZone); + } + if (!(options.pasteZone instanceof $)) { + options.pasteZone = $(options.pasteZone); + } + }, + + _getRegExp: function (str) { + var parts = str.split('/'), + modifiers = parts.pop(); + parts.shift(); + return new RegExp(parts.join('/'), modifiers); + }, + + _isRegExpOption: function (key, value) { + return key !== 'url' && $.type(value) === 'string' && + /^\/.*\/[igm]{0,3}$/.test(value); + }, + + _initDataAttributes: function () { + var that = this, + options = this.options, + clone = $(this.element[0].cloneNode(false)); + // Initialize options set via HTML5 data-attributes: + $.each( + clone.data(), + function (key, value) { + var dataAttributeName = 'data-' + + // Convert camelCase to hyphen-ated key: + key.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase(); + if (clone.attr(dataAttributeName)) { + if (that._isRegExpOption(key, value)) { + value = that._getRegExp(value); + } + options[key] = value; + } + } + ); + }, + + _create: function () { + this._initDataAttributes(); + this._initSpecialOptions(); + this._slots = []; + this._sequence = this._getXHRPromise(true); + this._sending = this._active = 0; + this._initProgressObject(this); + this._initEventHandlers(); + }, + + // This method is exposed to the widget API and allows to query + // the number of active uploads: + active: function () { + return this._active; + }, + + // This method is exposed to the widget API and allows to query + // the widget upload progress. + // It returns an object with loaded, total and bitrate properties + // for the running uploads: + progress: function () { + return this._progress; + }, + + // This method is exposed to the widget API and allows adding files + // using the fileupload API. The data parameter accepts an object which + // must have a files property and can contain additional options: + // .fileupload('add', {files: filesList}); + add: function (data) { + var that = this; + if (!data || this.options.disabled) { + return; + } + if (data.fileInput && !data.files) { + this._getFileInputFiles(data.fileInput).always(function (files) { + data.files = files; + that._onAdd(null, data); + }); + } else { + data.files = $.makeArray(data.files); + this._onAdd(null, data); + } + }, + + // This method is exposed to the widget API and allows sending files + // using the fileupload API. The data parameter accepts an object which + // must have a files or fileInput property and can contain additional options: + // .fileupload('send', {files: filesList}); + // The method returns a Promise object for the file upload call. + send: function (data) { + if (data && !this.options.disabled) { + if (data.fileInput && !data.files) { + var that = this, + dfd = $.Deferred(), + promise = dfd.promise(), + jqXHR, + aborted; + promise.abort = function () { + aborted = true; + if (jqXHR) { + return jqXHR.abort(); + } + dfd.reject(null, 'abort', 'abort'); + return promise; + }; + this._getFileInputFiles(data.fileInput).always( + function (files) { + if (aborted) { + return; + } + if (!files.length) { + dfd.reject(); + return; + } + data.files = files; + jqXHR = that._onSend(null, data).then( + function (result, textStatus, jqXHR) { + dfd.resolve(result, textStatus, jqXHR); + }, + function (jqXHR, textStatus, errorThrown) { + dfd.reject(jqXHR, textStatus, errorThrown); + } + ); + } + ); + return this._enhancePromise(promise); + } + data.files = $.makeArray(data.files); + if (data.files.length) { + return this._onSend(null, data); + } + } + return this._getXHRPromise(false, data && data.context); + } + + }); + +})); diff --git a/wagtail/wagtailimages/static/wagtailimages/js/vendor/jquery.iframe-transport.js b/wagtail/wagtailimages/static/wagtailimages/js/vendor/jquery.iframe-transport.js new file mode 100644 index 000000000..8d64b591b --- /dev/null +++ b/wagtail/wagtailimages/static/wagtailimages/js/vendor/jquery.iframe-transport.js @@ -0,0 +1,214 @@ +/* + * jQuery Iframe Transport Plugin 1.8.2 + * https://github.com/blueimp/jQuery-File-Upload + * + * Copyright 2011, Sebastian Tschan + * https://blueimp.net + * + * Licensed under the MIT license: + * http://www.opensource.org/licenses/MIT + */ + +/* global define, window, document */ + +(function (factory) { + 'use strict'; + if (typeof define === 'function' && define.amd) { + // Register as an anonymous AMD module: + define(['jquery'], factory); + } else { + // Browser globals: + factory(window.jQuery); + } +}(function ($) { + 'use strict'; + + // Helper variable to create unique names for the transport iframes: + var counter = 0; + + // The iframe transport accepts four additional options: + // options.fileInput: a jQuery collection of file input fields + // options.paramName: the parameter name for the file form data, + // overrides the name property of the file input field(s), + // can be a string or an array of strings. + // options.formData: an array of objects with name and value properties, + // equivalent to the return data of .serializeArray(), e.g.: + // [{name: 'a', value: 1}, {name: 'b', value: 2}] + // options.initialIframeSrc: the URL of the initial iframe src, + // by default set to "javascript:false;" + $.ajaxTransport('iframe', function (options) { + if (options.async) { + // javascript:false as initial iframe src + // prevents warning popups on HTTPS in IE6: + /*jshint scripturl: true */ + var initialIframeSrc = options.initialIframeSrc || 'javascript:false;', + /*jshint scripturl: false */ + form, + iframe, + addParamChar; + return { + send: function (_, completeCallback) { + form = $('<form style="display:none;"></form>'); + form.attr('accept-charset', options.formAcceptCharset); + addParamChar = /\?/.test(options.url) ? '&' : '?'; + // XDomainRequest only supports GET and POST: + if (options.type === 'DELETE') { + options.url = options.url + addParamChar + '_method=DELETE'; + options.type = 'POST'; + } else if (options.type === 'PUT') { + options.url = options.url + addParamChar + '_method=PUT'; + options.type = 'POST'; + } else if (options.type === 'PATCH') { + options.url = options.url + addParamChar + '_method=PATCH'; + options.type = 'POST'; + } + // IE versions below IE8 cannot set the name property of + // elements that have already been added to the DOM, + // so we set the name along with the iframe HTML markup: + counter += 1; + iframe = $( + '<iframe src="' + initialIframeSrc + + '" name="iframe-transport-' + counter + '"></iframe>' + ).bind('load', function () { + var fileInputClones, + paramNames = $.isArray(options.paramName) ? + options.paramName : [options.paramName]; + iframe + .unbind('load') + .bind('load', function () { + var response; + // Wrap in a try/catch block to catch exceptions thrown + // when trying to access cross-domain iframe contents: + try { + response = iframe.contents(); + // Google Chrome and Firefox do not throw an + // exception when calling iframe.contents() on + // cross-domain requests, so we unify the response: + if (!response.length || !response[0].firstChild) { + throw new Error(); + } + } catch (e) { + response = undefined; + } + // The complete callback returns the + // iframe content document as response object: + completeCallback( + 200, + 'success', + {'iframe': response} + ); + // Fix for IE endless progress bar activity bug + // (happens on form submits to iframe targets): + $('<iframe src="' + initialIframeSrc + '"></iframe>') + .appendTo(form); + window.setTimeout(function () { + // Removing the form in a setTimeout call + // allows Chrome's developer tools to display + // the response result + form.remove(); + }, 0); + }); + form + .prop('target', iframe.prop('name')) + .prop('action', options.url) + .prop('method', options.type); + if (options.formData) { + $.each(options.formData, function (index, field) { + $('<input type="hidden"/>') + .prop('name', field.name) + .val(field.value) + .appendTo(form); + }); + } + if (options.fileInput && options.fileInput.length && + options.type === 'POST') { + fileInputClones = options.fileInput.clone(); + // Insert a clone for each file input field: + options.fileInput.after(function (index) { + return fileInputClones[index]; + }); + if (options.paramName) { + options.fileInput.each(function (index) { + $(this).prop( + 'name', + paramNames[index] || options.paramName + ); + }); + } + // Appending the file input fields to the hidden form + // removes them from their original location: + form + .append(options.fileInput) + .prop('enctype', 'multipart/form-data') + // enctype must be set as encoding for IE: + .prop('encoding', 'multipart/form-data'); + // Remove the HTML5 form attribute from the input(s): + options.fileInput.removeAttr('form'); + } + form.submit(); + // Insert the file input fields at their original location + // by replacing the clones with the originals: + if (fileInputClones && fileInputClones.length) { + options.fileInput.each(function (index, input) { + var clone = $(fileInputClones[index]); + // Restore the original name and form properties: + $(input) + .prop('name', clone.prop('name')) + .attr('form', clone.attr('form')); + clone.replaceWith(input); + }); + } + }); + form.append(iframe).appendTo(document.body); + }, + abort: function () { + if (iframe) { + // javascript:false as iframe src aborts the request + // and prevents warning popups on HTTPS in IE6. + // concat is used to avoid the "Script URL" JSLint error: + iframe + .unbind('load') + .prop('src', initialIframeSrc); + } + if (form) { + form.remove(); + } + } + }; + } + }); + + // The iframe transport returns the iframe content document as response. + // The following adds converters from iframe to text, json, html, xml + // and script. + // Please note that the Content-Type for JSON responses has to be text/plain + // or text/html, if the browser doesn't include application/json in the + // Accept header, else IE will show a download dialog. + // The Content-Type for XML responses on the other hand has to be always + // application/xml or text/xml, so IE properly parses the XML response. + // See also + // https://github.com/blueimp/jQuery-File-Upload/wiki/Setup#content-type-negotiation + $.ajaxSetup({ + converters: { + 'iframe text': function (iframe) { + return iframe && $(iframe[0].body).text(); + }, + 'iframe json': function (iframe) { + return iframe && $.parseJSON($(iframe[0].body).text()); + }, + 'iframe html': function (iframe) { + return iframe && $(iframe[0].body).html(); + }, + 'iframe xml': function (iframe) { + var xmlDoc = iframe && iframe[0]; + return xmlDoc && $.isXMLDoc(xmlDoc) ? xmlDoc : + $.parseXML((xmlDoc.XMLDocument && xmlDoc.XMLDocument.xml) || + $(xmlDoc.body).html()); + }, + 'iframe script': function (iframe) { + return iframe && $.globalEval($(iframe[0].body).text()); + } + } + }); + +})); diff --git a/wagtail/wagtailimages/static/wagtailimages/js/vendor/load-image.min.js b/wagtail/wagtailimages/static/wagtailimages/js/vendor/load-image.min.js new file mode 100644 index 000000000..09f387348 --- /dev/null +++ b/wagtail/wagtailimages/static/wagtailimages/js/vendor/load-image.min.js @@ -0,0 +1 @@ +!function(a){"use strict";var b=function(a,c,d){var e,f,g=document.createElement("img");if(g.onerror=c,g.onload=function(){!f||d&&d.noRevoke||b.revokeObjectURL(f),c&&c(b.scale(g,d))},b.isInstanceOf("Blob",a)||b.isInstanceOf("File",a))e=f=b.createObjectURL(a),g._type=a.type;else{if("string"!=typeof a)return!1;e=a,d&&d.crossOrigin&&(g.crossOrigin=d.crossOrigin)}return e?(g.src=e,g):b.readFile(a,function(a){var b=a.target;b&&b.result?g.src=b.result:c&&c(a)})},c=window.createObjectURL&&window||window.URL&&URL.revokeObjectURL&&URL||window.webkitURL&&webkitURL;b.isInstanceOf=function(a,b){return Object.prototype.toString.call(b)==="[object "+a+"]"},b.transformCoordinates=function(){},b.getTransformedOptions=function(a){return a},b.renderImageToCanvas=function(a,b,c,d,e,f,g,h,i,j){return a.getContext("2d").drawImage(b,c,d,e,f,g,h,i,j),a},b.hasCanvasOption=function(a){return a.canvas||a.crop},b.scale=function(a,c){c=c||{};var d,e,f,g,h,i,j,k,l,m=document.createElement("canvas"),n=a.getContext||b.hasCanvasOption(c)&&m.getContext,o=a.naturalWidth||a.width,p=a.naturalHeight||a.height,q=o,r=p,s=function(){var a=Math.max((f||q)/q,(g||r)/r);a>1&&(q=Math.ceil(q*a),r=Math.ceil(r*a))},t=function(){var a=Math.min((d||q)/q,(e||r)/r);1>a&&(q=Math.ceil(q*a),r=Math.ceil(r*a))};return n&&(c=b.getTransformedOptions(c),j=c.left||0,k=c.top||0,c.sourceWidth?(h=c.sourceWidth,void 0!==c.right&&void 0===c.left&&(j=o-h-c.right)):h=o-j-(c.right||0),c.sourceHeight?(i=c.sourceHeight,void 0!==c.bottom&&void 0===c.top&&(k=p-i-c.bottom)):i=p-k-(c.bottom||0),q=h,r=i),d=c.maxWidth,e=c.maxHeight,f=c.minWidth,g=c.minHeight,n&&d&&e&&c.crop?(q=d,r=e,l=h/i-d/e,0>l?(i=e*h/d,void 0===c.top&&void 0===c.bottom&&(k=(p-i)/2)):l>0&&(h=d*i/e,void 0===c.left&&void 0===c.right&&(j=(o-h)/2))):((c.contain||c.cover)&&(f=d=d||f,g=e=e||g),c.cover?(t(),s()):(s(),t())),n?(m.width=q,m.height=r,b.transformCoordinates(m,c),b.renderImageToCanvas(m,a,j,k,h,i,0,0,q,r)):(a.width=q,a.height=r,a)},b.createObjectURL=function(a){return c?c.createObjectURL(a):!1},b.revokeObjectURL=function(a){return c?c.revokeObjectURL(a):!1},b.readFile=function(a,b,c){if(window.FileReader){var d=new FileReader;if(d.onload=d.onerror=b,c=c||"readAsDataURL",d[c])return d[c](a),d}return!1},"function"==typeof define&&define.amd?define(function(){return b}):a.loadImage=b}(this),function(a){"use strict";"function"==typeof define&&define.amd?define(["load-image"],a):a(window.loadImage)}(function(a){"use strict";if(window.navigator&&window.navigator.platform&&/iP(hone|od|ad)/.test(window.navigator.platform)){var b=a.renderImageToCanvas;a.detectSubsampling=function(a){var b,c;return a.width*a.height>1048576?(b=document.createElement("canvas"),b.width=b.height=1,c=b.getContext("2d"),c.drawImage(a,-a.width+1,0),0===c.getImageData(0,0,1,1).data[3]):!1},a.detectVerticalSquash=function(a,b){var c,d,e,f,g,h=a.naturalHeight||a.height,i=document.createElement("canvas"),j=i.getContext("2d");for(b&&(h/=2),i.width=1,i.height=h,j.drawImage(a,0,0),c=j.getImageData(0,0,1,h).data,d=0,e=h,f=h;f>d;)g=c[4*(f-1)+3],0===g?e=f:d=f,f=e+d>>1;return f/h||1},a.renderImageToCanvas=function(c,d,e,f,g,h,i,j,k,l){if("image/jpeg"===d._type){var m,n,o,p,q=c.getContext("2d"),r=document.createElement("canvas"),s=1024,t=r.getContext("2d");if(r.width=s,r.height=s,q.save(),m=a.detectSubsampling(d),m&&(e/=2,f/=2,g/=2,h/=2),n=a.detectVerticalSquash(d,m),m||1!==n){for(f*=n,k=Math.ceil(s*k/g),l=Math.ceil(s*l/h/n),j=0,p=0;h>p;){for(i=0,o=0;g>o;)t.clearRect(0,0,s,s),t.drawImage(d,e,f,g,h,-o,-p,g,h),q.drawImage(r,0,0,s,s,i,j,k,l),o+=s,i+=k;p+=s,j+=l}return q.restore(),c}}return b(c,d,e,f,g,h,i,j,k,l)}}}),function(a){"use strict";"function"==typeof define&&define.amd?define(["load-image"],a):a(window.loadImage)}(function(a){"use strict";var b=a.hasCanvasOption;a.hasCanvasOption=function(a){return b(a)||a.orientation},a.transformCoordinates=function(a,b){var c=a.getContext("2d"),d=a.width,e=a.height,f=b.orientation;if(f)switch(f>4&&(a.width=e,a.height=d),f){case 2:c.translate(d,0),c.scale(-1,1);break;case 3:c.translate(d,e),c.rotate(Math.PI);break;case 4:c.translate(0,e),c.scale(1,-1);break;case 5:c.rotate(.5*Math.PI),c.scale(1,-1);break;case 6:c.rotate(.5*Math.PI),c.translate(0,-e);break;case 7:c.rotate(.5*Math.PI),c.translate(d,-e),c.scale(-1,1);break;case 8:c.rotate(-.5*Math.PI),c.translate(-d,0)}},a.getTransformedOptions=function(a){if(!a.orientation||1===a.orientation)return a;var b,c={};for(b in a)a.hasOwnProperty(b)&&(c[b]=a[b]);switch(a.orientation){case 2:c.left=a.right,c.right=a.left;break;case 3:c.left=a.right,c.top=a.bottom,c.right=a.left,c.bottom=a.top;break;case 4:c.top=a.bottom,c.bottom=a.top;break;case 5:c.left=a.top,c.top=a.left,c.right=a.bottom,c.bottom=a.right;break;case 6:c.left=a.top,c.top=a.right,c.right=a.bottom,c.bottom=a.left;break;case 7:c.left=a.bottom,c.top=a.right,c.right=a.top,c.bottom=a.left;break;case 8:c.left=a.bottom,c.top=a.left,c.right=a.top,c.bottom=a.right}return a.orientation>4&&(c.maxWidth=a.maxHeight,c.maxHeight=a.maxWidth,c.minWidth=a.minHeight,c.minHeight=a.minWidth,c.sourceWidth=a.sourceHeight,c.sourceHeight=a.sourceWidth),c}}),function(a){"use strict";"function"==typeof define&&define.amd?define(["load-image"],a):a(window.loadImage)}(function(a){"use strict";var b=window.Blob&&(Blob.prototype.slice||Blob.prototype.webkitSlice||Blob.prototype.mozSlice);a.blobSlice=b&&function(){var a=this.slice||this.webkitSlice||this.mozSlice;return a.apply(this,arguments)},a.metaDataParsers={jpeg:{65505:[]}},a.parseMetaData=function(b,c,d){d=d||{};var e=this,f=d.maxMetaDataSize||262144,g={},h=!(window.DataView&&b&&b.size>=12&&"image/jpeg"===b.type&&a.blobSlice);(h||!a.readFile(a.blobSlice.call(b,0,f),function(b){if(b.target.error)return console.log(b.target.error),c(g),void 0;var f,h,i,j,k=b.target.result,l=new DataView(k),m=2,n=l.byteLength-4,o=m;if(65496===l.getUint16(0)){for(;n>m&&(f=l.getUint16(m),f>=65504&&65519>=f||65534===f);){if(h=l.getUint16(m+2)+2,m+h>l.byteLength){console.log("Invalid meta data: Invalid segment size.");break}if(i=a.metaDataParsers.jpeg[f])for(j=0;j<i.length;j+=1)i[j].call(e,l,m,h,g,d);m+=h,o=m}!d.disableImageHead&&o>6&&(g.imageHead=k.slice?k.slice(0,o):new Uint8Array(k).subarray(0,o))}else console.log("Invalid JPEG file: Missing JPEG marker.");c(g)},"readAsArrayBuffer"))&&c(g)}}),function(a){"use strict";"function"==typeof define&&define.amd?define(["load-image","load-image-meta"],a):a(window.loadImage)}(function(a){"use strict";a.ExifMap=function(){return this},a.ExifMap.prototype.map={Orientation:274},a.ExifMap.prototype.get=function(a){return this[a]||this[this.map[a]]},a.getExifThumbnail=function(a,b,c){var d,e,f;if(!c||b+c>a.byteLength)return console.log("Invalid Exif data: Invalid thumbnail data."),void 0;for(d=[],e=0;c>e;e+=1)f=a.getUint8(b+e),d.push((16>f?"0":"")+f.toString(16));return"data:image/jpeg,%"+d.join("%")},a.exifTagTypes={1:{getValue:function(a,b){return a.getUint8(b)},size:1},2:{getValue:function(a,b){return String.fromCharCode(a.getUint8(b))},size:1,ascii:!0},3:{getValue:function(a,b,c){return a.getUint16(b,c)},size:2},4:{getValue:function(a,b,c){return a.getUint32(b,c)},size:4},5:{getValue:function(a,b,c){return a.getUint32(b,c)/a.getUint32(b+4,c)},size:8},9:{getValue:function(a,b,c){return a.getInt32(b,c)},size:4},10:{getValue:function(a,b,c){return a.getInt32(b,c)/a.getInt32(b+4,c)},size:8}},a.exifTagTypes[7]=a.exifTagTypes[1],a.getExifValue=function(b,c,d,e,f,g){var h,i,j,k,l,m,n=a.exifTagTypes[e];if(!n)return console.log("Invalid Exif data: Invalid tag type."),void 0;if(h=n.size*f,i=h>4?c+b.getUint32(d+8,g):d+8,i+h>b.byteLength)return console.log("Invalid Exif data: Invalid data offset."),void 0;if(1===f)return n.getValue(b,i,g);for(j=[],k=0;f>k;k+=1)j[k]=n.getValue(b,i+k*n.size,g);if(n.ascii){for(l="",k=0;k<j.length&&(m=j[k],"\x00"!==m);k+=1)l+=m;return l}return j},a.parseExifTag=function(b,c,d,e,f){var g=b.getUint16(d,e);f.exif[g]=a.getExifValue(b,c,d,b.getUint16(d+2,e),b.getUint32(d+4,e),e)},a.parseExifTags=function(a,b,c,d,e){var f,g,h;if(c+6>a.byteLength)return console.log("Invalid Exif data: Invalid directory offset."),void 0;if(f=a.getUint16(c,d),g=c+2+12*f,g+4>a.byteLength)return console.log("Invalid Exif data: Invalid directory size."),void 0;for(h=0;f>h;h+=1)this.parseExifTag(a,b,c+2+12*h,d,e);return a.getUint32(g,d)},a.parseExifData=function(b,c,d,e,f){if(!f.disableExif){var g,h,i,j=c+10;if(1165519206===b.getUint32(c+4)){if(j+8>b.byteLength)return console.log("Invalid Exif data: Invalid segment size."),void 0;if(0!==b.getUint16(c+8))return console.log("Invalid Exif data: Missing byte alignment offset."),void 0;switch(b.getUint16(j)){case 18761:g=!0;break;case 19789:g=!1;break;default:return console.log("Invalid Exif data: Invalid byte alignment marker."),void 0}if(42!==b.getUint16(j+2,g))return console.log("Invalid Exif data: Missing TIFF marker."),void 0;h=b.getUint32(j+4,g),e.exif=new a.ExifMap,h=a.parseExifTags(b,j,j+h,g,e),h&&!f.disableExifThumbnail&&(i={exif:{}},h=a.parseExifTags(b,j,j+h,g,i),i.exif[513]&&(e.exif.Thumbnail=a.getExifThumbnail(b,j+i.exif[513],i.exif[514]))),e.exif[34665]&&!f.disableExifSub&&a.parseExifTags(b,j,j+e.exif[34665],g,e),e.exif[34853]&&!f.disableExifGps&&a.parseExifTags(b,j,j+e.exif[34853],g,e)}}},a.metaDataParsers.jpeg[65505].push(a.parseExifData)}),function(a){"use strict";"function"==typeof define&&define.amd?define(["load-image","load-image-exif"],a):a(window.loadImage)}(function(a){"use strict";a.ExifMap.prototype.tags={256:"ImageWidth",257:"ImageHeight",34665:"ExifIFDPointer",34853:"GPSInfoIFDPointer",40965:"InteroperabilityIFDPointer",258:"BitsPerSample",259:"Compression",262:"PhotometricInterpretation",274:"Orientation",277:"SamplesPerPixel",284:"PlanarConfiguration",530:"YCbCrSubSampling",531:"YCbCrPositioning",282:"XResolution",283:"YResolution",296:"ResolutionUnit",273:"StripOffsets",278:"RowsPerStrip",279:"StripByteCounts",513:"JPEGInterchangeFormat",514:"JPEGInterchangeFormatLength",301:"TransferFunction",318:"WhitePoint",319:"PrimaryChromaticities",529:"YCbCrCoefficients",532:"ReferenceBlackWhite",306:"DateTime",270:"ImageDescription",271:"Make",272:"Model",305:"Software",315:"Artist",33432:"Copyright",36864:"ExifVersion",40960:"FlashpixVersion",40961:"ColorSpace",40962:"PixelXDimension",40963:"PixelYDimension",42240:"Gamma",37121:"ComponentsConfiguration",37122:"CompressedBitsPerPixel",37500:"MakerNote",37510:"UserComment",40964:"RelatedSoundFile",36867:"DateTimeOriginal",36868:"DateTimeDigitized",37520:"SubSecTime",37521:"SubSecTimeOriginal",37522:"SubSecTimeDigitized",33434:"ExposureTime",33437:"FNumber",34850:"ExposureProgram",34852:"SpectralSensitivity",34855:"PhotographicSensitivity",34856:"OECF",34864:"SensitivityType",34865:"StandardOutputSensitivity",34866:"RecommendedExposureIndex",34867:"ISOSpeed",34868:"ISOSpeedLatitudeyyy",34869:"ISOSpeedLatitudezzz",37377:"ShutterSpeedValue",37378:"ApertureValue",37379:"BrightnessValue",37380:"ExposureBias",37381:"MaxApertureValue",37382:"SubjectDistance",37383:"MeteringMode",37384:"LightSource",37385:"Flash",37396:"SubjectArea",37386:"FocalLength",41483:"FlashEnergy",41484:"SpatialFrequencyResponse",41486:"FocalPlaneXResolution",41487:"FocalPlaneYResolution",41488:"FocalPlaneResolutionUnit",41492:"SubjectLocation",41493:"ExposureIndex",41495:"SensingMethod",41728:"FileSource",41729:"SceneType",41730:"CFAPattern",41985:"CustomRendered",41986:"ExposureMode",41987:"WhiteBalance",41988:"DigitalZoomRatio",41989:"FocalLengthIn35mmFilm",41990:"SceneCaptureType",41991:"GainControl",41992:"Contrast",41993:"Saturation",41994:"Sharpness",41995:"DeviceSettingDescription",41996:"SubjectDistanceRange",42016:"ImageUniqueID",42032:"CameraOwnerName",42033:"BodySerialNumber",42034:"LensSpecification",42035:"LensMake",42036:"LensModel",42037:"LensSerialNumber",0:"GPSVersionID",1:"GPSLatitudeRef",2:"GPSLatitude",3:"GPSLongitudeRef",4:"GPSLongitude",5:"GPSAltitudeRef",6:"GPSAltitude",7:"GPSTimeStamp",8:"GPSSatellites",9:"GPSStatus",10:"GPSMeasureMode",11:"GPSDOP",12:"GPSSpeedRef",13:"GPSSpeed",14:"GPSTrackRef",15:"GPSTrack",16:"GPSImgDirectionRef",17:"GPSImgDirection",18:"GPSMapDatum",19:"GPSDestLatitudeRef",20:"GPSDestLatitude",21:"GPSDestLongitudeRef",22:"GPSDestLongitude",23:"GPSDestBearingRef",24:"GPSDestBearing",25:"GPSDestDistanceRef",26:"GPSDestDistance",27:"GPSProcessingMethod",28:"GPSAreaInformation",29:"GPSDateStamp",30:"GPSDifferential",31:"GPSHPositioningError"},a.ExifMap.prototype.stringValues={ExposureProgram:{0:"Undefined",1:"Manual",2:"Normal program",3:"Aperture priority",4:"Shutter priority",5:"Creative program",6:"Action program",7:"Portrait mode",8:"Landscape mode"},MeteringMode:{0:"Unknown",1:"Average",2:"CenterWeightedAverage",3:"Spot",4:"MultiSpot",5:"Pattern",6:"Partial",255:"Other"},LightSource:{0:"Unknown",1:"Daylight",2:"Fluorescent",3:"Tungsten (incandescent light)",4:"Flash",9:"Fine weather",10:"Cloudy weather",11:"Shade",12:"Daylight fluorescent (D 5700 - 7100K)",13:"Day white fluorescent (N 4600 - 5400K)",14:"Cool white fluorescent (W 3900 - 4500K)",15:"White fluorescent (WW 3200 - 3700K)",17:"Standard light A",18:"Standard light B",19:"Standard light C",20:"D55",21:"D65",22:"D75",23:"D50",24:"ISO studio tungsten",255:"Other"},Flash:{0:"Flash did not fire",1:"Flash fired",5:"Strobe return light not detected",7:"Strobe return light detected",9:"Flash fired, compulsory flash mode",13:"Flash fired, compulsory flash mode, return light not detected",15:"Flash fired, compulsory flash mode, return light detected",16:"Flash did not fire, compulsory flash mode",24:"Flash did not fire, auto mode",25:"Flash fired, auto mode",29:"Flash fired, auto mode, return light not detected",31:"Flash fired, auto mode, return light detected",32:"No flash function",65:"Flash fired, red-eye reduction mode",69:"Flash fired, red-eye reduction mode, return light not detected",71:"Flash fired, red-eye reduction mode, return light detected",73:"Flash fired, compulsory flash mode, red-eye reduction mode",77:"Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected",79:"Flash fired, compulsory flash mode, red-eye reduction mode, return light detected",89:"Flash fired, auto mode, red-eye reduction mode",93:"Flash fired, auto mode, return light not detected, red-eye reduction mode",95:"Flash fired, auto mode, return light detected, red-eye reduction mode"},SensingMethod:{1:"Undefined",2:"One-chip color area sensor",3:"Two-chip color area sensor",4:"Three-chip color area sensor",5:"Color sequential area sensor",7:"Trilinear sensor",8:"Color sequential linear sensor"},SceneCaptureType:{0:"Standard",1:"Landscape",2:"Portrait",3:"Night scene"},SceneType:{1:"Directly photographed"},CustomRendered:{0:"Normal process",1:"Custom process"},WhiteBalance:{0:"Auto white balance",1:"Manual white balance"},GainControl:{0:"None",1:"Low gain up",2:"High gain up",3:"Low gain down",4:"High gain down"},Contrast:{0:"Normal",1:"Soft",2:"Hard"},Saturation:{0:"Normal",1:"Low saturation",2:"High saturation"},Sharpness:{0:"Normal",1:"Soft",2:"Hard"},SubjectDistanceRange:{0:"Unknown",1:"Macro",2:"Close view",3:"Distant view"},FileSource:{3:"DSC"},ComponentsConfiguration:{0:"",1:"Y",2:"Cb",3:"Cr",4:"R",5:"G",6:"B"},Orientation:{1:"top-left",2:"top-right",3:"bottom-right",4:"bottom-left",5:"left-top",6:"right-top",7:"right-bottom",8:"left-bottom"}},a.ExifMap.prototype.getText=function(a){var b=this.get(a);switch(a){case"LightSource":case"Flash":case"MeteringMode":case"ExposureProgram":case"SensingMethod":case"SceneCaptureType":case"SceneType":case"CustomRendered":case"WhiteBalance":case"GainControl":case"Contrast":case"Saturation":case"Sharpness":case"SubjectDistanceRange":case"FileSource":case"Orientation":return this.stringValues[a][b];case"ExifVersion":case"FlashpixVersion":return String.fromCharCode(b[0],b[1],b[2],b[3]);case"ComponentsConfiguration":return this.stringValues[a][b[0]]+this.stringValues[a][b[1]]+this.stringValues[a][b[2]]+this.stringValues[a][b[3]];case"GPSVersionID":return b[0]+"."+b[1]+"."+b[2]+"."+b[3]}return String(b)},function(a){var b,c=a.tags,d=a.map;for(b in c)c.hasOwnProperty(b)&&(d[c[b]]=b)}(a.ExifMap.prototype),a.ExifMap.prototype.getAll=function(){var a,b,c={};for(a in this)this.hasOwnProperty(a)&&(b=this.tags[a],b&&(c[b]=this.getText(b)));return c}}); \ No newline at end of file diff --git a/wagtail/wagtailimages/static/wagtailimages/scss/add-multiple.scss b/wagtail/wagtailimages/static/wagtailimages/scss/add-multiple.scss new file mode 100644 index 000000000..36c88665b --- /dev/null +++ b/wagtail/wagtailimages/static/wagtailimages/scss/add-multiple.scss @@ -0,0 +1,120 @@ +@import "../../wagtailadmin/static/wagtailadmin/scss/variables.scss"; +@import "../../wagtailadmin/static/wagtailadmin/scss/mixins.scss"; +@import "../../wagtailadmin/static/wagtailadmin/scss/grid.scss"; + +.replace-file-input{ + display:inline-block; + position:relative; + overflow:hidden; + padding-bottom:2px; + + input[type=file]{ + padding:0; + opacity:0; + position:absolute; + top:0; + right:0; + direction:ltr; + width:auto; + display:block; + font-size:5em; + + &:hover{ + cursor:pointer; + } + } + + &:hover{ + cursor:pointer; + + button{ + background-color:$color-teal-darker; + } + } +} + +.upload-list{ + > li{ + padding:1em; + } + .left{ + text-align:center; + } + + .preview{ + width:150px; + min-height:150px; + display:block; + position:relative; + text-align:center; + max-width:100%; + margin:auto; + } + .progress, .thumb, .thumb:before, canvas, img{ + position:absolute; + max-width:100%; + } + .progress{ + z-index:4; + top:60%; + left:20%; + right:20%; + width:60%; + @include box-shadow(0 0 5px 2px rgba(255, 255, 255, 0.4)); + } + .thumb{ + top:0;right:0;bottom:0;left:0; + z-index:1; + width:100%; + } + + .thumb:before, canvas, img{ + left:0; + right:0; + top:0; + bottom:0; + margin:auto; + } + .thumb:before{ + z-index:2; + top:0; + width:1em; + font-size:10em; + line-height:1.4em; + color:lighten($color-grey-4, 4%); + } + canvas, img{ + z-index:3; + } + + .hasthumb{ + &:before{ + display:none; + } + } + + .status-msg{ + display:none; + } + + .upload-complete{ + .progress{ + opacity:0; + } + } + .upload-uploading{ + + } + .upload-success{ + .status-msg.success{ + display:block; + } + } + .upload-failure{ + border-color:$color-red; + + .status-msg.failure{ + display:block; + } + } +} \ No newline at end of file diff --git a/wagtail/wagtailimages/templates/wagtailimages/images/edit.html b/wagtail/wagtailimages/templates/wagtailimages/images/edit.html index f75b4e56e..e904bd426 100644 --- a/wagtail/wagtailimages/templates/wagtailimages/images/edit.html +++ b/wagtail/wagtailimages/templates/wagtailimages/images/edit.html @@ -13,10 +13,10 @@ {% block content %} {% trans "Editing" as editing_str %} - {% include "wagtailadmin/shared/header.html" with title=editing_str subtitle=image.title icon="image" %} - + {% include "wagtailadmin/shared/header.html" with title=editing_str subtitle=image.title icon="image" usage_object=image %} + <div class="row row-flush nice-padding"> - + <div class="col7"> <form action="{% url 'wagtailimages_edit_image' image.id %}" method="POST" enctype="multipart/form-data"> {% csrf_token %} @@ -33,10 +33,13 @@ <li><input type="submit" value="{% trans 'Save' %}" /><a href="{% url 'wagtailimages_delete_image' image.id %}" class="button button-secondary no">{% trans "Delete image" %}</a></li> </ul> </form> - </div> <div class="col5"> {% image image max-800x600 %} + + {% if url_generator_enabled %} + <a href="{% url 'wagtailimages_url_generator' image.id %}" class="button bicolor icon icon-link">URL Generator</a> + {% endif %} </div> </div> {% endblock %} diff --git a/wagtail/wagtailimages/templates/wagtailimages/images/index.html b/wagtail/wagtailimages/templates/wagtailimages/images/index.html index ba7465895..2a9d4bf8c 100644 --- a/wagtail/wagtailimages/templates/wagtailimages/images/index.html +++ b/wagtail/wagtailimages/templates/wagtailimages/images/index.html @@ -17,7 +17,7 @@ {% block content %} {% trans "Images" as im_str %} {% trans "Add an image" as add_img_str %} - {% include "wagtailadmin/shared/header.html" with title=im_str add_link="wagtailimages_add_image" icon="image" add_text=add_img_str search_url="wagtailimages_index" %} + {% include "wagtailadmin/shared/header.html" with title=im_str add_link="wagtailimages_add_multiple" icon="image" add_text=add_img_str search_url="wagtailimages_index" %} <div class="nice-padding"> <div id="image-results"> diff --git a/wagtail/wagtailimages/templates/wagtailimages/images/url_generator.html b/wagtail/wagtailimages/templates/wagtailimages/images/url_generator.html new file mode 100644 index 000000000..aae28cd95 --- /dev/null +++ b/wagtail/wagtailimages/templates/wagtailimages/images/url_generator.html @@ -0,0 +1,43 @@ +{% extends "wagtailadmin/base.html" %} +{% load wagtailimages_tags static compress i18n %} + +{% block titletag %}{% blocktrans with title=image.title %}Editing image {{ title }}{% endblocktrans %}{% endblock %} + +{% block bodyclass %}menu-images{% endblock %} + +{% block content %} + {% trans "Generating URL" as title_str %} + {% include "wagtailadmin/shared/header.html" with title=title_str subtitle=image.title icon="image" %} + + <div class="image-url-generator nice-padding" data-generator-url="{% url 'wagtailimages_generate_url' image.id '__filterspec__' %}"> + <form> + <ul class="fields"> + {% include "wagtailadmin/shared/field_as_li.html" with field=form.filter_method %} + <li> + <ul class="field-row"> + {% include "wagtailadmin/shared/field_as_li.html" with field=form.width li_classes="field-col col4" %} + {% include "wagtailadmin/shared/field_as_li.html" with field=form.height li_classes="field-col col4" %} + </ul> + </li> + </ul> + </form> + + <h2 class="icon icon-link">{% trans "URL" %}</h2> + <textarea id="result-url" rows="1"></textarea> + + <h2 class="icon icon-view">{% trans "Preview" %}</h2> + <div> + <div class="loading-mask inline-block"> + <img class="preview" src="" alt="Preview" /> + </div> + </div> + <p id="note-size" class="help-block help-warning">{% trans "Note that images generated larger than the screen will appear smaller when previewed here, so they fit the screen." %}</p> + </div> +{% endblock %} + +{% block extra_js %} + {% compress js %} + <script src="{% static 'wagtailadmin/js/vendor/jquery.ba-throttle-debounce.min.js' %}"></script> + <script src="{% static 'wagtailimages/js/image-url-generator.js' %}"></script> + {% endcompress %} +{% endblock %} \ No newline at end of file diff --git a/wagtail/wagtailimages/templates/wagtailimages/images/usage.html b/wagtail/wagtailimages/templates/wagtailimages/images/usage.html new file mode 100644 index 000000000..74ccbd6ee --- /dev/null +++ b/wagtail/wagtailimages/templates/wagtailimages/images/usage.html @@ -0,0 +1,49 @@ +{% extends "wagtailadmin/base.html" %} +{% load i18n %} +{% block titletag %}{% blocktrans with title=image.title %}Usage of {{ title }}{% endblocktrans %}{% endblock %} +{% block content %} + {% trans "Usage of" as usage_str %} + {% include "wagtailadmin/shared/header.html" with title=usage_str subtitle=image.title %} + + <div class="nice-padding"> + <table class="listing"> + <col /> + <col width="30%"/> + <col width="15%"/> + <col width="15%"/> + <thead> + <tr> + <th class="title">{% trans "Title" %}</th> + <th>{% trans "Parent" %}</th> + <th>{% trans "Type" %}</th> + <th>{% trans "Status" %}</th> + </tr> + </thead> + <tbody> + {% for page in used_by %} + <tr> + <td class="title" valign="top"> + <h2><a href="{% url 'wagtailadmin_pages_edit' page.id %}" title="{% trans 'Edit this page' %}">{{ page.title }}</a></h2> + </td> + <td> + {% if page.get_parent %} + <a href="{% url 'wagtailadmin_explore' page.get_parent.id %}">{{ page.get_parent.title }}</a> + {% endif %} + </td> + <td> + {{ page.content_type.model_class.get_verbose_name }} + </td> + <td> + {% if page.live %} + <a href="{{ page.url }}" target="_blank" class="status-tag {% if page.status_string != "draft" %}primary{% endif %}">{{ page.status_string }}</a> + {% else %} + <span class="status-tag {% if page.status_string != "draft" %}primary{% endif %}">{{ page.status_string }}</span> + {% endif %} + </td> + </tr> + {% endfor %} + </tbody> + </table> + </div> + {% include "wagtailadmin/shared/pagination_nav.html" with items=used_by linkurl="-" %} +{% endblock %} diff --git a/wagtail/wagtailimages/templates/wagtailimages/multiple/add.html b/wagtail/wagtailimages/templates/wagtailimages/multiple/add.html new file mode 100644 index 000000000..9bde36d09 --- /dev/null +++ b/wagtail/wagtailimages/templates/wagtailimages/multiple/add.html @@ -0,0 +1,77 @@ +{% extends "wagtailadmin/base.html" %} +{% load wagtailimages_tags i18n compress static %} +{% block titletag %}{% trans "Add multiple images" %}{% endblock %} +{% block bodyclass %}menu-images{% endblock %} +{% block extra_css %} + {% compress css %} + <link rel="stylesheet" href="{{ STATIC_URL }}wagtailimages/scss/add-multiple.scss" type="text/x-scss" /> + {% endcompress %} + {% include "wagtailadmin/shared/tag_field_css.html" %} +{% endblock %} + +{% block content %} + {% trans "Add images" as add_str %} + {% include "wagtailadmin/shared/header.html" with title=add_str icon="image" %} + + <div class="nice-padding"> + <div class="drop-zone"> + <p>{% trans "Drag and drop images into this area to upload immediately." %}</p> + + <form action="{% url 'wagtailimages_add_multiple' %}" method="POST" enctype="multipart/form-data"> + <div class="replace-file-input"> + <button class="bicolor icon icon-plus">{% trans "Or choose from your computer" %}</button> + <input id="fileupload" type="file" name="files[]" data-url="{% url 'wagtailimages_add_multiple' %}" multiple> + </div> + {% csrf_token %} + </form> + </div> + + <div id="overall-progress" class="progress progress-secondary"> + <div class="bar" style="width: 0%;">0%</div> + </div> + + <ul id="upload-list" class="upload-list multiple"></ul> + </div> + + <script id="upload-list-item" type="text/template"> + <li class="row"> + <div class="left col3"> + <div class="preview"> + <div class="thumb icon icon-image"></div> + <div class="progress"> + <div class="bar" style="width: 0%;"></div> + </div> + </div> + </div> + <div class="right col9"> + <p class="status-msg success">{% trans "Upload successful. Please update this image with a more appropriate title, if necessary. You may also delete the image completely if the upload wasn't required." %}</p> + <p class="status-msg failure">{% trans "Sorry, upload failed." %}</p> + <p class="status-msg failure error_messages"></p> + </div> + </li> + </script> +{% endblock %} + +{% block extra_js %} + {% compress js %} + <!-- this exact order of plugins is vital --> + <script src="{{ STATIC_URL }}wagtailimages/js/vendor/load-image.min.js"></script> + <script src="{{ STATIC_URL }}wagtailimages/js/vendor/canvas-to-blob.min.js"></script> + <script src="{{ STATIC_URL }}wagtailimages/js/vendor/jquery.iframe-transport.js"></script> + <script src="{{ STATIC_URL }}wagtailimages/js/vendor/jquery.fileupload.js"></script> + <script src="{{ STATIC_URL }}wagtailimages/js/vendor/jquery.fileupload-process.js"></script> + <script src="{{ STATIC_URL }}wagtailimages/js/vendor/jquery.fileupload-image.js"></script> + <script src="{{ STATIC_URL }}wagtailadmin/js/vendor/tag-it.js"></script> + + <!-- Main script --> + <script src="{{ STATIC_URL }}wagtailimages/js/add-multiple.js"></script> + {% endcompress %} + + {% url 'wagtailadmin_tag_autocomplete' as autocomplete_url %} + <script> + window.simple_upload_url = "{% url 'wagtailimages_add_image' %}"; + window.tagit_opts = { + autocomplete: {source: "{{ autocomplete_url|addslashes }}"} + }; + </script> +{% endblock %} diff --git a/wagtail/wagtailimages/templates/wagtailimages/multiple/edit_form.html b/wagtail/wagtailimages/templates/wagtailimages/multiple/edit_form.html new file mode 100644 index 000000000..9fdebacc1 --- /dev/null +++ b/wagtail/wagtailimages/templates/wagtailimages/multiple/edit_form.html @@ -0,0 +1,14 @@ +{% load i18n %} + +<form action="{% url 'wagtailimages_edit_multiple' image.id %}" method="POST" enctype="multipart/form-data"> + <ul class="fields"> + {% csrf_token %} + {% for field in form %} + {% include "wagtailadmin/shared/field_as_li.html" %} + {% endfor %} + <li> + <input type="submit" value="{% trans 'Update' %}" /> + <a href="{% url 'wagtailimages_delete_multiple' image.id %}" class="delete button button-secondary no">{% trans "Delete" %}</a> + </li> + </ul> +</form> \ No newline at end of file diff --git a/wagtail/wagtailimages/templatetags/image_tags.py b/wagtail/wagtailimages/templatetags/image_tags.py index c26729f6c..00e59aca0 100644 --- a/wagtail/wagtailimages/templatetags/image_tags.py +++ b/wagtail/wagtailimages/templatetags/image_tags.py @@ -1,8 +1,11 @@ import warnings +from wagtail.utils.deprecation import RemovedInWagtail06Warning + + warnings.warn( "The image_tags tag library has been moved to wagtailimages_tags. " - "Use {% load wagtailimages_tags %} instead.", DeprecationWarning) + "Use {% load wagtailimages_tags %} instead.", RemovedInWagtail06Warning) from wagtail.wagtailimages.templatetags.wagtailimages_tags import register, image diff --git a/wagtail/wagtailimages/tests.py b/wagtail/wagtailimages/tests.py index 48a31ae89..dabd5e0e8 100644 --- a/wagtail/wagtailimages/tests.py +++ b/wagtail/wagtailimages/tests.py @@ -1,9 +1,17 @@ -from mock import MagicMock -from django.utils import six +import json +import datetime +from mock import MagicMock +import dateutil.parser + +from django.utils import six +from django.utils.http import urlquote +from django.utils import timezone from django.test import TestCase +from django.test.utils import override_settings from django import template -from django.contrib.auth.models import User, Group, Permission +from django.contrib.auth import get_user_model +from django.contrib.auth.models import Group, Permission from django.core.urlresolvers import reverse from django.core.files.uploadedfile import SimpleUploadedFile @@ -17,6 +25,12 @@ from wagtail.wagtailimages.formats import ( from wagtail.wagtailimages.backends import get_image_backend from wagtail.wagtailimages.backends.pillow import PillowBackend +from wagtail.wagtailimages.utils.crop import crop_to_point, CropBox +from wagtail.wagtailimages.utils.focal_point import FocalPoint +from wagtail.wagtailimages.utils.crypto import generate_signature, verify_signature +from wagtail.tests.models import EventPage, EventPageCarouselItem +from wagtail.wagtailcore.models import Page + def get_test_image_file(): from six import BytesIO @@ -50,6 +64,7 @@ class TestImage(TestCase): class TestImagePermissions(TestCase): def setUp(self): # Create some user accounts for testing permissions + User = get_user_model() self.user = User.objects.create_user(username='user', email='user@email.com', password='password') self.owner = User.objects.create_user(username='owner', email='owner@email.com', password='password') self.editor = User.objects.create_user(username='editor', email='editor@email.com', password='password') @@ -470,3 +485,534 @@ class TestFormat(TestCase): register_image_format(self.format) result = get_image_format('test name') self.assertEqual(result, self.format) + + +class TestUsageCount(TestCase): + fixtures = ['wagtail/tests/fixtures/test.json'] + + def setUp(self): + self.image = Image.objects.create( + title="Test image", + file=get_test_image_file(), + ) + + @override_settings(WAGTAIL_USAGE_COUNT_ENABLED=True) + def test_unused_image_usage_count(self): + self.assertEqual(self.image.get_usage().count(), 0) + + @override_settings(WAGTAIL_USAGE_COUNT_ENABLED=True) + def test_used_image_document_usage_count(self): + page = EventPage.objects.get(id=4) + event_page_carousel_item = EventPageCarouselItem() + event_page_carousel_item.page = page + event_page_carousel_item.image = self.image + event_page_carousel_item.save() + self.assertEqual(self.image.get_usage().count(), 1) + + +class TestGetUsage(TestCase): + fixtures = ['wagtail/tests/fixtures/test.json'] + + def setUp(self): + self.image = Image.objects.create( + title="Test image", + file=get_test_image_file(), + ) + + def test_image_get_usage_not_enabled(self): + self.assertEqual(list(self.image.get_usage()), []) + + @override_settings(WAGTAIL_USAGE_COUNT_ENABLED=True) + def test_unused_image_get_usage(self): + self.assertEqual(list(self.image.get_usage()), []) + + @override_settings(WAGTAIL_USAGE_COUNT_ENABLED=True) + def test_used_image_document_get_usage(self): + page = EventPage.objects.get(id=4) + event_page_carousel_item = EventPageCarouselItem() + event_page_carousel_item.page = page + event_page_carousel_item.image = self.image + event_page_carousel_item.save() + self.assertTrue(issubclass(Page, type(self.image.get_usage()[0]))) + + +class TestMultipleImageUploader(TestCase, WagtailTestUtils): + """ + This tests the multiple image upload views located in wagtailimages/views/multiple.py + """ + def setUp(self): + self.login() + + # Create an image for running tests on + self.image = Image.objects.create( + title="Test image", + file=get_test_image_file(), + ) + + def test_add(self): + """ + This tests that the add view responds correctly on a GET request + """ + # Send request + response = self.client.get(reverse('wagtailimages_add_multiple')) + + # Check response + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'wagtailimages/multiple/add.html') + + def test_add_post(self): + """ + This tests that a POST request to the add view saves the image and returns an edit form + """ + response = self.client.post(reverse('wagtailimages_add_multiple'), { + 'files[]': SimpleUploadedFile('test.png', get_test_image_file().file.getvalue()), + }, HTTP_X_REQUESTED_WITH='XMLHttpRequest') + + # Check response + self.assertEqual(response.status_code, 200) + self.assertEqual(response['Content-Type'], 'application/json') + self.assertTemplateUsed(response, 'wagtailimages/multiple/edit_form.html') + + # Check image + self.assertIn('image', response.context) + self.assertEqual(response.context['image'].title, 'test.png') + + # Check form + self.assertIn('form', response.context) + self.assertEqual(response.context['form'].initial['title'], 'test.png') + + # Check JSON + response_json = json.loads(response.content.decode()) + self.assertIn('image_id', response_json) + self.assertIn('form', response_json) + self.assertIn('success', response_json) + self.assertEqual(response_json['image_id'], response.context['image'].id) + self.assertTrue(response_json['success']) + + def test_add_post_noajax(self): + """ + This tests that only AJAX requests are allowed to POST to the add view + """ + response = self.client.post(reverse('wagtailimages_add_multiple'), {}) + + # Check response + self.assertEqual(response.status_code, 400) + + def test_add_post_nofile(self): + """ + This tests that the add view checks for a file when a user POSTs to it + """ + response = self.client.post(reverse('wagtailimages_add_multiple'), {}, HTTP_X_REQUESTED_WITH='XMLHttpRequest') + + # Check response + self.assertEqual(response.status_code, 400) + + def test_add_post_badfile(self): + """ + This tests that the add view checks for a file when a user POSTs to it + """ + response = self.client.post(reverse('wagtailimages_add_multiple'), { + 'files[]': SimpleUploadedFile('test.png', b"This is not an image!"), + }, HTTP_X_REQUESTED_WITH='XMLHttpRequest') + + # Check response + self.assertEqual(response.status_code, 200) + self.assertEqual(response['Content-Type'], 'application/json') + + # Check JSON + response_json = json.loads(response.content.decode()) + self.assertNotIn('image_id', response_json) + self.assertNotIn('form', response_json) + self.assertIn('success', response_json) + self.assertIn('error_message', response_json) + self.assertFalse(response_json['success']) + self.assertEqual(response_json['error_message'], 'Not a valid image. Please use a gif, jpeg or png file with the correct file extension (*.gif, *.jpg or *.png).') + + def test_edit_get(self): + """ + This tests that a GET request to the edit view returns a 405 "METHOD NOT ALLOWED" response + """ + # Send request + response = self.client.get(reverse('wagtailimages_edit_multiple', args=(self.image.id, ))) + + # Check response + self.assertEqual(response.status_code, 405) + + def test_edit_post(self): + """ + This tests that a POST request to the edit view edits the image + """ + # Send request + response = self.client.post(reverse('wagtailimages_edit_multiple', args=(self.image.id, )), { + ('image-%d-title' % self.image.id): "New title!", + ('image-%d-tags' % self.image.id): "", + }, HTTP_X_REQUESTED_WITH='XMLHttpRequest') + + # Check response + self.assertEqual(response.status_code, 200) + self.assertEqual(response['Content-Type'], 'application/json') + + # Check JSON + response_json = json.loads(response.content.decode()) + self.assertIn('image_id', response_json) + self.assertNotIn('form', response_json) + self.assertIn('success', response_json) + self.assertEqual(response_json['image_id'], self.image.id) + self.assertTrue(response_json['success']) + + def test_edit_post_noajax(self): + """ + This tests that a POST request to the edit view without AJAX returns a 400 response + """ + # Send request + response = self.client.post(reverse('wagtailimages_edit_multiple', args=(self.image.id, )), { + ('image-%d-title' % self.image.id): "New title!", + ('image-%d-tags' % self.image.id): "", + }) + + # Check response + self.assertEqual(response.status_code, 400) + + def test_edit_post_validation_error(self): + """ + This tests that a POST request to the edit page returns a json document with "success=False" + and a form with the validation error indicated + """ + # Send request + response = self.client.post(reverse('wagtailimages_edit_multiple', args=(self.image.id, )), { + ('image-%d-title' % self.image.id): "", # Required + ('image-%d-tags' % self.image.id): "", + }, HTTP_X_REQUESTED_WITH='XMLHttpRequest') + + # Check response + self.assertEqual(response.status_code, 200) + self.assertEqual(response['Content-Type'], 'application/json') + self.assertTemplateUsed(response, 'wagtailimages/multiple/edit_form.html') + + # Check that a form error was raised + self.assertFormError(response, 'form', 'title', "This field is required.") + + # Check JSON + response_json = json.loads(response.content.decode()) + self.assertIn('image_id', response_json) + self.assertIn('form', response_json) + self.assertIn('success', response_json) + self.assertEqual(response_json['image_id'], self.image.id) + self.assertFalse(response_json['success']) + + def test_delete_get(self): + """ + This tests that a GET request to the delete view returns a 405 "METHOD NOT ALLOWED" response + """ + # Send request + response = self.client.get(reverse('wagtailimages_delete_multiple', args=(self.image.id, ))) + + # Check response + self.assertEqual(response.status_code, 405) + + def test_delete_post(self): + """ + This tests that a POST request to the delete view deletes the image + """ + # Send request + response = self.client.post(reverse('wagtailimages_delete_multiple', args=(self.image.id, )), HTTP_X_REQUESTED_WITH='XMLHttpRequest') + + # Check response + self.assertEqual(response.status_code, 200) + self.assertEqual(response['Content-Type'], 'application/json') + + # Make sure the image is deleted + self.assertFalse(Image.objects.filter(id=self.image.id).exists()) + + # Check JSON + response_json = json.loads(response.content.decode()) + self.assertIn('image_id', response_json) + self.assertIn('success', response_json) + self.assertEqual(response_json['image_id'], self.image.id) + self.assertTrue(response_json['success']) + + def test_edit_post_noajax(self): + """ + This tests that a POST request to the delete view without AJAX returns a 400 response + """ + # Send request + response = self.client.post(reverse('wagtailimages_delete_multiple', args=(self.image.id, ))) + + # Check response + self.assertEqual(response.status_code, 400) + + +class TestSignatureGeneration(TestCase): + def test_signature_generation(self): + self.assertEqual(generate_signature(100, 'fill-800x600'), b'xnZOzQyUg6pkfciqcfRJRosOrGg=') + + def test_signature_verification(self): + self.assertTrue(verify_signature(b'xnZOzQyUg6pkfciqcfRJRosOrGg=', 100, 'fill-800x600')) + + def test_signature_changes_on_image_id(self): + self.assertFalse(verify_signature(b'xnZOzQyUg6pkfciqcfRJRosOrGg=', 200, 'fill-800x600')) + + def test_signature_changes_on_filter_spec(self): + self.assertFalse(verify_signature(b'xnZOzQyUg6pkfciqcfRJRosOrGg=', 100, 'fill-800x700')) + + +class TestFrontendServeView(TestCase): + def setUp(self): + # Create an image for running tests on + self.image = Image.objects.create( + title="Test image", + file=get_test_image_file(), + ) + + def test_get(self): + """ + Test a valid GET request to the view + """ + # Generate signature + signature = generate_signature(self.image.id, 'fill-800x600') + + # Get the image + response = self.client.get(reverse('wagtailimages_serve', args=(signature, self.image.id, 'fill-800x600'))) + + # Check response + self.assertEqual(response.status_code, 200) + self.assertEqual(response['Content-Type'], 'image/jpeg') + + # Make sure the cache headers are set to expire after at least one month + self.assertIn('Cache-Control', response) + self.assertEqual(response['Cache-Control'].split('=')[0], 'max-age') + self.assertTrue(int(response['Cache-Control'].split('=')[1]) > datetime.timedelta(days=30).seconds) + + self.assertIn('Expires', response) + self.assertTrue(dateutil.parser.parse(response['Expires']) > timezone.now() + datetime.timedelta(days=30)) + + def test_get_invalid_signature(self): + """ + Test that an invalid signature returns a 403 response + """ + # Generate a signature for the incorrect image id + signature = generate_signature(self.image.id + 1, 'fill-800x600') + + # Get the image + response = self.client.get(reverse('wagtailimages_serve', args=(signature, self.image.id, 'fill-800x600'))) + + # Check response + self.assertEqual(response.status_code, 403) + + def test_get_invalid_filter_spec(self): + """ + Test that an invalid filter spec returns a 400 response + + This is very unlikely to happen in reality. A user would have + to create signature for the invalid filter spec which can't be + done with Wagtails built in URL generator. We should test it + anyway though. + """ + # Generate a signature with the invalid filterspec + signature = generate_signature(self.image.id, 'bad-filter-spec') + + # Get the image + response = self.client.get(reverse('wagtailimages_serve', args=(signature, self.image.id, 'bad-filter-spec'))) + + # Check response + self.assertEqual(response.status_code, 400) + + +class TestURLGeneratorView(TestCase, WagtailTestUtils): + def setUp(self): + # Create an image for running tests on + self.image = Image.objects.create( + title="Test image", + file=get_test_image_file(), + ) + + # Login + self.user = self.login() + + def test_get(self): + """ + This tests that the view responds correctly for a user with edit permissions on this image + """ + # Get + response = self.client.get(reverse('wagtailimages_url_generator', args=(self.image.id, ))) + + # Check response + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'wagtailimages/images/url_generator.html') + + def test_get_bad_permissions(self): + """ + This tests that the view gives a 403 if a user without correct permissions attemts to access it + """ + # Remove privileges from user + self.user.is_superuser = False + self.user.user_permissions.add( + Permission.objects.get(content_type__app_label='wagtailadmin', codename='access_admin') + ) + self.user.save() + + # Get + response = self.client.get(reverse('wagtailimages_url_generator', args=(self.image.id, ))) + + # Check response + self.assertEqual(response.status_code, 403) + + +class TestGenerateURLView(TestCase, WagtailTestUtils): + def setUp(self): + # Create an image for running tests on + self.image = Image.objects.create( + title="Test image", + file=get_test_image_file(), + ) + + # Login + self.user = self.login() + + def test_get(self): + """ + This tests that the view responds correctly for a user with edit permissions on this image + """ + # Get + response = self.client.get(reverse('wagtailimages_generate_url', args=(self.image.id, 'fill-800x600'))) + + # Check response + self.assertEqual(response.status_code, 200) + self.assertEqual(response['Content-Type'], 'application/json') + + # Check JSON + content_json = json.loads(response.content.decode()) + + self.assertEqual(set(content_json.keys()), set(['url', 'local_url'])) + + expected_url = 'http://localhost/images/%(signature)s/%(image_id)d/fill-800x600/' % { + 'signature': urlquote(generate_signature(self.image.id, 'fill-800x600').decode()), + 'image_id': self.image.id, + } + self.assertEqual(content_json['url'], expected_url) + + expected_local_url = '/images/%(signature)s/%(image_id)d/fill-800x600/' % { + 'signature': urlquote(generate_signature(self.image.id, 'fill-800x600').decode()), + 'image_id': self.image.id, + } + self.assertEqual(content_json['local_url'], expected_local_url) + + def test_get_bad_permissions(self): + """ + This tests that the view gives a 403 if a user without correct permissions attemts to access it + """ + # Remove privileges from user + self.user.is_superuser = False + self.user.user_permissions.add( + Permission.objects.get(content_type__app_label='wagtailadmin', codename='access_admin') + ) + self.user.save() + + # Get + response = self.client.get(reverse('wagtailimages_generate_url', args=(self.image.id, 'fill-800x600'))) + + # Check response + self.assertEqual(response.status_code, 403) + self.assertEqual(response['Content-Type'], 'application/json') + + # Check JSON + self.assertJSONEqual(response.content.decode(), json.dumps({ + 'error': 'You do not have permission to generate a URL for this image.', + })) + + def test_get_bad_image(self): + """ + This tests that the view gives a 404 response if a user attempts to use it with an image which doesn't exist + """ + # Get + response = self.client.get(reverse('wagtailimages_generate_url', args=(self.image.id + 1, 'fill-800x600'))) + + # Check response + self.assertEqual(response.status_code, 404) + self.assertEqual(response['Content-Type'], 'application/json') + + # Check JSON + self.assertJSONEqual(response.content.decode(), json.dumps({ + 'error': 'Cannot find image.', + })) + + def test_get_bad_filter_spec(self): + """ + This tests that the view gives a 400 response if the user attempts to use it with an invalid filter spec + """ + # Get + response = self.client.get(reverse('wagtailimages_generate_url', args=(self.image.id, 'bad-filter-spec'))) + + # Check response + self.assertEqual(response.status_code, 400) + self.assertEqual(response['Content-Type'], 'application/json') + + # Check JSON + self.assertJSONEqual(response.content.decode(), json.dumps({ + 'error': 'Invalid filter spec.', + })) + + +class TestCropToPoint(TestCase): + def test_basic(self): + "Test basic cropping in the centre of the image" + self.assertEqual( + crop_to_point((640, 480), (100, 100), FocalPoint(x=320, y=240)), + CropBox(270, 190, 370, 290), + ) + + def test_basic_no_focal_point(self): + "If focal point is None, it should make one in the centre of the image" + self.assertEqual( + crop_to_point((640, 480), (100, 100), None), + CropBox(270, 190, 370, 290), + ) + + def test_doesnt_exit_top_left(self): + "Test that the cropbox doesn't exit the image at the top left" + self.assertEqual( + crop_to_point((640, 480), (100, 100), FocalPoint(x=0, y=0)), + CropBox(0, 0, 100, 100), + ) + + def test_doesnt_exit_bottom_right(self): + "Test that the cropbox doesn't exit the image at the bottom right" + self.assertEqual( + crop_to_point((640, 480), (100, 100), FocalPoint(x=640, y=480)), + CropBox(540, 380, 640, 480), + ) + + def test_doesnt_get_smaller_than_focal_point(self): + "Test that the cropbox doesn't get any smaller than the focal point" + self.assertEqual( + crop_to_point((640, 480), (10, 10), FocalPoint(x=320, y=240, width=100, height=100)), + CropBox(270, 190, 370, 290), + ) + + def test_keeps_composition(self): + "Test that the cropbox tries to keep the composition of the original image as much as it can" + self.assertEqual( + crop_to_point((300, 300), (150, 150), FocalPoint(x=100, y=200)), + CropBox(50, 100, 200, 250), # Focal point is 1/3 across and 2/3 down in the crop box + ) + + def test_keeps_focal_point_in_view_bottom_left(self): + """ + Even though it tries to keep the composition of the image, + it shouldn't let that get in the way of keeping the entire subject in view + """ + self.assertEqual( + crop_to_point((300, 300), (150, 150), FocalPoint(x=100, y=200, width=150, height=150)), + CropBox(25, 125, 175, 275), + ) + + def test_keeps_focal_point_in_view_top_right(self): + """ + Even though it tries to keep the composition of the image, + it shouldn't let that get in the way of keeping the entire subject in view + """ + self.assertEqual( + crop_to_point((300, 300), (150, 150), FocalPoint(x=200, y=100, width=150, height=150)), + CropBox(125, 25, 275, 175), + ) + diff --git a/wagtail/wagtailimages/urls.py b/wagtail/wagtailimages/urls.py index 4fa4efaf9..add04f13a 100644 --- a/wagtail/wagtailimages/urls.py +++ b/wagtail/wagtailimages/urls.py @@ -1,14 +1,8 @@ from django.conf.urls import url -from wagtail.wagtailimages.views import images, chooser + +from wagtail.wagtailimages.views import frontend + urlpatterns = [ - url(r'^$', images.index, name='wagtailimages_index'), - url(r'^(\d+)/$', images.edit, name='wagtailimages_edit_image'), - url(r'^(\d+)/delete/$', images.delete, name='wagtailimages_delete_image'), - url(r'^add/$', images.add, name='wagtailimages_add_image'), - - url(r'^chooser/$', chooser.chooser, name='wagtailimages_chooser'), - url(r'^chooser/(\d+)/$', chooser.image_chosen, name='wagtailimages_image_chosen'), - url(r'^chooser/upload/$', chooser.chooser_upload, name='wagtailimages_chooser_upload'), - url(r'^chooser/(\d+)/select_format/$', chooser.chooser_select_format, name='wagtailimages_chooser_select_format'), + url(r'^(.*)/(\d*)/(.*)/$', frontend.serve, name='wagtailimages_serve'), ] diff --git a/wagtail/wagtailimages/utils/__init__.py b/wagtail/wagtailimages/utils/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/wagtail/wagtailimages/utils/crop.py b/wagtail/wagtailimages/utils/crop.py new file mode 100644 index 000000000..983f5db88 --- /dev/null +++ b/wagtail/wagtailimages/utils/crop.py @@ -0,0 +1,121 @@ +from __future__ import division + +from wagtail.wagtailimages.utils.focal_point import FocalPoint + + +class CropBox(object): + def __init__(self, left, top, right, bottom): + self.left = int(left) + self.top = int(top) + self.right = int(right) + self.bottom = int(bottom) + + def __getitem__(self, key): + return (self.left, self.top, self.right, self.bottom)[key] + + @property + def width(self): + return self.right - self.left + + @property + def height(self): + return self.bottom - self.top + + @property + def size(self): + return self.width, self.height + + def as_tuple(self): + return self.left, self.top, self.right, self.bottom + + def __eq__(self, other): + return self.as_tuple() == other.as_tuple() + + def __ne__(self, other): + return not (self == other) + + def __repr__(self): + return 'CropBox(left: %d, top: %d, right: %d, bottom: %d)' % ( + self.left, self.top, self.right, self.bottom + ) + + +def crop_to_centre(image_size, crop_size): + (original_width, original_height) = image_size + (crop_width, crop_height) = crop_size + + # final dimensions should not exceed original dimensions + final_width = min(original_width, crop_width) + final_height = min(original_height, crop_height) + + left = (original_width - final_width) / 2 + top = (original_height - final_height) / 2 + + return CropBox(left, top, left + final_width, top + final_height) + + +def crop_to_point(image_size, crop_size, focal_point): + (original_width, original_height) = image_size + (crop_width, crop_height) = crop_size + + if not focal_point: + focal_point = FocalPoint(original_width / 2, original_height / 2) + + # Make sure that the crop size is no smaller than the focal point + crop_width = max(crop_width, focal_point.width) + crop_height = max(crop_height, focal_point.height) + + # Make sure final dimensions do not exceed original dimensions + final_width = min(original_width, crop_width) + final_height = min(original_height, crop_height) + + # Get UV for focal point + focal_point_u = focal_point.x / original_width + focal_point_v = focal_point.y / original_height + + # Get crop box + left = focal_point.x - focal_point_u * final_width + top = focal_point.y - focal_point_v * final_height + right = focal_point.x - focal_point_u * final_width + final_width + bottom = focal_point.y - focal_point_v * final_height + final_height + + # Make sure the entire focal point is in the crop box + focal_point_left = focal_point.x - focal_point.width / 2 + focal_point_top = focal_point.y - focal_point.height / 2 + focal_point_right = focal_point.x + focal_point.width / 2 + focal_point_bottom = focal_point.y + focal_point.height / 2 + + if left > focal_point_left: + right -= left - focal_point_left + left = focal_point_left + + if top > focal_point_top: + bottom -= top - focal_point_top + top = focal_point_top + + if right < focal_point_right: + left += focal_point_right - right; + right = focal_point_right + + if bottom < focal_point_bottom: + top += focal_point_bottom - bottom; + bottom = focal_point_bottom + + # Don't allow the crop box to go over the image boundary + if left < 0: + right -= left + left = 0 + + if top < 0: + bottom -= top + top = 0 + + if right > original_width: + left -= right - original_width + right = original_width + + if bottom > original_height: + top -= bottom - original_height + bottom = original_height + + return CropBox(left, top, right, bottom) diff --git a/wagtail/wagtailimages/utils/crypto.py b/wagtail/wagtailimages/utils/crypto.py new file mode 100644 index 000000000..e631493b7 --- /dev/null +++ b/wagtail/wagtailimages/utils/crypto.py @@ -0,0 +1,16 @@ +import base64 +import hmac +import hashlib + +from django.conf import settings + + +def generate_signature(image_id, filter_spec): + # Based on libthumbor hmac generation + # https://github.com/thumbor/libthumbor/blob/b19dc58cf84787e08c8e397ab322e86268bb4345/libthumbor/crypto.py#L50 + url = str(image_id) + '/' + str(filter_spec) + '/' + return base64.urlsafe_b64encode(hmac.new(settings.SECRET_KEY.encode(), url.encode(), hashlib.sha1).digest()) + + +def verify_signature(signature, image_id, filter_spec): + return signature == generate_signature(image_id, filter_spec) diff --git a/wagtail/wagtailimages/utils/face_detection/haarcascade_frontalface_alt2.xml b/wagtail/wagtailimages/utils/face_detection/haarcascade_frontalface_alt2.xml new file mode 100644 index 000000000..caa86f6c3 --- /dev/null +++ b/wagtail/wagtailimages/utils/face_detection/haarcascade_frontalface_alt2.xml @@ -0,0 +1,23550 @@ +<?xml version="1.0"?> +<!-- + Tree-based 20x20 gentle adaboost frontal face detector. + Created by Rainer Lienhart. + +//////////////////////////////////////////////////////////////////////////////////////// + + IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. + + By downloading, copying, installing or using the software you agree to this license. + If you do not agree to this license, do not download, install, + copy or use the software. + + + Intel License Agreement + For Open Source Computer Vision Library + + Copyright (C) 2000, Intel Corporation, all rights reserved. + Third party copyrights are property of their respective owners. + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + * Redistribution's of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistribution's in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + * The name of Intel Corporation may not be used to endorse or promote products + derived from this software without specific prior written permission. + + This software is provided by the copyright holders and contributors "as is" and + any express or implied warranties, including, but not limited to, the implied + warranties of merchantability and fitness for a particular purpose are disclaimed. + In no event shall the Intel Corporation or contributors be liable for any direct, + indirect, incidental, special, exemplary, or consequential damages + (including, but not limited to, procurement of substitute goods or services; + loss of use, data, or profits; or business interruption) however caused + and on any theory of liability, whether in contract, strict liability, + or tort (including negligence or otherwise) arising in any way out of + the use of this software, even if advised of the possibility of such damage. +--> +<opencv_storage> +<haarcascade_frontalface_alt2 type_id="opencv-haar-classifier"> + <size>20 20</size> + <stages> + <_> + <!-- stage 0 --> + <trees> + <_> + <!-- tree 0 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>2 7 16 4 -1.</_> + <_>2 9 16 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.3272329494357109e-003</threshold> + <left_val>0.0383819006383419</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 4 3 14 -1.</_> + <_>8 11 3 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0130761601030827</threshold> + <left_val>0.8965256810188294</left_val> + <right_val>0.2629314064979553</right_val></_></_> + <_> + <!-- tree 1 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>13 6 1 6 -1.</_> + <_>13 9 1 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.2434601821005344e-004</threshold> + <left_val>0.1021663025021553</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 2 12 8 -1.</_> + <_>8 2 4 8 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.4573000632226467e-003</threshold> + <left_val>0.1238401979207993</left_val> + <right_val>0.6910383105278015</right_val></_></_> + <_> + <!-- tree 2 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 3 1 9 -1.</_> + <_>6 6 1 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-9.2708261217921972e-004</threshold> + <left_node>1</left_node> + <right_val>0.1953697055578232</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 7 14 9 -1.</_> + <_>3 10 14 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.3989109215326607e-004</threshold> + <left_val>0.2101441025733948</left_val> + <right_val>0.8258674740791321</right_val></_></_></trees> + <stage_threshold>0.3506923019886017</stage_threshold> + <parent>-1</parent> + <next>-1</next></_> + <_> + <!-- stage 1 --> + <trees> + <_> + <!-- tree 0 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 7 4 4 -1.</_> + <_>4 9 4 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.3025739938020706e-003</threshold> + <left_val>0.1018375977873802</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 4 2 16 -1.</_> + <_>9 12 2 8 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.4174338690936565e-003</threshold> + <left_val>0.8219057917594910</left_val> + <right_val>0.1956554949283600</right_val></_></_> + <_> + <!-- tree 1 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 1 18 5 -1.</_> + <_>7 1 6 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0222032107412815</threshold> + <left_val>0.2205407023429871</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 5 13 8 -1.</_> + <_>4 9 13 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.7283110355492681e-004</threshold> + <left_val>0.0732632577419281</left_val> + <right_val>0.5931484103202820</right_val></_></_> + <_> + <!-- tree 2 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 7 16 9 -1.</_> + <_>1 10 16 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.3567270040512085e-003</threshold> + <left_val>0.1844114959239960</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>2 0 15 4 -1.</_> + <_>2 2 15 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.6032889727503061e-003</threshold> + <left_val>0.4032213985919952</left_val> + <right_val>0.8066521286964417</right_val></_></_> + <_> + <!-- tree 3 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 5 6 4 -1.</_> + <_>9 5 2 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.7309630056843162e-003</threshold> + <left_val>0.2548328042030335</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 3 8 9 -1.</_> + <_>6 6 8 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.8146401792764664e-003</threshold> + <left_val>0.6057069897651672</left_val> + <right_val>0.2779063880443573</right_val></_></_> + <_> + <!-- tree 4 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 12 3 8 -1.</_> + <_>8 16 3 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.7343417108058929e-003</threshold> + <left_val>0.2889980077743530</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 16 2 2 -1.</_> + <_>3 17 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.4522320432588458e-004</threshold> + <left_val>0.7616587281227112</left_val> + <right_val>0.3495643138885498</right_val></_></_> + <_> + <!-- tree 5 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>14 1 6 12 -1.</_> + <_>14 1 3 12 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0494148582220078</threshold> + <left_node>1</left_node> + <right_val>0.8151652812957764</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 4 12 6 -1.</_> + <_>8 4 4 6 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.4891750440001488e-003</threshold> + <left_val>0.2808783054351807</left_val> + <right_val>0.6027774810791016</right_val></_></_> + <_> + <!-- tree 6 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 2 6 15 -1.</_> + <_>3 2 3 15 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0603136196732521</threshold> + <left_node>1</left_node> + <right_val>0.7607501745223999</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 4 9 6 -1.</_> + <_>5 6 9 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.0762850288301706e-003</threshold> + <left_val>0.4444035887718201</left_val> + <right_val>0.1437312066555023</right_val></_></_> + <_> + <!-- tree 7 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>13 11 6 3 -1.</_> + <_>13 12 6 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-9.5083238556981087e-003</threshold> + <left_node>1</left_node> + <right_val>0.5318170189857483</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 12 6 4 -1.</_> + <_>12 14 6 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.6601309701800346e-003</threshold> + <left_val>0.5411052107810974</left_val> + <right_val>0.2180687040090561</right_val></_></_> + <_> + <!-- tree 8 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 11 6 3 -1.</_> + <_>1 12 6 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.6467678882181644e-003</threshold> + <left_node>1</left_node> + <right_val>0.1158960014581680</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>2 5 5 8 -1.</_> + <_>2 9 5 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.4662932204082608e-004</threshold> + <left_val>0.2340679019689560</left_val> + <right_val>0.5990381836891174</right_val></_></_></trees> + <stage_threshold>3.4721779823303223</stage_threshold> + <parent>0</parent> + <next>-1</next></_> + <_> + <!-- stage 2 --> + <trees> + <_> + <!-- tree 0 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 4 10 4 -1.</_> + <_>5 6 10 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.8506218008697033e-003</threshold> + <left_node>1</left_node> + <right_val>0.1805496066808701</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>2 4 16 12 -1.</_> + <_>2 8 16 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.6141650527715683e-003</threshold> + <left_val>0.2177893966436386</left_val> + <right_val>0.8018236756324768</right_val></_></_> + <_> + <!-- tree 1 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 5 12 6 -1.</_> + <_>8 5 4 6 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.4301309604197741e-003</threshold> + <left_val>0.1141354963183403</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>13 7 2 9 -1.</_> + <_>13 10 2 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.1787960799410939e-004</threshold> + <left_val>0.1203093975782394</left_val> + <right_val>0.6108530759811401</right_val></_></_> + <_> + <!-- tree 2 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 7 2 9 -1.</_> + <_>5 10 2 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.0010929545387626e-003</threshold> + <left_val>0.2079959958791733</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 1 6 8 -1.</_> + <_>9 1 2 8 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.0577100329101086e-003</threshold> + <left_val>0.3302054107189179</left_val> + <right_val>0.7511094212532044</right_val></_></_> + <_> + <!-- tree 3 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 0 4 12 -1.</_> + <_>14 0 2 6 2.</_> + <_>12 6 2 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.2376549420878291e-003</threshold> + <left_node>1</left_node> + <right_val>0.2768222093582153</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 8 10 2 -1.</_> + <_>5 9 10 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.5315038985572755e-004</threshold> + <left_val>0.1668293029069901</left_val> + <right_val>0.5829476714134216</right_val></_></_> + <_> + <!-- tree 4 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 1 6 4 -1.</_> + <_>7 1 2 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0119536602869630</threshold> + <left_val>0.1508788019418716</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 3 9 12 -1.</_> + <_>3 3 3 12 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.4182999730110168e-003</threshold> + <left_val>0.4391227960586548</left_val> + <right_val>0.7646595239639282</right_val></_></_> + <_> + <!-- tree 5 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 8 3 12 -1.</_> + <_>9 12 3 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.4642980899661779e-003</threshold> + <left_node>1</left_node> + <right_val>0.2651556134223938</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 5 20 15 -1.</_> + <_>0 10 20 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0149489501491189</threshold> + <left_val>0.2298053056001663</left_val> + <right_val>0.5442165732383728</right_val></_></_> + <_> + <!-- tree 6 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>2 2 6 8 -1.</_> + <_>2 2 3 4 2.</_> + <_>5 6 3 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.0506849503144622e-003</threshold> + <left_node>1</left_node> + <right_val>0.3622843921184540</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>2 1 6 2 -1.</_> + <_>2 2 6 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.0782918222248554e-003</threshold> + <left_val>0.2601259946823120</left_val> + <right_val>0.7233657836914063</right_val></_></_> + <_> + <!-- tree 7 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>10 15 6 4 -1.</_> + <_>13 15 3 2 2.</_> + <_>10 17 3 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.4242828628048301e-004</threshold> + <left_val>0.3849678933620453</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 14 2 6 -1.</_> + <_>12 16 2 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.3204059153795242e-003</threshold> + <left_val>0.2965512871742249</left_val> + <right_val>0.5480309128761292</right_val></_></_> + <_> + <!-- tree 8 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 15 4 4 -1.</_> + <_>5 15 2 2 2.</_> + <_>7 17 2 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.1421289527788758e-003</threshold> + <left_val>0.4104770123958588</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 18 1 2 -1.</_> + <_>7 19 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.1783400550484657e-003</threshold> + <left_val>0.7239024043083191</left_val> + <right_val>0.2787283957004547</right_val></_></_> + <_> + <!-- tree 9 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 5 12 10 -1.</_> + <_>10 5 6 5 2.</_> + <_>4 10 6 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0440771095454693</threshold> + <left_val>0.5640516281127930</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 4 8 12 -1.</_> + <_>11 4 4 6 2.</_> + <_>7 10 4 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.7900090683251619e-003</threshold> + <left_val>0.5947548151016235</left_val> + <right_val>0.3312020003795624</right_val></_></_> + <_> + <!-- tree 10 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 11 2 3 -1.</_> + <_>9 12 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.4291418958455324e-003</threshold> + <left_val>0.6603232026100159</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 3 12 12 -1.</_> + <_>3 3 6 6 2.</_> + <_>9 9 6 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.4262324273586273e-003</threshold> + <left_val>0.4680665135383606</left_val> + <right_val>0.2064338028430939</right_val></_></_> + <_> + <!-- tree 11 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>15 11 5 3 -1.</_> + <_>15 12 5 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.0630257725715637e-003</threshold> + <left_val>0.5298851132392883</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 18 3 2 -1.</_> + <_>11 18 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.2240812219679356e-003</threshold> + <left_val>0.5281602740287781</left_val> + <right_val>0.1909549981355667</right_val></_></_> + <_> + <!-- tree 12 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 11 5 3 -1.</_> + <_>0 12 5 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.0630568079650402e-003</threshold> + <left_val>0.1380645930767059</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 18 3 2 -1.</_> + <_>8 18 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.6897541508078575e-003</threshold> + <left_val>0.5490636825561523</left_val> + <right_val>0.1260281056165695</right_val></_></_> + <_> + <!-- tree 13 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>2 8 16 2 -1.</_> + <_>2 9 16 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.2472929665818810e-003</threshold> + <left_val>0.2372663021087647</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 6 5 12 -1.</_> + <_>9 12 5 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0495434887707233</threshold> + <left_val>0.5240166187286377</left_val> + <right_val>0.1769216060638428</right_val></_></_></trees> + <stage_threshold>5.9844889640808105</stage_threshold> + <parent>1</parent> + <next>-1</next></_> + <_> + <!-- stage 3 --> + <trees> + <_> + <!-- tree 0 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 3 8 6 -1.</_> + <_>6 6 8 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.9326149746775627e-003</threshold> + <left_node>1</left_node> + <right_val>0.1998064965009689</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 7 12 2 -1.</_> + <_>8 7 4 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.7918140403926373e-005</threshold> + <left_val>0.2299380004405975</left_val> + <right_val>0.7393211126327515</right_val></_></_> + <_> + <!-- tree 1 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>10 9 6 8 -1.</_> + <_>10 13 6 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.0876200180500746e-003</threshold> + <left_node>1</left_node> + <right_val>0.1533840000629425</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 5 3 10 -1.</_> + <_>12 10 3 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.4669660534709692e-006</threshold> + <left_val>0.2036858946084976</left_val> + <right_val>0.5854915976524353</right_val></_></_> + <_> + <!-- tree 2 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 6 3 9 -1.</_> + <_>4 9 3 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.8739729421213269e-003</threshold> + <left_val>0.2049895972013474</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 4 6 4 -1.</_> + <_>9 4 2 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.3380251200869679e-004</threshold> + <left_val>0.3234199881553650</left_val> + <right_val>0.7323014140129089</right_val></_></_> + <_> + <!-- tree 3 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 3 8 3 -1.</_> + <_>12 3 4 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.9151850137859583e-003</threshold> + <left_val>0.3045149147510529</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>15 0 3 6 -1.</_> + <_>15 3 3 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.9683797881007195e-003</threshold> + <left_val>0.2932133972644806</left_val> + <right_val>0.5621296167373657</right_val></_></_> + <_> + <!-- tree 4 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>2 12 10 8 -1.</_> + <_>2 12 5 4 2.</_> + <_>7 16 5 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.2115601506084204e-004</threshold> + <left_val>0.3658036887645721</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 5 6 8 -1.</_> + <_>5 9 6 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.9663117863237858e-003</threshold> + <left_val>0.2712155878543854</left_val> + <right_val>0.7226334810256958</right_val></_></_> + <_> + <!-- tree 5 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 3 8 3 -1.</_> + <_>12 3 4 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0308741796761751</threshold> + <left_val>0.4419837892055512</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>15 0 3 6 -1.</_> + <_>15 3 3 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0110997101292014</threshold> + <left_val>0.3612976968288422</left_val> + <right_val>0.5251451134681702</right_val></_></_> + <_> + <!-- tree 6 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 3 8 3 -1.</_> + <_>4 3 4 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.1164179779589176e-003</threshold> + <left_val>0.3628616929054260</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>2 1 4 4 -1.</_> + <_>2 3 4 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-9.4317439943552017e-003</threshold> + <left_val>0.1601095050573349</left_val> + <right_val>0.7052276730537415</right_val></_></_> + <_> + <!-- tree 7 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>10 2 3 2 -1.</_> + <_>11 2 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.5266019403934479e-003</threshold> + <left_val>0.1301288008689880</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 3 3 1 -1.</_> + <_>11 3 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.6907559474930167e-003</threshold> + <left_val>0.1786323934793472</left_val> + <right_val>0.5521529912948608</right_val></_></_> + <_> + <!-- tree 8 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 15 3 4 -1.</_> + <_>7 17 3 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.6470930101349950e-004</threshold> + <left_val>0.3487383127212524</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 13 3 6 -1.</_> + <_>4 15 3 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0102155702188611</threshold> + <left_val>0.2673991024494171</left_val> + <right_val>0.6667919158935547</right_val></_></_> + <_> + <!-- tree 9 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>10 5 1 14 -1.</_> + <_>10 12 1 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.2634709710255265e-003</threshold> + <left_node>1</left_node> + <right_val>0.3437863886356354</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 4 10 6 -1.</_> + <_>5 6 10 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0118752997368574</threshold> + <left_val>0.5995336174964905</left_val> + <right_val>0.3497717976570129</right_val></_></_> + <_> + <!-- tree 10 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 0 6 3 -1.</_> + <_>7 0 2 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0107323396950960</threshold> + <left_val>0.2150489985942841</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 0 3 5 -1.</_> + <_>7 0 1 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.1836481802165508e-003</threshold> + <left_val>0.6271436214447022</left_val> + <right_val>0.2519541978836060</right_val></_></_> + <_> + <!-- tree 11 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 15 6 5 -1.</_> + <_>9 15 2 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0283408891409636</threshold> + <left_val>0.0824118927121162</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 10 2 6 -1.</_> + <_>9 12 2 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.5813230099156499e-004</threshold> + <left_val>0.5910056829452515</left_val> + <right_val>0.3705201148986816</right_val></_></_> + <_> + <!-- tree 12 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 17 3 2 -1.</_> + <_>9 17 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.2940340936183929e-003</threshold> + <left_node>1</left_node> + <right_val>0.1594727933406830</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 12 7 6 -1.</_> + <_>1 14 7 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0107510797679424</threshold> + <left_val>0.5980480909347534</left_val> + <right_val>0.2832508087158203</right_val></_></_> + <_> + <!-- tree 13 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 6 3 7 -1.</_> + <_>10 6 1 7 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0224651191383600</threshold> + <left_node>1</left_node> + <right_val>0.7877091169357300</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>16 3 4 9 -1.</_> + <_>16 6 4 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0579885393381119</threshold> + <left_val>0.1555740982294083</left_val> + <right_val>0.5239657163619995</right_val></_></_> + <_> + <!-- tree 14 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 6 3 7 -1.</_> + <_>9 6 1 7 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.2110891342163086e-003</threshold> + <left_node>1</left_node> + <right_val>0.6620365977287293</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 5 18 8 -1.</_> + <_>0 5 9 4 2.</_> + <_>9 9 9 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0483675710856915</threshold> + <left_val>0.1424719989299774</left_val> + <right_val>0.4429833889007568</right_val></_></_> + <_> + <!-- tree 15 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>13 5 2 10 -1.</_> + <_>13 10 2 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0144180599600077</threshold> + <left_val>0.1588540971279144</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 10 2 6 -1.</_> + <_>12 13 2 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0231563895940781</threshold> + <left_val>0.2375798970460892</left_val> + <right_val>0.5217134952545166</right_val></_></_> + <_> + <!-- tree 16 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 0 3 5 -1.</_> + <_>8 0 1 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.6985340565443039e-003</threshold> + <left_node>1</left_node> + <right_val>0.1941725015640259</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 5 8 6 -1.</_> + <_>6 7 8 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.6248619221150875e-003</threshold> + <left_val>0.6278405785560608</left_val> + <right_val>0.3746044933795929</right_val></_></_> + <_> + <!-- tree 17 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>10 3 6 14 -1.</_> + <_>13 3 3 7 2.</_> + <_>10 10 3 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.2936748620122671e-004</threshold> + <left_node>1</left_node> + <right_val>0.3840922117233276</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>13 5 1 8 -1.</_> + <_>13 9 1 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.1783898854628205e-004</threshold> + <left_val>0.3106493055820465</left_val> + <right_val>0.5537847280502319</right_val></_></_> + <_> + <!-- tree 18 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 3 6 14 -1.</_> + <_>4 3 3 7 2.</_> + <_>7 10 3 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.5803939428878948e-005</threshold> + <left_node>1</left_node> + <right_val>0.3444449007511139</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 5 1 8 -1.</_> + <_>6 9 1 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.4719359569426160e-005</threshold> + <left_val>0.2729552090167999</left_val> + <right_val>0.6428951025009155</right_val></_></_></trees> + <stage_threshold>8.5117864608764648</stage_threshold> + <parent>2</parent> + <next>-1</next></_> + <_> + <!-- stage 4 --> + <trees> + <_> + <!-- tree 0 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 1 1 6 -1.</_> + <_>8 3 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.3469370314851403e-003</threshold> + <left_val>0.1657086014747620</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>2 0 15 2 -1.</_> + <_>2 1 15 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.4774789344519377e-003</threshold> + <left_val>0.2273851037025452</left_val> + <right_val>0.6989349722862244</right_val></_></_> + <_> + <!-- tree 1 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 7 20 6 -1.</_> + <_>0 9 20 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.2632777951657772e-003</threshold> + <left_val>0.1512074023485184</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 10 6 8 -1.</_> + <_>10 14 6 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.9075339920818806e-003</threshold> + <left_val>0.5564470291137695</left_val> + <right_val>0.1605442017316818</right_val></_></_> + <_> + <!-- tree 2 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 1 3 2 -1.</_> + <_>8 1 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.3254349362105131e-003</threshold> + <left_val>0.1880259066820145</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 1 2 2 -1.</_> + <_>9 1 1 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.4665479538962245e-003</threshold> + <left_val>0.3122498989105225</left_val> + <right_val>0.7165396213531494</right_val></_></_> + <_> + <!-- tree 3 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 3 12 9 -1.</_> + <_>4 6 12 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.1231169030070305</threshold> + <left_node>1</left_node> + <right_val>0.3859583139419556</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 5 9 5 -1.</_> + <_>9 5 3 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.2108340635895729e-003</threshold> + <left_val>0.2455293983221054</left_val> + <right_val>0.5695710182189941</right_val></_></_> + <_> + <!-- tree 4 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 5 9 5 -1.</_> + <_>8 5 3 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.0661531016230583e-003</threshold> + <left_val>0.2716520130634308</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 6 6 12 -1.</_> + <_>4 10 6 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.6130280932411551e-004</threshold> + <left_val>0.2293362021446228</left_val> + <right_val>0.7208629846572876</right_val></_></_> + <_> + <!-- tree 5 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>13 0 6 18 -1.</_> + <_>13 0 3 18 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0799578726291656</threshold> + <left_node>1</left_node> + <right_val>0.7833620905876160</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 8 1 12 -1.</_> + <_>10 12 1 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.6064720004796982e-003</threshold> + <left_val>0.5545232295989990</left_val> + <right_val>0.2550689876079559</right_val></_></_> + <_> + <!-- tree 6 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 2 6 10 -1.</_> + <_>3 2 3 5 2.</_> + <_>6 7 3 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.5699010156095028e-003</threshold> + <left_node>1</left_node> + <right_val>0.1819390058517456</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 2 4 6 -1.</_> + <_>3 2 2 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.6259610420092940e-003</threshold> + <left_val>0.3529875874519348</left_val> + <right_val>0.6552819013595581</right_val></_></_> + <_> + <!-- tree 7 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 18 3 2 -1.</_> + <_>10 18 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.6204981151968241e-003</threshold> + <left_val>0.5462309718132019</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 18 3 2 -1.</_> + <_>11 18 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.4391951523721218e-003</threshold> + <left_val>0.1359843015670776</left_val> + <right_val>0.5415815114974976</right_val></_></_> + <_> + <!-- tree 8 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>2 8 2 6 -1.</_> + <_>2 10 2 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-9.0540945529937744e-003</threshold> + <left_val>0.1115119978785515</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 5 6 6 -1.</_> + <_>7 7 6 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.6067481162026525e-004</threshold> + <left_val>0.5846719741821289</left_val> + <right_val>0.2598348855972290</right_val></_></_> + <_> + <!-- tree 9 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 19 6 1 -1.</_> + <_>9 19 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.6621041148900986e-003</threshold> + <left_val>0.1610569059848785</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 18 3 2 -1.</_> + <_>11 18 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.1165837794542313e-003</threshold> + <left_val>0.5376678705215454</left_val> + <right_val>0.1739455014467239</right_val></_></_> + <_> + <!-- tree 10 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 3 3 1 -1.</_> + <_>9 3 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.1362339612096548e-003</threshold> + <left_val>0.1902073025703430</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>2 2 16 2 -1.</_> + <_>2 2 8 1 2.</_> + <_>10 3 8 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.4809921421110630e-003</threshold> + <left_val>0.3272008001804352</left_val> + <right_val>0.6364840865135193</right_val></_></_> + <_> + <!-- tree 11 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 11 5 3 -1.</_> + <_>8 12 5 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.1061907112598419e-003</threshold> + <left_val>0.6914852857589722</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 13 6 3 -1.</_> + <_>7 14 6 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.0048708692193031e-003</threshold> + <left_val>0.4327326118946075</left_val> + <right_val>0.6963843107223511</right_val></_></_> + <_> + <!-- tree 12 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 1 6 15 -1.</_> + <_>2 1 2 15 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0870285481214523</threshold> + <left_val>0.8594133853912354</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>2 12 2 3 -1.</_> + <_>2 13 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.7809639945626259e-003</threshold> + <left_val>0.0973944664001465</left_val> + <right_val>0.4587030112743378</right_val></_></_> + <_> + <!-- tree 13 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>16 13 1 3 -1.</_> + <_>16 14 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.2166660055518150e-003</threshold> + <left_val>0.2554625868797302</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>13 7 6 4 -1.</_> + <_>16 7 3 2 2.</_> + <_>13 9 3 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.3642730191349983e-003</threshold> + <left_val>0.3319090902805328</left_val> + <right_val>0.5964102745056152</right_val></_></_> + <_> + <!-- tree 14 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 13 3 6 -1.</_> + <_>7 16 3 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-9.0077864006161690e-003</threshold> + <left_val>0.2666594982147217</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 5 1 14 -1.</_> + <_>7 12 1 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0154941203072667</threshold> + <left_val>0.1848185956478119</left_val> + <right_val>0.6245970726013184</right_val></_></_> + <_> + <!-- tree 15 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>15 12 2 3 -1.</_> + <_>15 13 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.2165028862655163e-003</threshold> + <left_node>1</left_node> + <right_val>0.5379927158355713</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 5 3 14 -1.</_> + <_>10 12 3 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0432497598230839</threshold> + <left_val>0.5183029174804688</left_val> + <right_val>0.2170419991016388</right_val></_></_> + <_> + <!-- tree 16 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 10 2 6 -1.</_> + <_>6 13 2 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.8786511393263936e-004</threshold> + <left_node>1</left_node> + <right_val>0.2613384127616882</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 5 1 8 -1.</_> + <_>6 9 1 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.2373150093480945e-003</threshold> + <left_val>0.2786532044410706</left_val> + <right_val>0.5908988118171692</right_val></_></_> + <_> + <!-- tree 17 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>13 11 2 1 -1.</_> + <_>13 11 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.9528300035744905e-003</threshold> + <left_node>1</left_node> + <right_val>0.2612869143486023</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 1 6 10 -1.</_> + <_>15 1 3 5 2.</_> + <_>12 6 3 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.4947060262784362e-003</threshold> + <left_val>0.5915412902832031</left_val> + <right_val>0.3455781936645508</right_val></_></_> + <_> + <!-- tree 18 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 12 2 3 -1.</_> + <_>3 13 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.5878680646419525e-003</threshold> + <left_node>1</left_node> + <right_val>0.1587052047252655</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 18 2 1 -1.</_> + <_>10 18 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.5938691105693579e-003</threshold> + <left_val>0.1270411014556885</left_val> + <right_val>0.5979428887367249</right_val></_></_></trees> + <stage_threshold>8.4680156707763672</stage_threshold> + <parent>3</parent> + <next>-1</next></_> + <_> + <!-- stage 5 --> + <trees> + <_> + <!-- tree 0 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 0 17 9 -1.</_> + <_>1 3 17 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.5810680128633976e-003</threshold> + <left_val>0.1995104998350143</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 2 8 8 -1.</_> + <_>1 2 4 4 2.</_> + <_>5 6 4 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.8552350122481585e-003</threshold> + <left_val>0.7373070120811462</left_val> + <right_val>0.2921737134456635</right_val></_></_> + <_> + <!-- tree 1 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 5 6 4 -1.</_> + <_>9 5 3 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.9758539274334908e-003</threshold> + <left_val>0.1956419944763184</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 9 7 10 -1.</_> + <_>10 14 7 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.2583118882030249e-003</threshold> + <left_val>0.5692046880722046</left_val> + <right_val>0.1839064955711365</right_val></_></_> + <_> + <!-- tree 2 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 5 6 4 -1.</_> + <_>8 5 3 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.3711679386906326e-004</threshold> + <left_val>0.2171667069196701</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 7 20 6 -1.</_> + <_>0 9 20 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.5942500215023756e-003</threshold> + <left_val>0.2719989120960236</left_val> + <right_val>0.7150244116783142</right_val></_></_> + <_> + <!-- tree 3 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 5 9 10 -1.</_> + <_>6 10 9 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0250324495136738</threshold> + <left_val>0.1825183928012848</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 4 4 12 -1.</_> + <_>8 10 4 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.3087949529290199e-003</threshold> + <left_val>0.5699837803840637</left_val> + <right_val>0.3509852886199951</right_val></_></_> + <_> + <!-- tree 4 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 6 8 3 -1.</_> + <_>6 7 8 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.2494920305907726e-003</threshold> + <left_node>1</left_node> + <right_val>0.4023926854133606</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 13 10 6 -1.</_> + <_>3 13 5 3 2.</_> + <_>8 16 5 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0148857301101089</threshold> + <left_val>0.3604095876216888</left_val> + <right_val>0.7291995286941528</right_val></_></_> + <_> + <!-- tree 5 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>15 1 4 11 -1.</_> + <_>15 1 2 11 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.0623216927051544e-003</threshold> + <left_node>1</left_node> + <right_val>0.6491490006446838</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 7 10 10 -1.</_> + <_>10 7 5 5 2.</_> + <_>5 12 5 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0274056792259216</threshold> + <left_val>0.5518993139266968</left_val> + <right_val>0.2659681141376495</right_val></_></_> + <_> + <!-- tree 6 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 1 4 11 -1.</_> + <_>3 1 2 11 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0343686006963253</threshold> + <left_node>1</left_node> + <right_val>0.6712512969970703</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 5 8 12 -1.</_> + <_>1 11 8 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0272929705679417</threshold> + <left_val>0.1691378057003021</left_val> + <right_val>0.4326277971267700</right_val></_></_> + <_> + <!-- tree 7 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>13 7 6 4 -1.</_> + <_>16 7 3 2 2.</_> + <_>13 9 3 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.4452121043577790e-004</threshold> + <left_val>0.3405100107192993</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>11 10 7 4 -1.</_> + <_>11 12 7 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.0336280623450875e-004</threshold> + <left_val>0.5516793131828308</left_val> + <right_val>0.3311387896537781</right_val></_></_> + <_> + <!-- tree 8 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 4 20 12 -1.</_> + <_>0 4 10 6 2.</_> + <_>10 10 10 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.1227546036243439</threshold> + <left_val>0.1675315052270889</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 5 6 15 -1.</_> + <_>1 10 6 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.2559928949922323e-003</threshold> + <left_val>0.3615751862525940</left_val> + <right_val>0.6420782804489136</right_val></_></_> + <_> + <!-- tree 9 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>11 10 3 8 -1.</_> + <_>11 14 3 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0320903994143009</threshold> + <left_val>0.2921079099178314</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>11 12 7 6 -1.</_> + <_>11 14 7 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.2957999501377344e-003</threshold> + <left_val>0.5613031983375549</left_val> + <right_val>0.3357860147953033</right_val></_></_> + <_> + <!-- tree 10 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 11 2 3 -1.</_> + <_>9 12 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.2273170072585344e-003</threshold> + <left_val>0.6970642805099487</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 13 4 3 -1.</_> + <_>8 14 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.1171669466421008e-003</threshold> + <left_val>0.3541150093078613</left_val> + <right_val>0.6144006252288818</right_val></_></_> + <_> + <!-- tree 11 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 14 14 4 -1.</_> + <_>10 14 7 2 2.</_> + <_>3 16 7 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0172799509018660</threshold> + <left_node>1</left_node> + <right_val>0.5537180900573731</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>18 7 2 4 -1.</_> + <_>18 9 2 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0117412004619837</threshold> + <left_val>0.5341957211494446</left_val> + <right_val>0.2757104933261871</right_val></_></_> + <_> + <!-- tree 12 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 12 6 6 -1.</_> + <_>3 14 6 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.6405228786170483e-003</threshold> + <left_node>1</left_node> + <right_val>0.2489521056413651</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 4 3 6 -1.</_> + <_>0 6 3 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0169130302965641</threshold> + <left_val>0.1711928993463516</left_val> + <right_val>0.5523952841758728</right_val></_></_> + <_> + <!-- tree 13 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 14 3 3 -1.</_> + <_>9 15 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0100601697340608</threshold> + <left_node>1</left_node> + <right_val>0.8273450732231140</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 7 10 4 -1.</_> + <_>15 7 5 2 2.</_> + <_>10 9 5 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.0715491417795420e-004</threshold> + <left_val>0.3779391050338745</left_val> + <right_val>0.5476251840591431</right_val></_></_> + <_> + <!-- tree 14 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 2 6 8 -1.</_> + <_>7 6 6 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.0865400545299053e-003</threshold> + <left_node>1</left_node> + <right_val>0.3296540975570679</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 3 6 2 -1.</_> + <_>8 3 2 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.9362077414989471e-003</threshold> + <left_val>0.6062883734703064</left_val> + <right_val>0.2434220016002655</right_val></_></_> + <_> + <!-- tree 15 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>10 6 3 5 -1.</_> + <_>11 6 1 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.6372660067863762e-004</threshold> + <left_node>1</left_node> + <right_val>0.3814094960689545</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 0 6 19 -1.</_> + <_>11 0 2 19 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0131100500002503</threshold> + <left_val>0.5517616271972656</left_val> + <right_val>0.3726893067359924</right_val></_></_> + <_> + <!-- tree 16 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 12 1 2 -1.</_> + <_>3 13 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.9806280508637428e-003</threshold> + <left_val>0.1229664012789726</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 14 5 3 -1.</_> + <_>7 15 5 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.1619571857154369e-003</threshold> + <left_val>0.7252274751663208</left_val> + <right_val>0.4973455071449280</right_val></_></_> + <_> + <!-- tree 17 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>2 1 18 4 -1.</_> + <_>11 1 9 2 2.</_> + <_>2 3 9 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0338423289358616</threshold> + <left_val>0.5348312854766846</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 5 3 8 -1.</_> + <_>11 5 1 8 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.2564560165628791e-003</threshold> + <left_val>0.5851914882659912</left_val> + <right_val>0.4384166896343231</right_val></_></_> + <_> + <!-- tree 18 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 1 18 4 -1.</_> + <_>0 1 9 2 2.</_> + <_>9 3 9 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0196352303028107</threshold> + <left_val>0.2297834008932114</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 5 3 8 -1.</_> + <_>8 5 1 8 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-9.9625496659427881e-004</threshold> + <left_val>0.6295937895774841</left_val> + <right_val>0.4131599068641663</right_val></_></_> + <_> + <!-- tree 19 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 5 2 6 -1.</_> + <_>9 7 2 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0231271106749773</threshold> + <left_val>0.1695459038019180</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 8 5 2 -1.</_> + <_>10 9 5 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0235257092863321</threshold> + <left_val>0.5174130201339722</left_val> + <right_val>0.0595193915069103</right_val></_></_> + <_> + <!-- tree 20 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>2 10 15 1 -1.</_> + <_>7 10 5 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0193565208464861</threshold> + <left_val>0.1357247978448868</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>2 7 2 6 -1.</_> + <_>2 9 2 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.1787112131714821e-003</threshold> + <left_val>0.2996628880500794</left_val> + <right_val>0.5791695117950440</right_val></_></_> + <_> + <!-- tree 21 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 14 3 3 -1.</_> + <_>9 15 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.1488779932260513e-003</threshold> + <left_node>1</left_node> + <right_val>0.6592589020729065</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 7 4 10 -1.</_> + <_>9 12 4 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.3972279205918312e-003</threshold> + <left_val>0.5307171940803528</left_val> + <right_val>0.3795121014118195</right_val></_></_> + <_> + <!-- tree 22 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 8 8 2 -1.</_> + <_>0 8 4 1 2.</_> + <_>4 9 4 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.1955118983169086e-006</threshold> + <left_val>0.3128314912319183</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 9 10 8 -1.</_> + <_>5 9 5 4 2.</_> + <_>10 13 5 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0471144095063210</threshold> + <left_val>0.5537893176078796</left_val> + <right_val>0.1027309000492096</right_val></_></_> + <_> + <!-- tree 23 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 7 2 4 -1.</_> + <_>9 7 1 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.2878710925579071e-003</threshold> + <left_val>0.4660859107971191</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 6 3 4 -1.</_> + <_>10 6 1 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.1887511983513832e-003</threshold> + <left_val>0.7158858180046082</left_val> + <right_val>0.4724448919296265</right_val></_></_> + <_> + <!-- tree 24 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 3 2 1 -1.</_> + <_>9 3 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.9757320880889893e-003</threshold> + <left_node>1</left_node> + <right_val>0.0593456886708736</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 6 3 4 -1.</_> + <_>9 6 1 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.8449809867888689e-003</threshold> + <left_val>0.7027301788330078</left_val> + <right_val>0.4718731045722961</right_val></_></_> + <_> + <!-- tree 25 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 0 4 14 -1.</_> + <_>14 0 2 7 2.</_> + <_>12 7 2 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.0239540279144421e-004</threshold> + <left_val>0.5894734263420105</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 5 6 9 -1.</_> + <_>12 5 3 9 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.4277009069919586e-003</threshold> + <left_val>0.4862355887889862</left_val> + <right_val>0.5247588157653809</right_val></_></_> + <_> + <!-- tree 26 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 2 6 16 -1.</_> + <_>3 2 3 16 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0647513121366501</threshold> + <left_val>0.6917471289634705</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 12 4 2 -1.</_> + <_>1 13 4 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.9380151429213583e-004</threshold> + <left_val>0.4669617116451263</left_val> + <right_val>0.2382405996322632</right_val></_></_></trees> + <stage_threshold>12.5784997940063480</stage_threshold> + <parent>4</parent> + <next>-1</next></_> + <_> + <!-- stage 6 --> + <trees> + <_> + <!-- tree 0 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 7 6 1 -1.</_> + <_>9 7 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.4397440245375037e-003</threshold> + <left_val>0.2773470878601074</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 3 4 9 -1.</_> + <_>8 6 4 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.4068560712039471e-004</threshold> + <left_val>0.7427154779434204</left_val> + <right_val>0.2479735016822815</right_val></_></_> + <_> + <!-- tree 1 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 10 4 6 -1.</_> + <_>12 13 4 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.1237959673453588e-006</threshold> + <left_node>1</left_node> + <right_val>0.2199503034353256</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 1 8 16 -1.</_> + <_>12 1 4 8 2.</_> + <_>8 9 4 8 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.3661039303988218e-003</threshold> + <left_val>0.5889989733695984</left_val> + <right_val>0.2595716118812561</right_val></_></_> + <_> + <!-- tree 2 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 6 3 6 -1.</_> + <_>4 9 3 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.7343269428238273e-003</threshold> + <left_val>0.1860125958919525</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 3 6 2 -1.</_> + <_>4 3 3 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.5874590026214719e-003</threshold> + <left_val>0.4151870906352997</left_val> + <right_val>0.7103474140167236</right_val></_></_> + <_> + <!-- tree 3 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 8 3 12 -1.</_> + <_>9 12 3 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.7285638973116875e-003</threshold> + <left_node>1</left_node> + <right_val>0.2527967095375061</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 9 7 10 -1.</_> + <_>10 14 7 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.1288381963968277</threshold> + <left_val>0.1393000930547714</left_val> + <right_val>0.5254514813423157</right_val></_></_> + <_> + <!-- tree 4 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 9 7 10 -1.</_> + <_>3 14 7 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.9412180930376053e-003</threshold> + <left_node>1</left_node> + <right_val>0.2487729042768478</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 5 1 14 -1.</_> + <_>7 12 1 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0126617299392819</threshold> + <left_val>0.2710700035095215</left_val> + <right_val>0.6618837714195252</right_val></_></_> + <_> + <!-- tree 5 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>13 14 1 6 -1.</_> + <_>13 16 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.0146789868013002e-005</threshold> + <left_val>0.3812825977802277</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>14 12 3 6 -1.</_> + <_>14 14 3 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0163301602005959</threshold> + <left_val>0.2326432019472122</left_val> + <right_val>0.5263010859489441</right_val></_></_> + <_> + <!-- tree 6 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 14 1 6 -1.</_> + <_>6 16 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.4622770322603174e-005</threshold> + <left_val>0.4293332099914551</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 12 3 6 -1.</_> + <_>3 14 3 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0208586603403091</threshold> + <left_val>0.1600403934717178</left_val> + <right_val>0.6782314777374268</right_val></_></_> + <_> + <!-- tree 7 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 13 5 3 -1.</_> + <_>8 14 5 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.8194559272378683e-003</threshold> + <left_node>1</left_node> + <right_val>0.6679294109344482</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 14 2 3 -1.</_> + <_>9 15 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.7899368908256292e-003</threshold> + <left_val>0.4587705135345459</left_val> + <right_val>0.7176238894462585</right_val></_></_> + <_> + <!-- tree 8 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 1 10 8 -1.</_> + <_>5 1 5 4 2.</_> + <_>10 5 5 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0353446416556835</threshold> + <left_node>1</left_node> + <right_val>0.1864075064659119</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 4 5 4 -1.</_> + <_>6 6 5 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.1571600334718823e-003</threshold> + <left_val>0.5538259744644165</left_val> + <right_val>0.3150450885295868</right_val></_></_> + <_> + <!-- tree 9 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 10 18 1 -1.</_> + <_>7 10 6 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.8742752298712730e-003</threshold> + <left_val>0.2828791141510010</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>11 10 4 3 -1.</_> + <_>11 10 2 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.5201780115603469e-005</threshold> + <left_val>0.5870224237442017</left_val> + <right_val>0.3704823851585388</right_val></_></_> + <_> + <!-- tree 10 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 11 6 1 -1.</_> + <_>7 11 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.2681879636365920e-004</threshold> + <left_node>1</left_node> + <right_val>0.4218930900096893</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 13 2 3 -1.</_> + <_>3 14 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.7845689803361893e-003</threshold> + <left_val>0.6667001247406006</left_val> + <right_val>0.2461182028055191</right_val></_></_> + <_> + <!-- tree 11 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 12 3 4 -1.</_> + <_>12 14 3 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.5295992903411388e-005</threshold> + <left_node>1</left_node> + <right_val>0.3557587862014771</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>11 10 5 6 -1.</_> + <_>11 12 5 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0443948917090893</threshold> + <left_val>0.1665547043085098</left_val> + <right_val>0.5234848856925964</right_val></_></_> + <_> + <!-- tree 12 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 8 16 2 -1.</_> + <_>0 9 16 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.0126030538231134e-003</threshold> + <left_val>0.2884612977504730</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>2 1 3 4 -1.</_> + <_>2 3 3 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.6327780261635780e-003</threshold> + <left_val>0.2969340085983276</left_val> + <right_val>0.6080111265182495</right_val></_></_> + <_> + <!-- tree 13 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 7 3 3 -1.</_> + <_>10 7 1 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.0330411866307259e-003</threshold> + <left_val>0.4536390006542206</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 6 12 6 -1.</_> + <_>9 6 4 6 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.1367668956518173</threshold> + <left_val>0.5177264213562012</left_val> + <right_val>0.1449182033538818</right_val></_></_> + <_> + <!-- tree 14 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 7 3 3 -1.</_> + <_>9 7 1 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.0060478970408440e-003</threshold> + <left_val>0.7616909742355347</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 6 12 6 -1.</_> + <_>7 6 4 6 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0124758398160338</threshold> + <left_val>0.2159706056118012</left_val> + <right_val>0.5460187792778015</right_val></_></_> + <_> + <!-- tree 15 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>10 5 6 5 -1.</_> + <_>12 5 2 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-9.4012258341535926e-004</threshold> + <left_node>1</left_node> + <right_val>0.3926295936107636</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 7 10 2 -1.</_> + <_>5 7 5 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0121919801458716</threshold> + <left_val>0.3478881120681763</left_val> + <right_val>0.5542662739753723</right_val></_></_> + <_> + <!-- tree 16 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 5 6 5 -1.</_> + <_>6 5 2 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.4959481349214911e-004</threshold> + <left_val>0.6064276099205017</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 3 2 10 -1.</_> + <_>9 8 2 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.1802430273965001e-004</threshold> + <left_val>0.5697407126426697</left_val> + <right_val>0.1779713928699493</right_val></_></_> + <_> + <!-- tree 17 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 1 16 2 -1.</_> + <_>11 1 8 1 2.</_> + <_>3 2 8 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.9115799851715565e-003</threshold> + <left_val>0.5379372239112854</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 9 3 2 -1.</_> + <_>9 10 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-9.7631698008626699e-004</threshold> + <left_val>0.3327839076519013</left_val> + <right_val>0.5461531281471252</right_val></_></_> + <_> + <!-- tree 18 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 1 16 2 -1.</_> + <_>1 1 8 1 2.</_> + <_>9 2 8 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.7870173156261444e-003</threshold> + <left_val>0.2116160988807678</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 14 1 3 -1.</_> + <_>8 15 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.6761029837653041e-003</threshold> + <left_val>0.6635823249816895</left_val> + <right_val>0.4365859031677246</right_val></_></_> + <_> + <!-- tree 19 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 5 12 10 -1.</_> + <_>10 5 6 5 2.</_> + <_>4 10 6 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0556949488818645</threshold> + <left_node>1</left_node> + <right_val>0.5387424826622009</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 13 6 6 -1.</_> + <_>10 13 3 3 2.</_> + <_>7 16 3 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0198443792760372</threshold> + <left_val>0.1602804958820343</left_val> + <right_val>0.5330458879470825</right_val></_></_> + <_> + <!-- tree 20 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 9 3 2 -1.</_> + <_>8 10 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.4751611100509763e-004</threshold> + <left_val>0.2917476892471314</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 2 6 4 -1.</_> + <_>9 2 2 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0230328906327486</threshold> + <left_val>0.5608124136924744</left_val> + <right_val>0.1997981071472168</right_val></_></_> + <_> + <!-- tree 21 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 6 9 3 -1.</_> + <_>6 7 9 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.0700280331075191e-003</threshold> + <left_node>1</left_node> + <right_val>0.3938314020633698</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 7 6 1 -1.</_> + <_>12 7 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.1636839481070638e-003</threshold> + <left_val>0.5757436156272888</left_val> + <right_val>0.4239456951618195</right_val></_></_> + <_> + <!-- tree 22 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 0 18 6 -1.</_> + <_>6 0 6 6 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.2246433943510056</threshold> + <left_node>1</left_node> + <right_val>0.7676553130149841</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 10 2 6 -1.</_> + <_>6 13 2 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.4412109740078449e-003</threshold> + <left_val>0.5353866219520569</left_val> + <right_val>0.2514776885509491</right_val></_></_> + <_> + <!-- tree 23 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>11 12 3 6 -1.</_> + <_>11 15 3 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0300112497061491</threshold> + <left_val>0.2364903986454010</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 4 12 12 -1.</_> + <_>10 4 6 6 2.</_> + <_>4 10 6 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0530789606273174</threshold> + <left_val>0.2385863959789276</left_val> + <right_val>0.5414664745330811</right_val></_></_> + <_> + <!-- tree 24 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 2 3 6 -1.</_> + <_>2 2 1 6 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.0800929050892591e-003</threshold> + <left_node>1</left_node> + <right_val>0.6511614918708801</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 5 3 7 -1.</_> + <_>2 5 1 7 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.0738182142376900e-003</threshold> + <left_val>0.6030414104461670</left_val> + <right_val>0.3587701022624970</right_val></_></_> + <_> + <!-- tree 25 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 13 12 4 -1.</_> + <_>10 13 6 2 2.</_> + <_>4 15 6 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0195293705910444</threshold> + <left_node>1</left_node> + <right_val>0.5423592925071716</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 3 17 12 -1.</_> + <_>3 9 17 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0533094704151154</threshold> + <left_val>0.2360953986644745</left_val> + <right_val>0.5401757955551148</right_val></_></_> + <_> + <!-- tree 26 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 3 14 12 -1.</_> + <_>3 3 7 6 2.</_> + <_>10 9 7 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0348495617508888</threshold> + <left_val>0.2836985886096954</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>2 11 16 9 -1.</_> + <_>2 14 16 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.1265845000743866</threshold> + <left_val>0.1813516020774841</left_val> + <right_val>0.5421046018600464</right_val></_></_> + <_> + <!-- tree 27 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 14 3 6 -1.</_> + <_>9 17 3 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.3325118137290701e-006</threshold> + <left_val>0.3980365991592407</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 14 4 6 -1.</_> + <_>10 14 2 3 2.</_> + <_>8 17 2 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0118438703939319</threshold> + <left_val>0.2616384923458099</left_val> + <right_val>0.5237730145454407</right_val></_></_> + <_> + <!-- tree 28 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 2 6 1 -1.</_> + <_>8 2 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.8470678739249706e-003</threshold> + <left_val>0.2438108026981354</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 5 2 5 -1.</_> + <_>10 5 1 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.1693977117538452e-003</threshold> + <left_val>0.5327146053314209</left_val> + <right_val>0.8190376758575440</right_val></_></_> + <_> + <!-- tree 29 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 8 3 5 -1.</_> + <_>10 8 1 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.4716790802776814e-003</threshold> + <left_node>1</left_node> + <right_val>0.4679693877696991</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 12 6 1 -1.</_> + <_>9 12 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.5188479665084742e-005</threshold> + <left_val>0.5563911795616150</left_val> + <right_val>0.4367586076259613</right_val></_></_> + <_> + <!-- tree 30 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 8 3 5 -1.</_> + <_>9 8 1 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.0696711037307978e-003</threshold> + <left_node>1</left_node> + <right_val>0.6664348840713501</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 10 4 3 -1.</_> + <_>8 10 2 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.6296720423270017e-004</threshold> + <left_val>0.5594611167907715</left_val> + <right_val>0.3042711913585663</right_val></_></_></trees> + <stage_threshold>14.5467500686645510</stage_threshold> + <parent>5</parent> + <next>-1</next></_> + <_> + <!-- stage 7 --> + <trees> + <_> + <!-- tree 0 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 4 20 6 -1.</_> + <_>0 6 20 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-9.8275858908891678e-003</threshold> + <left_node>1</left_node> + <right_val>0.2116018980741501</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 3 8 6 -1.</_> + <_>1 3 4 3 2.</_> + <_>5 6 4 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.1693858802318573e-003</threshold> + <left_val>0.6924685239791870</left_val> + <right_val>0.3043777048587799</right_val></_></_> + <_> + <!-- tree 1 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 15 6 4 -1.</_> + <_>7 17 6 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.5341319744475186e-004</threshold> + <left_val>0.3183285892009735</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 10 14 10 -1.</_> + <_>3 15 14 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.8054549843072891e-003</threshold> + <left_val>0.5456559062004089</left_val> + <right_val>0.2522268891334534</right_val></_></_> + <_> + <!-- tree 2 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 4 4 4 -1.</_> + <_>8 4 2 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.1071180526632816e-004</threshold> + <left_val>0.2902618050575256</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 4 20 10 -1.</_> + <_>0 9 20 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.8318869881331921e-003</threshold> + <left_val>0.3130455911159515</left_val> + <right_val>0.6884937286376953</right_val></_></_> + <_> + <!-- tree 3 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 4 2 14 -1.</_> + <_>9 11 2 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.5633679443853907e-006</threshold> + <left_node>1</left_node> + <right_val>0.2962465882301331</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>2 0 16 4 -1.</_> + <_>2 2 16 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.2888139877468348e-004</threshold> + <left_val>0.3099626004695892</left_val> + <right_val>0.5752515196800232</right_val></_></_> + <_> + <!-- tree 4 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 12 6 8 -1.</_> + <_>4 12 3 4 2.</_> + <_>7 16 3 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.6209259629249573e-003</threshold> + <left_val>0.3993195891380310</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 5 6 7 -1.</_> + <_>3 5 3 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.1338958591222763e-003</threshold> + <left_val>0.4827372133731842</left_val> + <right_val>0.7537832856178284</right_val></_></_> + <_> + <!-- tree 5 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>10 7 10 4 -1.</_> + <_>15 7 5 2 2.</_> + <_>10 9 5 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.1212290525436401e-003</threshold> + <left_val>0.2616927027702332</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 8 12 1 -1.</_> + <_>9 8 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.5447290390729904e-003</threshold> + <left_val>0.3108702898025513</left_val> + <right_val>0.5491235852241516</right_val></_></_> + <_> + <!-- tree 6 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 9 2 2 -1.</_> + <_>9 10 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.2652782071381807e-004</threshold> + <left_val>0.3239691853523254</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 4 2 4 -1.</_> + <_>9 6 2 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.6596331483451650e-005</threshold> + <left_val>0.6517410874366760</left_val> + <right_val>0.4178912043571472</right_val></_></_> + <_> + <!-- tree 7 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 6 3 6 -1.</_> + <_>10 6 1 6 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0138827199116349</threshold> + <left_node>1</left_node> + <right_val>0.6771203875541687</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 7 6 4 -1.</_> + <_>15 7 3 2 2.</_> + <_>12 9 3 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.0493700392544270e-003</threshold> + <left_val>0.4159511029720306</left_val> + <right_val>0.5652891993522644</right_val></_></_> + <_> + <!-- tree 8 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 6 3 6 -1.</_> + <_>9 6 1 6 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0182153601199389</threshold> + <left_node>1</left_node> + <right_val>0.7689601182937622</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 6 18 6 -1.</_> + <_>1 6 9 3 2.</_> + <_>10 9 9 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0113345803692937</threshold> + <left_val>0.2873323857784271</left_val> + <right_val>0.4988932907581329</right_val></_></_> + <_> + <!-- tree 9 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 1 3 3 -1.</_> + <_>10 1 1 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.1097560897469521e-003</threshold> + <left_node>1</left_node> + <right_val>0.5463008284568787</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 8 5 2 -1.</_> + <_>10 9 5 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.2612891411408782e-004</threshold> + <left_val>0.3631235063076019</left_val> + <right_val>0.5512552261352539</right_val></_></_> + <_> + <!-- tree 10 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 1 3 3 -1.</_> + <_>9 1 1 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.0301548801362514e-003</threshold> + <left_node>1</left_node> + <right_val>0.1143767014145851</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 8 5 2 -1.</_> + <_>5 9 5 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.3587709185667336e-004</threshold> + <left_val>0.2891078889369965</left_val> + <right_val>0.5447341799736023</right_val></_></_> + <_> + <!-- tree 11 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 6 8 8 -1.</_> + <_>12 6 4 4 2.</_> + <_>8 10 4 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.2279507983475924e-004</threshold> + <left_node>1</left_node> + <right_val>0.3023431897163391</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 7 10 2 -1.</_> + <_>5 7 5 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0258371196687222</threshold> + <left_val>0.2167005985975266</left_val> + <right_val>0.5278152823448181</right_val></_></_> + <_> + <!-- tree 12 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 5 12 10 -1.</_> + <_>4 5 6 5 2.</_> + <_>10 10 6 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0217749103903770</threshold> + <left_node>1</left_node> + <right_val>0.3254834115505219</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 5 2 3 -1.</_> + <_>5 6 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.7682299949228764e-003</threshold> + <left_val>0.5263050794601440</left_val> + <right_val>0.7526329159736633</right_val></_></_> + <_> + <!-- tree 13 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 14 6 3 -1.</_> + <_>7 15 6 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0137938102707267</threshold> + <left_val>0.7410330176353455</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 14 3 3 -1.</_> + <_>9 15 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.0852829590439796e-003</threshold> + <left_val>0.6836609840393066</left_val> + <right_val>0.4579071104526520</right_val></_></_> + <_> + <!-- tree 14 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 14 3 3 -1.</_> + <_>8 15 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.1795017682015896e-003</threshold> + <left_node>1</left_node> + <right_val>0.7449936270713806</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 10 8 9 -1.</_> + <_>1 13 8 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0100303199142218</threshold> + <left_val>0.4860779941082001</left_val> + <right_val>0.2361457049846649</right_val></_></_> + <_> + <!-- tree 15 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 7 2 3 -1.</_> + <_>9 8 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.4201927743852139e-003</threshold> + <left_val>0.1467327028512955</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 3 3 3 -1.</_> + <_>13 3 1 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.6961281225085258e-003</threshold> + <left_val>0.2347819954156876</left_val> + <right_val>0.5323377251625061</right_val></_></_> + <_> + <!-- tree 16 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 3 3 3 -1.</_> + <_>6 3 1 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.1498160250484943e-003</threshold> + <left_val>0.1477057039737701</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 6 2 12 -1.</_> + <_>5 10 2 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.4450740311294794e-003</threshold> + <left_val>0.3498533964157105</left_val> + <right_val>0.5803561806678772</right_val></_></_> + <_> + <!-- tree 17 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 11 18 4 -1.</_> + <_>10 11 9 2 2.</_> + <_>1 13 9 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0375034101307392</threshold> + <left_node>1</left_node> + <right_val>0.5259550809860230</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 12 6 2 -1.</_> + <_>7 13 6 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.7799441381357610e-004</threshold> + <left_val>0.4362882971763611</left_val> + <right_val>0.6208922863006592</right_val></_></_> + <_> + <!-- tree 18 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 0 3 6 -1.</_> + <_>7 0 1 6 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.0806080475449562e-003</threshold> + <left_val>0.2039460986852646</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 11 18 4 -1.</_> + <_>0 11 9 2 2.</_> + <_>9 13 9 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0328180007636547</threshold> + <left_val>0.5198358893394470</left_val> + <right_val>0.1371196061372757</right_val></_></_> + <_> + <!-- tree 19 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 12 6 2 -1.</_> + <_>7 13 6 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.5188988810405135e-004</threshold> + <left_node>1</left_node> + <right_val>0.6323429942131043</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 12 3 3 -1.</_> + <_>9 13 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.6485587954521179e-003</threshold> + <left_val>0.4720163047313690</left_val> + <right_val>0.6567087173461914</right_val></_></_> + <_> + <!-- tree 20 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 12 2 3 -1.</_> + <_>9 13 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.9827929791063070e-003</threshold> + <left_val>0.6053060293197632</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 11 4 3 -1.</_> + <_>8 12 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.6011310508474708e-003</threshold> + <left_val>0.5090519189834595</left_val> + <right_val>0.3116933107376099</right_val></_></_> + <_> + <!-- tree 21 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>13 3 4 2 -1.</_> + <_>13 4 4 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.0539939180016518e-003</threshold> + <left_val>0.3429804146289825</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 0 12 2 -1.</_> + <_>4 1 12 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.3212040327489376e-004</threshold> + <left_val>0.3838402926921845</left_val> + <right_val>0.5775598287582398</right_val></_></_> + <_> + <!-- tree 22 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 9 8 8 -1.</_> + <_>6 9 4 4 2.</_> + <_>10 13 4 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0274521205574274</threshold> + <left_val>0.2143469005823135</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 11 6 2 -1.</_> + <_>1 12 6 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.3099439982324839e-004</threshold> + <left_val>0.5952966213226318</left_val> + <right_val>0.3760158121585846</right_val></_></_> + <_> + <!-- tree 23 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>2 5 18 8 -1.</_> + <_>11 5 9 4 2.</_> + <_>2 9 9 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.7144189961254597e-003</threshold> + <left_val>0.5692626833915710</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 1 6 10 -1.</_> + <_>7 6 6 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.3701690845191479e-003</threshold> + <left_val>0.5784304141998291</left_val> + <right_val>0.3974282145500183</right_val></_></_> + <_> + <!-- tree 24 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 3 3 6 -1.</_> + <_>0 5 3 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0189039595425129</threshold> + <left_val>0.1818892955780029</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 5 4 3 -1.</_> + <_>4 6 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.5850871615111828e-003</threshold> + <left_val>0.6849110126495361</left_val> + <right_val>0.4351584017276764</right_val></_></_> + <_> + <!-- tree 25 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>19 3 1 6 -1.</_> + <_>19 5 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.8810501359403133e-003</threshold> + <left_node>1</left_node> + <right_val>0.2726660966873169</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 15 8 2 -1.</_> + <_>6 16 8 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.0092082498595119e-004</threshold> + <left_val>0.4236431121826172</left_val> + <right_val>0.5844675898551941</right_val></_></_> + <_> + <!-- tree 26 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 3 1 6 -1.</_> + <_>0 5 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.8510579830035567e-003</threshold> + <left_node>1</left_node> + <right_val>0.3371320962905884</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 5 3 3 -1.</_> + <_>5 6 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.3273650594055653e-003</threshold> + <left_val>0.5270221829414368</left_val> + <right_val>0.8053650856018066</right_val></_></_> + <_> + <!-- tree 27 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 8 4 3 -1.</_> + <_>8 9 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.3820930402725935e-003</threshold> + <left_val>0.2866018116474152</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 6 6 3 -1.</_> + <_>12 6 2 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.9292969955131412e-003</threshold> + <left_val>0.5888946056365967</left_val> + <right_val>0.3895787000656128</right_val></_></_> + <_> + <!-- tree 28 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 13 2 6 -1.</_> + <_>8 16 2 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0149952201172709</threshold> + <left_node>1</left_node> + <right_val>0.2177816927433014</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 11 2 8 -1.</_> + <_>9 15 2 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0263307504355907</threshold> + <left_val>0.1775317043066025</left_val> + <right_val>0.5671470165252686</right_val></_></_> + <_> + <!-- tree 29 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>10 6 6 3 -1.</_> + <_>12 6 2 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.1734222322702408e-003</threshold> + <left_node>1</left_node> + <right_val>0.4652962088584900</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 15 15 5 -1.</_> + <_>10 15 5 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0272683501243591</threshold> + <left_val>0.4768311083316803</left_val> + <right_val>0.5695238709449768</right_val></_></_> + <_> + <!-- tree 30 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>2 14 2 2 -1.</_> + <_>2 15 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.8880263976752758e-004</threshold> + <left_node>1</left_node> + <right_val>0.3397401869297028</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 7 6 2 -1.</_> + <_>6 7 2 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.0528849670663476e-003</threshold> + <left_val>0.6250041127204895</left_val> + <right_val>0.4288412034511566</right_val></_></_> + <_> + <!-- tree 31 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 3 6 1 -1.</_> + <_>10 3 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.2288072183728218e-003</threshold> + <left_val>0.5347762107849121</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 0 18 12 -1.</_> + <_>7 0 6 12 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0303954593837261</threshold> + <left_val>0.4115518927574158</left_val> + <right_val>0.5660753846168518</right_val></_></_> + <_> + <!-- tree 32 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 14 8 6 -1.</_> + <_>4 14 4 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0791139304637909</threshold> + <left_val>0.7881323099136353</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 15 15 5 -1.</_> + <_>5 15 5 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0182316694408655</threshold> + <left_val>0.3604339957237244</left_val> + <right_val>0.5569505095481873</right_val></_></_> + <_> + <!-- tree 33 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 3 6 1 -1.</_> + <_>10 3 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.2288072183728218e-003</threshold> + <left_val>0.5416644215583801</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>11 11 3 6 -1.</_> + <_>11 14 3 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.3922828626818955e-004</threshold> + <left_val>0.5507156848907471</left_val> + <right_val>0.3882277011871338</right_val></_></_> + <_> + <!-- tree 34 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 3 6 1 -1.</_> + <_>8 3 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.6501962505280972e-004</threshold> + <left_val>0.3185850977897644</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 11 3 6 -1.</_> + <_>6 14 3 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.0326979681849480e-003</threshold> + <left_val>0.5578364133834839</left_val> + <right_val>0.3219245970249176</right_val></_></_> + <_> + <!-- tree 35 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 6 3 4 -1.</_> + <_>10 6 1 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.2997747920453548e-003</threshold> + <left_val>0.7073233127593994</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 10 4 7 -1.</_> + <_>12 10 2 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-9.3629042385146022e-004</threshold> + <left_val>0.5558015704154968</left_val> + <right_val>0.4613842070102692</right_val></_></_> + <_> + <!-- tree 36 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 6 3 4 -1.</_> + <_>9 6 1 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.0483231209218502e-003</threshold> + <left_val>0.6869289875030518</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 6 4 7 -1.</_> + <_>6 6 2 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.7529221996665001e-003</threshold> + <left_val>0.4870317876338959</left_val> + <right_val>0.2650370895862579</right_val></_></_> + <_> + <!-- tree 37 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>10 3 4 12 -1.</_> + <_>10 3 2 12 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0530780293047428</threshold> + <left_val>0.5281515121459961</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 8 3 4 -1.</_> + <_>11 8 1 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.0225810110569000e-003</threshold> + <left_val>0.6085882186889648</left_val> + <right_val>0.4304867982864380</right_val></_></_> + <_> + <!-- tree 38 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 0 18 14 -1.</_> + <_>7 0 6 14 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0312706492841244</threshold> + <left_node>1</left_node> + <right_val>0.5445832014083862</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>2 8 6 11 -1.</_> + <_>5 8 3 11 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.3522169366478920e-003</threshold> + <left_val>0.5328335762023926</left_val> + <right_val>0.2364324033260346</right_val></_></_></trees> + <stage_threshold>18.5722503662109380</stage_threshold> + <parent>6</parent> + <next>-1</next></_> + <_> + <!-- stage 8 --> + <trees> + <_> + <!-- tree 0 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 4 15 4 -1.</_> + <_>1 6 15 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.2215630896389484e-003</threshold> + <left_node>1</left_node> + <right_val>0.2625581026077271</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 5 10 8 -1.</_> + <_>5 9 10 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.1097389981150627e-003</threshold> + <left_val>0.1564992964267731</left_val> + <right_val>0.6792883276939392</right_val></_></_> + <_> + <!-- tree 1 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>14 2 6 8 -1.</_> + <_>14 2 3 8 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0108458595350385</threshold> + <left_val>0.3485808968544006</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>11 6 6 14 -1.</_> + <_>14 6 3 7 2.</_> + <_>11 13 3 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.4230401767417789e-004</threshold> + <left_val>0.3698255121707916</left_val> + <right_val>0.5921658277511597</right_val></_></_> + <_> + <!-- tree 2 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 5 2 12 -1.</_> + <_>9 11 2 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.3311722371727228e-004</threshold> + <left_node>1</left_node> + <right_val>0.3007084131240845</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 7 4 6 -1.</_> + <_>3 9 4 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.0134200565516949e-003</threshold> + <left_val>0.3624922931194305</left_val> + <right_val>0.7072426080703735</right_val></_></_> + <_> + <!-- tree 3 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>14 3 6 6 -1.</_> + <_>14 3 3 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0110935596749187</threshold> + <left_val>0.4416702091693878</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>15 2 4 4 -1.</_> + <_>15 4 4 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.9127531498670578e-003</threshold> + <left_val>0.3028708100318909</left_val> + <right_val>0.5417376160621643</right_val></_></_> + <_> + <!-- tree 4 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 2 6 7 -1.</_> + <_>3 2 3 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0129053099080920</threshold> + <left_val>0.4374504089355469</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 6 6 14 -1.</_> + <_>3 6 3 7 2.</_> + <_>6 13 3 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.2430912144482136e-003</threshold> + <left_val>0.4401589930057526</left_val> + <right_val>0.7565190792083740</right_val></_></_> + <_> + <!-- tree 5 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 6 16 8 -1.</_> + <_>4 10 16 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.1304309484548867e-004</threshold> + <left_val>0.2310786992311478</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 12 2 8 -1.</_> + <_>10 16 2 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.2308640182018280e-003</threshold> + <left_val>0.3568195998668671</left_val> + <right_val>0.5749999284744263</right_val></_></_> + <_> + <!-- tree 6 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 0 6 20 -1.</_> + <_>9 0 2 20 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.6400520000606775e-003</threshold> + <left_val>0.3593688905239105</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 7 16 12 -1.</_> + <_>1 7 8 6 2.</_> + <_>9 13 8 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0751010328531265</threshold> + <left_val>0.6363567709922791</left_val> + <right_val>0.2327028959989548</right_val></_></_> + <_> + <!-- tree 7 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 11 3 3 -1.</_> + <_>9 12 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.7012968249619007e-003</threshold> + <left_val>0.7074623703956604</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>11 9 4 5 -1.</_> + <_>11 9 2 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.5588370151817799e-003</threshold> + <left_val>0.5700237154960632</left_val> + <right_val>0.3590450882911682</right_val></_></_> + <_> + <!-- tree 8 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 3 1 2 -1.</_> + <_>3 4 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.7687938786111772e-004</threshold> + <left_val>0.2805441021919251</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 17 5 3 -1.</_> + <_>7 18 5 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.4234727546572685e-004</threshold> + <left_val>0.4125418961048126</left_val> + <right_val>0.6177995800971985</right_val></_></_> + <_> + <!-- tree 9 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 12 4 8 -1.</_> + <_>10 12 2 4 2.</_> + <_>8 16 2 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0128251099959016</threshold> + <left_node>1</left_node> + <right_val>0.5403078198432922</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 4 10 12 -1.</_> + <_>12 4 5 6 2.</_> + <_>7 10 5 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.5156567143276334e-004</threshold> + <left_val>0.5633643865585327</left_val> + <right_val>0.3356539011001587</right_val></_></_> + <_> + <!-- tree 10 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 14 4 3 -1.</_> + <_>8 15 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0120061598718166</threshold> + <left_val>0.7109510898590088</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 9 4 5 -1.</_> + <_>7 9 2 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.3213419588282704e-003</threshold> + <left_val>0.4903850853443146</left_val> + <right_val>0.2824583053588867</right_val></_></_> + <_> + <!-- tree 11 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 9 8 2 -1.</_> + <_>9 9 4 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0203074403107166</threshold> + <left_val>0.1891369968652725</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>14 15 5 2 -1.</_> + <_>14 16 5 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.0180929936468601e-003</threshold> + <left_val>0.5377966165542603</left_val> + <right_val>0.3119494915008545</right_val></_></_> + <_> + <!-- tree 12 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 14 2 3 -1.</_> + <_>9 15 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.5315311290323734e-003</threshold> + <left_node>1</left_node> + <right_val>0.7206758260726929</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 7 8 4 -1.</_> + <_>1 7 4 2 2.</_> + <_>5 9 4 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.4381739571690559e-003</threshold> + <left_val>0.1854667961597443</left_val> + <right_val>0.4981732964515686</right_val></_></_> + <_> + <!-- tree 13 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>19 3 1 2 -1.</_> + <_>19 4 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.5692010056227446e-003</threshold> + <left_node>1</left_node> + <right_val>0.2638274133205414</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 12 2 3 -1.</_> + <_>9 13 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.9516442231833935e-003</threshold> + <left_val>0.6871067285537720</left_val> + <right_val>0.4714686870574951</right_val></_></_> + <_> + <!-- tree 14 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 14 14 4 -1.</_> + <_>3 14 7 2 2.</_> + <_>10 16 7 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0274296794086695</threshold> + <left_val>0.1548285037279129</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 0 10 2 -1.</_> + <_>5 1 10 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.4181969454512000e-003</threshold> + <left_val>0.4376842975616455</left_val> + <right_val>0.6327368021011353</right_val></_></_> + <_> + <!-- tree 15 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>11 14 4 6 -1.</_> + <_>11 16 4 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0130789401009679</threshold> + <left_val>0.3166814148426056</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 14 6 3 -1.</_> + <_>7 15 6 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.5092779435217381e-003</threshold> + <left_val>0.6199743747711182</left_val> + <right_val>0.4379687011241913</right_val></_></_> + <_> + <!-- tree 16 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 13 6 6 -1.</_> + <_>7 13 3 3 2.</_> + <_>10 16 3 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0189207307994366</threshold> + <left_node>1</left_node> + <right_val>0.1470714062452316</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 2 1 6 -1.</_> + <_>0 4 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.1683350205421448e-003</threshold> + <left_val>0.5809459090232849</left_val> + <right_val>0.3431949019432068</right_val></_></_> + <_> + <!-- tree 17 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 7 8 2 -1.</_> + <_>6 8 8 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.6401590546593070e-003</threshold> + <left_val>0.3959457874298096</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 7 6 1 -1.</_> + <_>9 7 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.4005920093040913e-004</threshold> + <left_val>0.3240025043487549</left_val> + <right_val>0.5646647214889526</right_val></_></_> + <_> + <!-- tree 18 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 1 6 10 -1.</_> + <_>7 6 6 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.3137591090053320e-003</threshold> + <left_node>1</left_node> + <right_val>0.4274528026580811</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 2 6 2 -1.</_> + <_>0 3 6 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.9459029901772738e-003</threshold> + <left_val>0.3341667950153351</left_val> + <right_val>0.6627960205078125</right_val></_></_> + <_> + <!-- tree 19 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>11 4 2 4 -1.</_> + <_>11 4 1 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.3612229668069631e-004</threshold> + <left_val>0.4046927988529205</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>11 10 3 6 -1.</_> + <_>11 13 3 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.0512032359838486e-004</threshold> + <left_val>0.5484058260917664</left_val> + <right_val>0.3569940924644470</right_val></_></_> + <_> + <!-- tree 20 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 9 8 2 -1.</_> + <_>7 9 4 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0175139904022217</threshold> + <left_val>0.1824150979518890</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 0 4 6 -1.</_> + <_>2 0 2 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0187350306659937</threshold> + <left_val>0.7971820235252380</left_val> + <right_val>0.5068569183349609</right_val></_></_> + <_> + <!-- tree 21 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 0 6 2 -1.</_> + <_>9 0 2 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0120656499639153</threshold> + <left_node>1</left_node> + <right_val>0.2167007029056549</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 15 2 3 -1.</_> + <_>9 16 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.6544178836047649e-003</threshold> + <left_val>0.6584178805351257</left_val> + <right_val>0.4628243148326874</right_val></_></_> + <_> + <!-- tree 22 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 12 1 2 -1.</_> + <_>3 13 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.4501289697363973e-003</threshold> + <left_node>1</left_node> + <right_val>0.2090252041816711</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 5 11 3 -1.</_> + <_>4 6 11 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0109540196135640</threshold> + <left_val>0.5112305283546448</left_val> + <right_val>0.7784575819969177</right_val></_></_> + <_> + <!-- tree 23 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>11 4 2 4 -1.</_> + <_>11 4 1 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0157717093825340</threshold> + <left_val>0.5132359266281128</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 3 6 3 -1.</_> + <_>10 3 2 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0142526896670461</threshold> + <left_val>0.1742414981126785</left_val> + <right_val>0.5267148017883301</right_val></_></_> + <_> + <!-- tree 24 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 4 2 4 -1.</_> + <_>8 4 1 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.0411860279855318e-005</threshold> + <left_val>0.3418447971343994</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 3 6 3 -1.</_> + <_>8 3 2 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0234862994402647</threshold> + <left_val>0.5631265044212341</left_val> + <right_val>0.2006393969058991</right_val></_></_> + <_> + <!-- tree 25 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>11 4 4 3 -1.</_> + <_>11 5 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.2205449901521206e-003</threshold> + <left_node>1</left_node> + <right_val>0.6249648928642273</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>11 8 2 8 -1.</_> + <_>11 12 2 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0258124303072691</threshold> + <left_val>0.3203228116035461</left_val> + <right_val>0.5199329853057861</right_val></_></_> + <_> + <!-- tree 26 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 7 3 5 -1.</_> + <_>9 7 1 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.9526650430634618e-003</threshold> + <left_val>0.6140705943107605</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 7 2 5 -1.</_> + <_>10 7 1 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.1470049917697906e-003</threshold> + <left_val>0.6592895984649658</left_val> + <right_val>0.3711124956607819</right_val></_></_> + <_> + <!-- tree 27 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>14 11 1 6 -1.</_> + <_>14 13 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.2962448894977570e-003</threshold> + <left_node>1</left_node> + <right_val>0.2952111959457398</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 8 4 3 -1.</_> + <_>8 9 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.3961310032755136e-003</threshold> + <left_val>0.3320803940296173</left_val> + <right_val>0.5528414845466614</right_val></_></_> + <_> + <!-- tree 28 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 3 2 2 -1.</_> + <_>0 4 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.1055441834032536e-003</threshold> + <left_val>0.1710550040006638</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 14 5 6 -1.</_> + <_>4 16 5 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0108887795358896</threshold> + <left_val>0.3359434902667999</left_val> + <right_val>0.5674905180931091</right_val></_></_> + <_> + <!-- tree 29 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>11 4 4 3 -1.</_> + <_>11 5 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.6768421567976475e-003</threshold> + <left_node>1</left_node> + <right_val>0.4773241877555847</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 4 3 3 -1.</_> + <_>12 5 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-9.7729787230491638e-003</threshold> + <left_val>0.8081045150756836</left_val> + <right_val>0.4845828115940094</right_val></_></_> + <_> + <!-- tree 30 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 4 4 3 -1.</_> + <_>5 5 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.0439710505306721e-003</threshold> + <left_node>1</left_node> + <right_val>0.6784002184867859</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 15 4 2 -1.</_> + <_>7 15 2 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.6134641161188483e-004</threshold> + <left_val>0.5514639019966126</left_val> + <right_val>0.3642359972000122</right_val></_></_> + <_> + <!-- tree 31 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>15 1 5 9 -1.</_> + <_>15 4 5 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0579923614859581</threshold> + <left_node>1</left_node> + <right_val>0.1254435032606125</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 10 3 3 -1.</_> + <_>9 11 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.9384980704635382e-004</threshold> + <left_val>0.4424878954887390</left_val> + <right_val>0.5728461742401123</right_val></_></_> + <_> + <!-- tree 32 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 6 2 6 -1.</_> + <_>1 8 2 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.2353480607271194e-003</threshold> + <left_val>0.2805041968822479</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>2 4 8 15 -1.</_> + <_>2 9 8 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0127849299460649</threshold> + <left_val>0.1950912028551102</left_val> + <right_val>0.5652924776077271</right_val></_></_> + <_> + <!-- tree 33 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 12 3 2 -1.</_> + <_>9 13 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.1973669431172311e-004</threshold> + <left_node>1</left_node> + <right_val>0.6166483759880066</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 12 3 3 -1.</_> + <_>9 13 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.0646801507100463e-004</threshold> + <left_val>0.4526579976081848</left_val> + <right_val>0.5944486856460571</right_val></_></_> + <_> + <!-- tree 34 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 6 3 5 -1.</_> + <_>8 6 1 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.6339010326191783e-003</threshold> + <left_node>1</left_node> + <right_val>0.4086942076683044</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 3 6 2 -1.</_> + <_>7 3 2 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.8299999907612801e-003</threshold> + <left_val>0.2793526947498322</left_val> + <right_val>0.6444935202598572</right_val></_></_> + <_> + <!-- tree 35 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 1 8 10 -1.</_> + <_>10 1 4 5 2.</_> + <_>6 6 4 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.3992068171501160e-003</threshold> + <left_node>1</left_node> + <right_val>0.5671656131744385</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 0 20 10 -1.</_> + <_>10 0 10 5 2.</_> + <_>0 5 10 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.1081919968128204</threshold> + <left_val>0.5311812162399292</left_val> + <right_val>0.2614356875419617</right_val></_></_> + <_> + <!-- tree 36 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 3 3 1 -1.</_> + <_>7 3 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.5056560561060905e-004</threshold> + <left_node>1</left_node> + <right_val>0.2996774017810822</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 2 6 8 -1.</_> + <_>2 2 2 8 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0206112507730722</threshold> + <left_val>0.4489943087100983</left_val> + <right_val>0.6888279914855957</right_val></_></_> + <_> + <!-- tree 37 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>11 10 3 4 -1.</_> + <_>11 12 3 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0251290500164032</threshold> + <left_node>1</left_node> + <right_val>0.5196864008903503</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 6 3 8 -1.</_> + <_>12 10 3 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.7922939732670784e-003</threshold> + <left_val>0.3466995954513550</left_val> + <right_val>0.5533587932586670</right_val></_></_> + <_> + <!-- tree 38 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 10 3 4 -1.</_> + <_>6 12 3 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.5626220265403390e-003</threshold> + <left_node>1</left_node> + <right_val>0.3081440031528473</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 6 3 8 -1.</_> + <_>5 10 3 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.1898730928078294e-004</threshold> + <left_val>0.2693870961666107</left_val> + <right_val>0.5544489026069641</right_val></_></_> + <_> + <!-- tree 39 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>2 6 18 6 -1.</_> + <_>11 6 9 3 2.</_> + <_>2 9 9 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.8111421056091785e-003</threshold> + <left_val>0.5587847828865051</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 14 7 3 -1.</_> + <_>7 15 7 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.2484229411929846e-003</threshold> + <left_val>0.4672113060951233</left_val> + <right_val>0.6090825200080872</right_val></_></_> + <_> + <!-- tree 40 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 0 2 12 -1.</_> + <_>1 0 1 12 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0301472395658493</threshold> + <left_val>0.9027591943740845</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 2 18 16 -1.</_> + <_>1 10 18 8 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.2754867970943451</threshold> + <left_val>0.4719834923744202</left_val> + <right_val>0.2196920067071915</right_val></_></_> + <_> + <!-- tree 41 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 13 5 3 -1.</_> + <_>9 14 5 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.6894630175083876e-003</threshold> + <left_node>1</left_node> + <right_val>0.6273009181022644</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 13 4 3 -1.</_> + <_>8 14 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.2957701049745083e-003</threshold> + <left_val>0.4839217960834503</left_val> + <right_val>0.6909062266349793</right_val></_></_> + <_> + <!-- tree 42 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 6 18 6 -1.</_> + <_>0 6 9 3 2.</_> + <_>9 9 9 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0562110692262650</threshold> + <left_val>0.1738487929105759</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 13 6 3 -1.</_> + <_>7 14 6 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.6478560175746679e-003</threshold> + <left_val>0.6304144859313965</left_val> + <right_val>0.4474301934242249</right_val></_></_> + <_> + <!-- tree 43 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>17 4 1 3 -1.</_> + <_>17 5 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.4534000074490905e-003</threshold> + <left_node>1</left_node> + <right_val>0.5302538275718689</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 11 1 9 -1.</_> + <_>12 14 1 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.8540920466184616e-003</threshold> + <left_val>0.5338397026062012</left_val> + <right_val>0.3796882927417755</right_val></_></_> + <_> + <!-- tree 44 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>2 4 1 3 -1.</_> + <_>2 5 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.8243022067472339e-004</threshold> + <left_node>1</left_node> + <right_val>0.3269836902618408</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 4 2 3 -1.</_> + <_>5 5 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.2509482055902481e-004</threshold> + <left_val>0.4554812014102936</left_val> + <right_val>0.6358348131179810</right_val></_></_></trees> + <stage_threshold>21.5781192779541020</stage_threshold> + <parent>7</parent> + <next>-1</next></_> + <_> + <!-- stage 9 --> + <trees> + <_> + <!-- tree 0 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 2 18 3 -1.</_> + <_>7 2 6 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0198064409196377</threshold> + <left_val>0.2809725105762482</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 1 20 6 -1.</_> + <_>0 3 20 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.0395611692219973e-004</threshold> + <left_val>0.3119826018810272</left_val> + <right_val>0.7090306282043457</right_val></_></_> + <_> + <!-- tree 1 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 5 6 3 -1.</_> + <_>9 5 2 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.5563780218362808e-003</threshold> + <left_val>0.2981947958469391</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>13 7 6 4 -1.</_> + <_>16 7 3 2 2.</_> + <_>13 9 3 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.0824160417541862e-003</threshold> + <left_val>0.3020560145378113</left_val> + <right_val>0.5808811187744141</right_val></_></_> + <_> + <!-- tree 2 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 1 4 10 -1.</_> + <_>3 1 2 5 2.</_> + <_>5 6 2 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-9.2893769033253193e-004</threshold> + <left_node>1</left_node> + <right_val>0.3738102912902832</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 4 19 10 -1.</_> + <_>0 9 19 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0180097296833992</threshold> + <left_val>0.2163126021623612</left_val> + <right_val>0.6619253754615784</right_val></_></_> + <_> + <!-- tree 3 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 8 3 12 -1.</_> + <_>9 12 3 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.3500190582126379e-003</threshold> + <left_node>1</left_node> + <right_val>0.2910403907299042</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>11 18 5 2 -1.</_> + <_>11 19 5 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.1822491483762860e-004</threshold> + <left_val>0.5578622817993164</left_val> + <right_val>0.3366627991199493</right_val></_></_> + <_> + <!-- tree 4 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 16 6 4 -1.</_> + <_>5 16 3 2 2.</_> + <_>8 18 3 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.2095321482047439e-004</threshold> + <left_val>0.4072425961494446</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 18 3 2 -1.</_> + <_>5 19 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.6780969761312008e-004</threshold> + <left_val>0.6859595775604248</left_val> + <right_val>0.3105461895465851</right_val></_></_> + <_> + <!-- tree 5 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>13 11 3 2 -1.</_> + <_>13 12 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.8000211245380342e-004</threshold> + <left_node>1</left_node> + <right_val>0.3337332904338837</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 5 8 4 -1.</_> + <_>8 5 4 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.0538640506565571e-005</threshold> + <left_val>0.3370958864688873</left_val> + <right_val>0.5451210737228394</right_val></_></_> + <_> + <!-- tree 6 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 2 18 6 -1.</_> + <_>1 2 9 3 2.</_> + <_>10 5 9 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0439147986471653</threshold> + <left_val>0.2625670135021210</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 5 14 6 -1.</_> + <_>3 7 14 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.6501338258385658e-003</threshold> + <left_val>0.6050462722778320</left_val> + <right_val>0.3232415020465851</right_val></_></_> + <_> + <!-- tree 7 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>18 1 2 6 -1.</_> + <_>18 3 2 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.8661491125822067e-003</threshold> + <left_node>1</left_node> + <right_val>0.3262613117694855</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 11 6 1 -1.</_> + <_>11 11 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.3069426687434316e-005</threshold> + <left_val>0.5817307829856873</left_val> + <right_val>0.4164389967918396</right_val></_></_> + <_> + <!-- tree 8 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 2 6 11 -1.</_> + <_>3 2 3 11 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0525337383151054</threshold> + <left_node>1</left_node> + <right_val>0.7095398902893066</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 12 2 3 -1.</_> + <_>4 13 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.3818660518154502e-003</threshold> + <left_val>0.5292875766754150</left_val> + <right_val>0.2541388869285584</right_val></_></_> + <_> + <!-- tree 9 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 12 9 2 -1.</_> + <_>9 12 3 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.9264067355543375e-004</threshold> + <left_node>1</left_node> + <right_val>0.4085341095924377</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 4 6 15 -1.</_> + <_>9 4 3 15 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0855795070528984</threshold> + <left_val>0.5263236165046692</left_val> + <right_val>0.3003202974796295</right_val></_></_> + <_> + <!-- tree 10 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 11 6 1 -1.</_> + <_>7 11 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.8343339615967125e-004</threshold> + <left_node>1</left_node> + <right_val>0.4029205143451691</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 4 6 15 -1.</_> + <_>8 4 3 15 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-9.7924815490841866e-003</threshold> + <left_val>0.3521319925785065</left_val> + <right_val>0.6664004921913147</right_val></_></_> + <_> + <!-- tree 11 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>14 12 6 7 -1.</_> + <_>14 12 3 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0144286202266812</threshold> + <left_val>0.4593566060066223</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>18 3 2 9 -1.</_> + <_>18 6 2 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0456870011985302</threshold> + <left_val>0.1474756002426148</left_val> + <right_val>0.5178632140159607</right_val></_></_> + <_> + <!-- tree 12 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 1 3 1 -1.</_> + <_>9 1 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.5763090234249830e-003</threshold> + <left_val>0.1837278008460999</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 12 6 7 -1.</_> + <_>3 12 3 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0383018590509892</threshold> + <left_val>0.8082658052444458</left_val> + <right_val>0.5166687965393066</right_val></_></_> + <_> + <!-- tree 13 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>13 7 6 4 -1.</_> + <_>16 7 3 2 2.</_> + <_>13 9 3 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.8978290501981974e-003</threshold> + <left_val>0.4798013865947723</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 0 10 2 -1.</_> + <_>8 1 10 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.5165060069411993e-003</threshold> + <left_val>0.3346295952796936</left_val> + <right_val>0.5444449186325073</right_val></_></_> + <_> + <!-- tree 14 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 7 6 4 -1.</_> + <_>1 7 3 2 2.</_> + <_>4 9 3 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.6281982688233256e-004</threshold> + <left_val>0.3589026927947998</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 2 3 3 -1.</_> + <_>1 3 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.6684391088783741e-003</threshold> + <left_val>0.5983129739761353</left_val> + <right_val>0.2983964085578919</right_val></_></_> + <_> + <!-- tree 15 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 13 4 3 -1.</_> + <_>9 14 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.1319789811968803e-003</threshold> + <left_node>1</left_node> + <right_val>0.6163223981857300</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 13 7 2 -1.</_> + <_>12 14 7 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.6037310063838959e-003</threshold> + <left_val>0.5217130184173584</left_val> + <right_val>0.2054159045219421</right_val></_></_> + <_> + <!-- tree 16 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 12 9 2 -1.</_> + <_>8 12 3 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.1668079969240353e-004</threshold> + <left_node>1</left_node> + <right_val>0.3446668982505798</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 10 4 8 -1.</_> + <_>6 14 4 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.1659509986639023e-003</threshold> + <left_val>0.5597484707832336</left_val> + <right_val>0.2673786878585815</right_val></_></_> + <_> + <!-- tree 17 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 0 18 4 -1.</_> + <_>7 0 6 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0225694999098778</threshold> + <left_val>0.6900268197059631</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 0 5 2 -1.</_> + <_>12 1 5 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.7129601221531630e-004</threshold> + <left_val>0.4486638903617859</left_val> + <right_val>0.5508785247802734</right_val></_></_> + <_> + <!-- tree 18 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 7 1 12 -1.</_> + <_>7 13 1 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0154344597831368</threshold> + <left_val>0.2048323005437851</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 2 3 4 -1.</_> + <_>7 2 1 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.4861656650900841e-003</threshold> + <left_val>0.1254952996969223</left_val> + <right_val>0.5060356259346008</right_val></_></_> + <_> + <!-- tree 19 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 13 20 6 -1.</_> + <_>0 15 20 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.1180747002363205</threshold> + <left_val>0.0676330626010895</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 5 12 2 -1.</_> + <_>14 5 6 1 2.</_> + <_>8 6 6 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.2300079688429832e-003</threshold> + <left_val>0.5660700798034668</left_val> + <right_val>0.4292201101779938</right_val></_></_> + <_> + <!-- tree 20 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 14 2 3 -1.</_> + <_>8 15 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.0290351286530495e-003</threshold> + <left_val>0.7136403918266296</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 14 4 3 -1.</_> + <_>8 15 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.9325206354260445e-003</threshold> + <left_val>0.4338876008987427</left_val> + <right_val>0.7060875296592712</right_val></_></_> + <_> + <!-- tree 21 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 13 7 6 -1.</_> + <_>12 15 7 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0477359816431999</threshold> + <left_node>1</left_node> + <right_val>0.5268685221672058</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 0 8 12 -1.</_> + <_>10 0 4 6 2.</_> + <_>6 6 4 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0441555790603161</threshold> + <left_val>0.2580580115318298</left_val> + <right_val>0.5406960844993591</right_val></_></_> + <_> + <!-- tree 22 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 15 9 4 -1.</_> + <_>0 17 9 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0259834807366133</threshold> + <left_val>0.1905054003000259</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 0 2 5 -1.</_> + <_>10 0 1 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.7885831445455551e-003</threshold> + <left_val>0.2551892995834351</left_val> + <right_val>0.5339077115058899</right_val></_></_> + <_> + <!-- tree 23 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 5 2 6 -1.</_> + <_>9 5 1 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.7423451691865921e-003</threshold> + <left_val>0.4693309962749481</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>17 2 3 6 -1.</_> + <_>17 4 3 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0116547504439950</threshold> + <left_val>0.5261964201927185</left_val> + <right_val>0.3145434856414795</right_val></_></_> + <_> + <!-- tree 24 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 11 2 3 -1.</_> + <_>3 12 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.6982729583978653e-003</threshold> + <left_val>0.1756853014230728</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 13 3 3 -1.</_> + <_>7 14 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.2983349673449993e-003</threshold> + <left_val>0.7774729728698731</left_val> + <right_val>0.5124292969703674</right_val></_></_> + <_> + <!-- tree 25 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>14 12 5 3 -1.</_> + <_>14 13 5 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.9091778025031090e-003</threshold> + <left_val>0.5284559726715088</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 8 14 3 -1.</_> + <_>4 9 14 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.5874979726504534e-004</threshold> + <left_val>0.3887802064418793</left_val> + <right_val>0.5501173734664917</right_val></_></_> + <_> + <!-- tree 26 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 12 5 3 -1.</_> + <_>1 13 5 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.2235877849161625e-003</threshold> + <left_val>0.2489829063415527</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 15 12 2 -1.</_> + <_>1 15 6 1 2.</_> + <_>7 16 6 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.3308860361576080e-003</threshold> + <left_val>0.4262146055698395</left_val> + <right_val>0.5935062170028687</right_val></_></_> + <_> + <!-- tree 27 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 11 4 2 -1.</_> + <_>12 12 4 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.2055278792977333e-003</threshold> + <left_node>1</left_node> + <right_val>0.2545222938060761</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 8 3 5 -1.</_> + <_>10 8 1 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0140651697292924</threshold> + <left_val>0.4851990044116974</left_val> + <right_val>0.7021418809890747</right_val></_></_> + <_> + <!-- tree 28 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 5 2 6 -1.</_> + <_>10 5 1 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.7384149879217148e-003</threshold> + <left_val>0.7143270969390869</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 2 3 6 -1.</_> + <_>0 4 3 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.3406780567020178e-003</threshold> + <left_val>0.5175725221633911</left_val> + <right_val>0.2808643877506256</right_val></_></_> + <_> + <!-- tree 29 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 11 4 2 -1.</_> + <_>12 12 4 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0118806995451450</threshold> + <left_node>1</left_node> + <right_val>0.5173221826553345</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 7 3 5 -1.</_> + <_>10 7 1 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.4226379571482539e-003</threshold> + <left_val>0.4502865970134735</left_val> + <right_val>0.5795695185661316</right_val></_></_> + <_> + <!-- tree 30 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 11 4 2 -1.</_> + <_>4 12 4 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.9858129564672709e-003</threshold> + <left_node>1</left_node> + <right_val>0.1915116012096405</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 8 3 5 -1.</_> + <_>9 8 1 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.0481580868363380e-003</threshold> + <left_val>0.6502432227134705</left_val> + <right_val>0.4559315145015717</right_val></_></_> + <_> + <!-- tree 31 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 3 3 1 -1.</_> + <_>10 3 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.7122729914262891e-003</threshold> + <left_val>0.5376247167587280</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>16 5 3 8 -1.</_> + <_>17 5 1 8 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0169808696955442</threshold> + <left_val>0.7056233286857605</left_val> + <right_val>0.4914605915546417</right_val></_></_> + <_> + <!-- tree 32 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 3 3 1 -1.</_> + <_>9 3 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.1290470138192177e-003</threshold> + <left_val>0.2678706049919128</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 5 3 8 -1.</_> + <_>2 5 1 8 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.8620059601962566e-003</threshold> + <left_val>0.4410853981971741</left_val> + <right_val>0.6368319988250732</right_val></_></_> + <_> + <!-- tree 33 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>10 1 3 3 -1.</_> + <_>11 1 1 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.8065758999437094e-003</threshold> + <left_val>0.2763563990592957</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>17 5 2 4 -1.</_> + <_>17 5 1 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.9090270660817623e-003</threshold> + <left_val>0.4867301881313324</left_val> + <right_val>0.6728776097297669</right_val></_></_> + <_> + <!-- tree 34 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>2 8 14 3 -1.</_> + <_>2 9 14 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.1004370171576738e-003</threshold> + <left_val>0.4070514142513275</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 7 1 3 -1.</_> + <_>9 8 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.3396299220621586e-003</threshold> + <left_val>0.2604948878288269</left_val> + <right_val>0.6154860258102417</right_val></_></_> + <_> + <!-- tree 35 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 1 8 10 -1.</_> + <_>6 6 8 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.6068160552531481e-003</threshold> + <left_val>0.5731999874114990</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>13 0 6 8 -1.</_> + <_>16 0 3 4 2.</_> + <_>13 4 3 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0408311896026134</threshold> + <left_val>0.4973376989364624</left_val> + <right_val>0.7387006878852844</right_val></_></_> + <_> + <!-- tree 36 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 5 2 4 -1.</_> + <_>2 5 1 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.1082250215113163e-003</threshold> + <left_val>0.6984751224517822</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 2 12 2 -1.</_> + <_>4 3 12 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-9.3759730225428939e-004</threshold> + <left_val>0.2691167891025543</left_val> + <right_val>0.4741779863834381</right_val></_></_> + <_> + <!-- tree 37 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 8 4 4 -1.</_> + <_>8 10 4 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.6740820137783885e-003</threshold> + <left_val>0.3551014065742493</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 6 12 4 -1.</_> + <_>9 6 4 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0882877036929131</threshold> + <left_val>0.5244613885879517</left_val> + <right_val>0.2096650004386902</right_val></_></_> + <_> + <!-- tree 38 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 2 8 1 -1.</_> + <_>5 2 4 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.2009629113599658e-004</threshold> + <left_val>0.4131096899509430</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 1 6 10 -1.</_> + <_>3 1 2 10 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.6624617213383317e-004</threshold> + <left_val>0.4620293080806732</left_val> + <right_val>0.6775410175323486</right_val></_></_> + <_> + <!-- tree 39 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 6 8 2 -1.</_> + <_>8 6 4 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.5769668435677886e-004</threshold> + <left_node>1</left_node> + <right_val>0.5628275275230408</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 7 6 6 -1.</_> + <_>12 7 2 6 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.1304790861904621e-003</threshold> + <left_val>0.5576859712600708</left_val> + <right_val>0.4577650129795075</right_val></_></_> + <_> + <!-- tree 40 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 6 8 2 -1.</_> + <_>8 6 4 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.7317050737328827e-004</threshold> + <left_node>1</left_node> + <right_val>0.4959256052970886</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 7 6 6 -1.</_> + <_>6 7 2 6 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0111722303554416</threshold> + <left_val>0.5625635981559753</left_val> + <right_val>0.2047107964754105</right_val></_></_> + <_> + <!-- tree 41 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 14 16 4 -1.</_> + <_>3 16 16 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0434352196753025</threshold> + <left_node>1</left_node> + <right_val>0.2242148071527481</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 12 4 2 -1.</_> + <_>8 13 4 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.6736161503940821e-004</threshold> + <left_val>0.4533343911170960</left_val> + <right_val>0.6199932098388672</right_val></_></_> + <_> + <!-- tree 42 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 12 3 3 -1.</_> + <_>8 13 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.1452889088541269e-003</threshold> + <left_val>0.6662756204605103</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 12 6 1 -1.</_> + <_>8 12 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.5233129961416125e-003</threshold> + <left_val>0.5007988214492798</left_val> + <right_val>0.2384992986917496</right_val></_></_> + <_> + <!-- tree 43 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>18 10 2 3 -1.</_> + <_>18 11 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.0854279864579439e-003</threshold> + <left_node>1</left_node> + <right_val>0.3753500878810883</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>16 8 4 6 -1.</_> + <_>16 10 4 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0360982008278370</threshold> + <left_val>0.5177171230316162</left_val> + <right_val>0.1634493023157120</right_val></_></_> + <_> + <!-- tree 44 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 3 2 1 -1.</_> + <_>9 3 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.6179570229724050e-003</threshold> + <left_node>1</left_node> + <right_val>0.2587381899356842</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 1 3 9 -1.</_> + <_>8 1 1 9 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.2132300809025764e-004</threshold> + <left_val>0.6299533843994141</left_val> + <right_val>0.4658789932727814</right_val></_></_> + <_> + <!-- tree 45 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 11 11 6 -1.</_> + <_>5 14 11 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.1878539165481925e-004</threshold> + <left_node>1</left_node> + <right_val>0.3354076147079468</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 2 3 14 -1.</_> + <_>12 9 3 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0393395200371742</threshold> + <left_val>0.2154128998517990</left_val> + <right_val>0.5235713720321655</right_val></_></_> + <_> + <!-- tree 46 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 7 3 3 -1.</_> + <_>9 7 1 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.0988829890266061e-003</threshold> + <left_val>0.6468896865844727</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 5 12 5 -1.</_> + <_>7 5 4 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.1191420964896679e-003</threshold> + <left_val>0.2893089056015015</left_val> + <right_val>0.5254815816879273</right_val></_></_></trees> + <stage_threshold>22.5852909088134770</stage_threshold> + <parent>8</parent> + <next>-1</next></_> + <_> + <!-- stage 10 --> + <trees> + <_> + <!-- tree 0 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 2 6 3 -1.</_> + <_>4 2 3 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.2359891124069691e-003</threshold> + <left_val>0.3299711048603058</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 5 6 10 -1.</_> + <_>5 5 3 5 2.</_> + <_>8 10 3 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.2169889416545630e-003</threshold> + <left_val>0.7041593194007874</left_val> + <right_val>0.3235465884208679</right_val></_></_> + <_> + <!-- tree 1 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>16 18 2 2 -1.</_> + <_>16 18 1 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.2303592935204506e-003</threshold> + <left_node>1</left_node> + <right_val>0.4961170852184296</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>16 18 2 2 -1.</_> + <_>16 18 1 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.2303592935204506e-003</threshold> + <left_val>0.7128043174743652</left_val> + <right_val>0.4961170852184296</right_val></_></_> + <_> + <!-- tree 2 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 4 2 5 -1.</_> + <_>9 4 1 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.5343261444941163e-004</threshold> + <left_val>0.3208472132682800</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 4 1 4 -1.</_> + <_>8 6 1 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.1777061414904892e-004</threshold> + <left_val>0.6613916754722595</left_val> + <right_val>0.3551332950592041</right_val></_></_> + <_> + <!-- tree 3 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 15 12 4 -1.</_> + <_>13 15 6 2 2.</_> + <_>7 17 6 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.7823769487440586e-003</threshold> + <left_val>0.3710134923458099</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>11 18 6 2 -1.</_> + <_>11 19 6 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.0361868236213923e-005</threshold> + <left_val>0.5746393799781799</left_val> + <right_val>0.3894880115985870</right_val></_></_> + <_> + <!-- tree 4 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 7 4 10 -1.</_> + <_>7 12 4 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.5061789676547050e-003</threshold> + <left_node>1</left_node> + <right_val>0.3054102957248688</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 6 10 8 -1.</_> + <_>5 10 10 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.7013119941111654e-004</threshold> + <left_val>0.2885577976703644</left_val> + <right_val>0.6487745046615601</right_val></_></_> + <_> + <!-- tree 5 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>11 1 6 12 -1.</_> + <_>14 1 3 6 2.</_> + <_>11 7 3 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.3378930054605007e-003</threshold> + <left_node>1</left_node> + <right_val>0.3174431025981903</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 8 12 1 -1.</_> + <_>9 8 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.1369170863181353e-003</threshold> + <left_val>0.3820919990539551</left_val> + <right_val>0.5232893228530884</right_val></_></_> + <_> + <!-- tree 6 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 7 3 6 -1.</_> + <_>4 9 3 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.0250400518998504e-003</threshold> + <left_val>0.3622795045375824</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 11 3 4 -1.</_> + <_>4 13 3 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.4726220949087292e-005</threshold> + <left_val>0.6538959145545960</left_val> + <right_val>0.4003680944442749</right_val></_></_> + <_> + <!-- tree 7 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>14 16 2 2 -1.</_> + <_>14 17 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.7102291611954570e-004</threshold> + <left_node>1</left_node> + <right_val>0.3893173038959503</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>15 15 2 2 -1.</_> + <_>15 16 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.7743012439459562e-004</threshold> + <left_val>0.5614532828330994</left_val> + <right_val>0.3687644004821777</right_val></_></_> + <_> + <!-- tree 8 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 12 6 2 -1.</_> + <_>7 13 6 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.9692091094329953e-004</threshold> + <left_node>1</left_node> + <right_val>0.6443027853965759</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 13 4 2 -1.</_> + <_>8 14 4 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.5945948911830783e-004</threshold> + <left_val>0.3380852937698364</left_val> + <right_val>0.5824648141860962</right_val></_></_> + <_> + <!-- tree 9 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>11 1 6 12 -1.</_> + <_>14 1 3 6 2.</_> + <_>11 7 3 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.3973900028504431e-004</threshold> + <left_node>1</left_node> + <right_val>0.3938767015933991</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 2 4 2 -1.</_> + <_>12 3 4 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.9061429025605321e-004</threshold> + <left_val>0.3427971005439758</left_val> + <right_val>0.5515698790550232</right_val></_></_> + <_> + <!-- tree 10 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 10 12 6 -1.</_> + <_>3 10 6 3 2.</_> + <_>9 13 6 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.4110242053866386e-003</threshold> + <left_node>1</left_node> + <right_val>0.3803538084030151</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 1 6 12 -1.</_> + <_>3 1 3 6 2.</_> + <_>6 7 3 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.5764907998964190e-004</threshold> + <left_val>0.6439505219459534</left_val> + <right_val>0.4168345928192139</right_val></_></_> + <_> + <!-- tree 11 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>16 6 4 14 -1.</_> + <_>18 6 2 7 2.</_> + <_>16 13 2 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0220006499439478</threshold> + <left_val>0.6654601097106934</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 1 10 8 -1.</_> + <_>10 1 5 4 2.</_> + <_>5 5 5 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.8731682151556015e-003</threshold> + <left_val>0.4182722866535187</left_val> + <right_val>0.5604724287986755</right_val></_></_> + <_> + <!-- tree 12 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 6 4 14 -1.</_> + <_>0 6 2 7 2.</_> + <_>2 13 2 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0274444594979286</threshold> + <left_val>0.6586862802505493</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 15 12 4 -1.</_> + <_>1 15 6 2 2.</_> + <_>7 17 6 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.9792269449681044e-003</threshold> + <left_val>0.3244912028312683</left_val> + <right_val>0.4882870018482208</right_val></_></_> + <_> + <!-- tree 13 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>10 17 3 3 -1.</_> + <_>11 17 1 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.6783691979944706e-003</threshold> + <left_val>0.2229079008102417</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>11 2 2 6 -1.</_> + <_>12 2 1 3 2.</_> + <_>11 5 1 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.5057219570735469e-005</threshold> + <left_val>0.4107285141944885</left_val> + <right_val>0.5747591257095337</right_val></_></_> + <_> + <!-- tree 14 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 17 3 3 -1.</_> + <_>8 17 1 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.4136710241436958e-003</threshold> + <left_val>0.2065797001123428</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 15 4 3 -1.</_> + <_>8 16 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.3679239936172962e-003</threshold> + <left_val>0.4926423132419586</left_val> + <right_val>0.7139484882354736</right_val></_></_> + <_> + <!-- tree 15 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>10 15 4 2 -1.</_> + <_>12 15 2 1 2.</_> + <_>10 16 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.1426660716533661e-003</threshold> + <left_val>0.6780086755752564</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>13 13 4 3 -1.</_> + <_>13 14 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0109073901548982</threshold> + <left_val>0.5214930176734924</left_val> + <right_val>0.1143995970487595</right_val></_></_> + <_> + <!-- tree 16 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 13 4 3 -1.</_> + <_>3 14 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.8436761610209942e-003</threshold> + <left_node>1</left_node> + <right_val>0.1937526017427445</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 2 2 6 -1.</_> + <_>7 2 1 3 2.</_> + <_>8 5 1 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.0507230197545141e-005</threshold> + <left_val>0.3812577128410339</left_val> + <right_val>0.5514187812805176</right_val></_></_> + <_> + <!-- tree 17 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>2 1 16 3 -1.</_> + <_>2 2 16 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0163457896560431</threshold> + <left_val>0.2474023997783661</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 15 4 2 -1.</_> + <_>12 15 2 1 2.</_> + <_>10 16 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.5987500082701445e-003</threshold> + <left_val>0.4817782938480377</left_val> + <right_val>0.5923079848289490</right_val></_></_> + <_> + <!-- tree 18 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 15 4 2 -1.</_> + <_>6 15 2 1 2.</_> + <_>8 16 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.0257978253066540e-003</threshold> + <left_val>0.7508208751678467</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 0 13 3 -1.</_> + <_>3 1 13 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.7750471644103527e-003</threshold> + <left_val>0.2879810929298401</left_val> + <right_val>0.5199695229530335</right_val></_></_> + <_> + <!-- tree 19 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 9 20 3 -1.</_> + <_>0 10 20 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.2470689620822668e-003</threshold> + <left_val>0.3044910132884979</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 7 9 2 -1.</_> + <_>6 8 9 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.5409620245918632e-003</threshold> + <left_val>0.4063482880592346</left_val> + <right_val>0.5676562786102295</right_val></_></_> + <_> + <!-- tree 20 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 14 3 6 -1.</_> + <_>9 14 1 6 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0128581197932363</threshold> + <left_val>0.0967175588011742</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 10 2 2 -1.</_> + <_>9 11 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.4824670506641269e-004</threshold> + <left_val>0.4537833034992218</left_val> + <right_val>0.6115375161170960</right_val></_></_> + <_> + <!-- tree 21 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 7 2 5 -1.</_> + <_>9 7 1 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-9.0210810303688049e-003</threshold> + <left_node>1</left_node> + <right_val>0.4807750880718231</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 6 10 3 -1.</_> + <_>5 6 5 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0287950299680233</threshold> + <left_val>0.3403795063495636</left_val> + <right_val>0.5255529284477234</right_val></_></_> + <_> + <!-- tree 22 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 7 2 5 -1.</_> + <_>10 7 1 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.0210810303688049e-003</threshold> + <left_node>1</left_node> + <right_val>0.7505835890769959</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 6 10 3 -1.</_> + <_>10 6 5 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.4121179059147835e-003</threshold> + <left_val>0.5455446839332581</left_val> + <right_val>0.3226068913936615</right_val></_></_> + <_> + <!-- tree 23 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>13 9 2 2 -1.</_> + <_>13 9 1 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.7217529024928808e-003</threshold> + <left_val>0.2311848998069763</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 3 12 11 -1.</_> + <_>8 3 4 11 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.1986588984727860</threshold> + <left_val>0.5271047949790955</left_val> + <right_val>0.1469929963350296</right_val></_></_> + <_> + <!-- tree 24 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 1 2 7 -1.</_> + <_>8 1 1 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.5208719560177997e-005</threshold> + <left_val>0.3678138852119446</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 4 3 8 -1.</_> + <_>8 4 1 8 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.9089918136596680e-003</threshold> + <left_val>0.7131929993629456</left_val> + <right_val>0.4993866980075836</right_val></_></_> + <_> + <!-- tree 25 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>13 9 2 2 -1.</_> + <_>13 9 1 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.5106288958340883e-003</threshold> + <left_val>0.5312054157257080</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>11 6 2 2 -1.</_> + <_>12 6 1 1 2.</_> + <_>11 7 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.3921660613268614e-004</threshold> + <left_val>0.4689378142356873</left_val> + <right_val>0.5714021921157837</right_val></_></_> + <_> + <!-- tree 26 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 4 2 3 -1.</_> + <_>5 5 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.9443131797015667e-003</threshold> + <left_node>1</left_node> + <right_val>0.6948797702789307</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 5 1 3 -1.</_> + <_>6 6 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.2065629707649350e-003</threshold> + <left_val>0.4004504978656769</left_val> + <right_val>0.5874881744384766</right_val></_></_> + <_> + <!-- tree 27 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>13 9 2 2 -1.</_> + <_>13 9 1 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.5106288958340883e-003</threshold> + <left_val>0.5329571962356567</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>16 14 3 3 -1.</_> + <_>16 15 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.7514040227979422e-003</threshold> + <left_val>0.5545849204063416</left_val> + <right_val>0.3449581861495972</right_val></_></_> + <_> + <!-- tree 28 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 9 2 2 -1.</_> + <_>6 9 1 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.1978210210800171e-003</threshold> + <left_val>0.1217183023691177</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 14 3 3 -1.</_> + <_>1 15 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.3092850567772985e-003</threshold> + <left_val>0.5375049710273743</left_val> + <right_val>0.3415625095367432</right_val></_></_> + <_> + <!-- tree 29 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>13 1 1 6 -1.</_> + <_>13 3 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.7396182566881180e-004</threshold> + <left_val>0.4195179045200348</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>13 3 7 2 -1.</_> + <_>13 4 7 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0105307102203369</threshold> + <left_val>0.3460753858089447</left_val> + <right_val>0.5155860185623169</right_val></_></_> + <_> + <!-- tree 30 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 6 20 14 -1.</_> + <_>0 13 20 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.4067229926586151</threshold> + <left_val>0.0580656789243221</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 4 3 6 -1.</_> + <_>0 6 3 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0263145491480827</threshold> + <left_val>0.1473449021577835</left_val> + <right_val>0.5559378266334534</right_val></_></_> + <_> + <!-- tree 31 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>10 1 9 6 -1.</_> + <_>10 3 9 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.2557149641215801e-003</threshold> + <left_node>1</left_node> + <right_val>0.5477715134620667</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 0 12 5 -1.</_> + <_>8 0 6 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0121548604220152</threshold> + <left_val>0.4207791090011597</left_val> + <right_val>0.5621880888938904</right_val></_></_> + <_> + <!-- tree 32 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 0 18 5 -1.</_> + <_>6 0 6 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0184365399181843</threshold> + <left_val>0.6447147130966187</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 1 9 6 -1.</_> + <_>1 3 9 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.3676147945225239e-004</threshold> + <left_val>0.2765127122402191</left_val> + <right_val>0.4888595938682556</right_val></_></_> + <_> + <!-- tree 33 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>15 15 2 2 -1.</_> + <_>15 16 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.6265541091561317e-003</threshold> + <left_node>1</left_node> + <right_val>0.5264691114425659</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>13 16 3 4 -1.</_> + <_>13 18 3 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.1119807176291943e-004</threshold> + <left_val>0.5785310268402100</left_val> + <right_val>0.4291102886199951</right_val></_></_> + <_> + <!-- tree 34 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 15 2 2 -1.</_> + <_>3 16 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.1454841266386211e-004</threshold> + <left_node>1</left_node> + <right_val>0.3455410897731781</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 16 3 4 -1.</_> + <_>4 18 3 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.5028748465701938e-004</threshold> + <left_val>0.6026918888092041</left_val> + <right_val>0.4143893122673035</right_val></_></_> + <_> + <!-- tree 35 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>11 14 1 3 -1.</_> + <_>11 15 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.0347720235586166e-003</threshold> + <left_val>0.6095293760299683</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 13 5 3 -1.</_> + <_>9 14 5 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.3966631162911654e-003</threshold> + <left_val>0.6108282208442688</left_val> + <right_val>0.4707720875740051</right_val></_></_> + <_> + <!-- tree 36 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 0 3 6 -1.</_> + <_>0 2 3 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.1795909162610769e-003</threshold> + <left_node>1</left_node> + <right_val>0.3244366943836212</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 1 6 3 -1.</_> + <_>6 1 2 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.6528950072824955e-004</threshold> + <left_val>0.3830757141113281</left_val> + <right_val>0.5734326243400574</right_val></_></_> + <_> + <!-- tree 37 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 13 4 3 -1.</_> + <_>9 14 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.3725210279226303e-003</threshold> + <left_node>1</left_node> + <right_val>0.6610919237136841</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 15 5 3 -1.</_> + <_>8 16 5 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.5799809955060482e-003</threshold> + <left_val>0.6139307022094727</left_val> + <right_val>0.4686149954795837</right_val></_></_> + <_> + <!-- tree 38 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 3 3 2 -1.</_> + <_>9 3 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.0194388758391142e-004</threshold> + <left_node>1</left_node> + <right_val>0.3520022034645081</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 8 18 2 -1.</_> + <_>1 9 18 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.6952210939489305e-004</threshold> + <left_val>0.2578754127025604</left_val> + <right_val>0.5467242002487183</right_val></_></_> + <_> + <!-- tree 39 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>11 14 1 3 -1.</_> + <_>11 15 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.9746137857437134e-004</threshold> + <left_val>0.4820146858692169</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 13 6 3 -1.</_> + <_>8 14 6 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.6688039544969797e-003</threshold> + <left_val>0.5710150003433228</left_val> + <right_val>0.4831911027431488</right_val></_></_> + <_> + <!-- tree 40 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 14 1 3 -1.</_> + <_>8 15 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.9501030743122101e-004</threshold> + <left_val>0.6133679151535034</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 13 12 4 -1.</_> + <_>4 13 6 2 2.</_> + <_>10 15 6 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.1904921419918537e-003</threshold> + <left_val>0.4928582906723023</left_val> + <right_val>0.2581309080123901</right_val></_></_> + <_> + <!-- tree 41 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>10 7 2 2 -1.</_> + <_>10 7 1 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.2274440056644380e-004</threshold> + <left_val>0.4471124112606049</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>13 4 2 8 -1.</_> + <_>14 4 1 4 2.</_> + <_>13 8 1 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.5176713764667511e-003</threshold> + <left_val>0.5161024928092957</left_val> + <right_val>0.3316533863544464</right_val></_></_> + <_> + <!-- tree 42 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 5 4 6 -1.</_> + <_>0 7 4 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0366236083209515</threshold> + <left_val>0.0926062166690826</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 7 2 2 -1.</_> + <_>9 7 1 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.1103712283074856e-003</threshold> + <left_val>0.8522114753723145</left_val> + <right_val>0.5137907862663269</right_val></_></_> + <_> + <!-- tree 43 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>13 0 3 7 -1.</_> + <_>14 0 1 7 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.6017331555485725e-003</threshold> + <left_node>1</left_node> + <right_val>0.5459060072898865</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>11 2 2 14 -1.</_> + <_>11 2 1 14 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0255786404013634</threshold> + <left_val>0.5219352841377258</left_val> + <right_val>0.1927185952663422</right_val></_></_> + <_> + <!-- tree 44 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 0 3 7 -1.</_> + <_>5 0 1 7 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0114474399015307</threshold> + <left_node>1</left_node> + <right_val>0.1916002035140991</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 5 8 12 -1.</_> + <_>5 5 4 6 2.</_> + <_>9 11 4 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.2427501436322927e-004</threshold> + <left_val>0.5231571197509766</left_val> + <right_val>0.3535340130329132</right_val></_></_> + <_> + <!-- tree 45 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>11 4 6 3 -1.</_> + <_>11 5 6 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.7127500921487808e-003</threshold> + <left_node>1</left_node> + <right_val>0.6464101076126099</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 3 4 3 -1.</_> + <_>12 4 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0113375699147582</threshold> + <left_val>0.7383037805557251</left_val> + <right_val>0.4964743852615356</right_val></_></_> + <_> + <!-- tree 46 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 5 10 12 -1.</_> + <_>5 5 5 6 2.</_> + <_>10 11 5 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.1453882157802582e-003</threshold> + <left_val>0.3611705899238586</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 6 12 3 -1.</_> + <_>9 6 6 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.5570756345987320e-003</threshold> + <left_val>0.3421907126903534</left_val> + <right_val>0.5943511724472046</right_val></_></_> + <_> + <!-- tree 47 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 6 2 7 -1.</_> + <_>9 6 1 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.2993308957666159e-003</threshold> + <left_val>0.4550104141235352</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 5 2 4 -1.</_> + <_>9 5 1 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.8430930580943823e-003</threshold> + <left_val>0.4716862142086029</left_val> + <right_val>0.6656190752983093</right_val></_></_> + <_> + <!-- tree 48 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 7 3 3 -1.</_> + <_>9 7 1 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-9.9116540513932705e-004</threshold> + <left_node>1</left_node> + <right_val>0.4592716991901398</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 1 6 4 -1.</_> + <_>7 1 2 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0254964698106050</threshold> + <left_val>0.6563401222229004</left_val> + <right_val>0.1258835047483444</right_val></_></_> + <_> + <!-- tree 49 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>13 16 7 3 -1.</_> + <_>13 17 7 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0157483592629433</threshold> + <left_node>1</left_node> + <right_val>0.5239502191543579</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 4 3 3 -1.</_> + <_>12 5 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0180461201816797</threshold> + <left_val>0.8015851974487305</left_val> + <right_val>0.5007957816123962</right_val></_></_> + <_> + <!-- tree 50 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 16 7 3 -1.</_> + <_>0 17 7 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0103233903646469</threshold> + <left_node>1</left_node> + <right_val>0.2274820059537888</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 4 3 3 -1.</_> + <_>5 5 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.6452240524813533e-003</threshold> + <left_val>0.4351946115493774</left_val> + <right_val>0.5867627859115601</right_val></_></_> + <_> + <!-- tree 51 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 9 8 10 -1.</_> + <_>12 9 4 10 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0158811490982771</threshold> + <left_val>0.4465051889419556</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 10 12 5 -1.</_> + <_>12 10 4 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0105865197256207</threshold> + <left_val>0.4544458091259003</left_val> + <right_val>0.5707110762596130</right_val></_></_> + <_> + <!-- tree 52 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 9 8 10 -1.</_> + <_>4 9 4 10 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0215316899120808</threshold> + <left_val>0.6527643799781799</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 10 12 5 -1.</_> + <_>4 10 4 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.2480469457805157e-003</threshold> + <left_val>0.3444727957248688</left_val> + <right_val>0.5324636101722717</right_val></_></_></trees> + <stage_threshold>25.6093006134033200</stage_threshold> + <parent>9</parent> + <next>-1</next></_> + <_> + <!-- stage 11 --> + <trees> + <_> + <!-- tree 0 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>2 3 6 2 -1.</_> + <_>5 3 3 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.8219340126961470e-003</threshold> + <left_val>0.3108788132667542</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 0 17 9 -1.</_> + <_>0 3 17 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.1313941627740860e-003</threshold> + <left_val>0.3133237063884735</left_val> + <right_val>0.6645867228507996</right_val></_></_> + <_> + <!-- tree 1 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 7 12 2 -1.</_> + <_>8 7 4 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.7055979697033763e-003</threshold> + <left_val>0.2640131115913391</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 4 6 4 -1.</_> + <_>12 4 2 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.4483548814896494e-005</threshold> + <left_val>0.5647205114364624</left_val> + <right_val>0.3485372960567474</right_val></_></_> + <_> + <!-- tree 2 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 10 20 4 -1.</_> + <_>0 12 20 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.8342390325851738e-004</threshold> + <left_node>1</left_node> + <right_val>0.3140654861927033</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 3 6 5 -1.</_> + <_>6 3 2 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.1868910882622004e-003</threshold> + <left_val>0.6489198803901672</left_val> + <right_val>0.3887729048728943</right_val></_></_> + <_> + <!-- tree 3 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 1 18 4 -1.</_> + <_>7 1 6 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.1604432016611099</threshold> + <left_node>1</left_node> + <right_val>0.7216529846191406</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>13 9 2 3 -1.</_> + <_>13 9 1 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.7285560071468353e-003</threshold> + <left_val>0.1653137952089310</left_val> + <right_val>0.5139825940132141</right_val></_></_> + <_> + <!-- tree 4 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 15 7 4 -1.</_> + <_>6 17 7 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.2638481469766703e-006</threshold> + <left_val>0.3140619993209839</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 17 4 2 -1.</_> + <_>3 18 4 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.5551197146996856e-004</threshold> + <left_val>0.5993698835372925</left_val> + <right_val>0.3317398130893707</right_val></_></_> + <_> + <!-- tree 5 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 4 8 10 -1.</_> + <_>9 9 8 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0108223203569651</threshold> + <left_val>0.2652938067913055</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 17 3 2 -1.</_> + <_>10 17 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.5834020711481571e-003</threshold> + <left_val>0.1849568933248520</left_val> + <right_val>0.5313957929611206</right_val></_></_> + <_> + <!-- tree 6 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 2 4 8 -1.</_> + <_>8 6 4 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.0205070506781340e-003</threshold> + <left_node>1</left_node> + <right_val>0.4040099978446960</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 4 14 12 -1.</_> + <_>3 4 7 6 2.</_> + <_>10 10 7 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0778646171092987</threshold> + <left_val>0.6158189773559570</left_val> + <right_val>0.1786486953496933</right_val></_></_> + <_> + <!-- tree 7 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 7 6 4 -1.</_> + <_>9 7 2 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0264943800866604</threshold> + <left_val>0.4511089920997620</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 7 9 4 -1.</_> + <_>6 9 9 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0369121097028255</threshold> + <left_val>0.4528219997882843</left_val> + <right_val>0.5972282886505127</right_val></_></_> + <_> + <!-- tree 8 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>2 10 3 3 -1.</_> + <_>2 11 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.7857790961861610e-003</threshold> + <left_node>1</left_node> + <right_val>0.2533892095088959</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 6 2 9 -1.</_> + <_>4 9 2 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.3849771656095982e-004</threshold> + <left_val>0.3410412073135376</left_val> + <right_val>0.5923643708229065</right_val></_></_> + <_> + <!-- tree 9 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 11 3 3 -1.</_> + <_>9 12 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0110031999647617</threshold> + <left_val>0.6958044171333313</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 1 15 2 -1.</_> + <_>3 2 15 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.1737640015780926e-003</threshold> + <left_val>0.3851084113121033</left_val> + <right_val>0.5408189296722412</right_val></_></_> + <_> + <!-- tree 10 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 8 2 3 -1.</_> + <_>9 9 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.6596669815480709e-003</threshold> + <left_val>0.2009308934211731</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 6 2 5 -1.</_> + <_>10 6 1 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.4822750128805637e-003</threshold> + <left_val>0.6295393109321594</left_val> + <right_val>0.4395040869712830</right_val></_></_> + <_> + <!-- tree 11 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 7 2 3 -1.</_> + <_>9 8 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.4606071896851063e-003</threshold> + <left_val>0.2405299991369247</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 10 12 10 -1.</_> + <_>4 15 12 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.5969649907201529e-003</threshold> + <left_val>0.5450174212455750</left_val> + <right_val>0.3782357871532440</right_val></_></_> + <_> + <!-- tree 12 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 10 4 2 -1.</_> + <_>0 11 4 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.6222559865564108e-003</threshold> + <left_val>0.3033896982669830</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 15 9 2 -1.</_> + <_>5 16 9 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.2059339787811041e-003</threshold> + <left_val>0.4633778929710388</left_val> + <right_val>0.6335952281951904</right_val></_></_> + <_> + <!-- tree 13 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 14 6 3 -1.</_> + <_>8 15 6 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.3124938383698463e-003</threshold> + <left_node>1</left_node> + <right_val>0.6598826050758362</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 16 4 3 -1.</_> + <_>8 17 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.4961250387132168e-003</threshold> + <left_val>0.6621696949005127</left_val> + <right_val>0.4755246937274933</right_val></_></_> + <_> + <!-- tree 14 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 9 4 2 -1.</_> + <_>8 10 4 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.3860689941793680e-003</threshold> + <left_val>0.2801201045513153</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 3 14 2 -1.</_> + <_>3 4 14 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.1588460337370634e-004</threshold> + <left_val>0.3829489052295685</left_val> + <right_val>0.5623626708984375</right_val></_></_> + <_> + <!-- tree 15 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>11 12 1 2 -1.</_> + <_>11 13 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.0330002927221358e-005</threshold> + <left_val>0.4536342918872833</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 12 12 1 -1.</_> + <_>8 12 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.0976549421902746e-004</threshold> + <left_val>0.5608139038085938</left_val> + <right_val>0.4265779852867127</right_val></_></_> + <_> + <!-- tree 16 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 2 1 2 -1.</_> + <_>0 3 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.3642259873449802e-003</threshold> + <left_node>1</left_node> + <right_val>0.2637091875076294</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 4 4 6 -1.</_> + <_>9 4 2 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.5483660390600562e-003</threshold> + <left_val>0.4170750975608826</left_val> + <right_val>0.5932987928390503</right_val></_></_> + <_> + <!-- tree 17 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 2 20 14 -1.</_> + <_>10 2 10 7 2.</_> + <_>0 9 10 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.1917960941791534</threshold> + <left_val>0.5256764292716980</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>14 6 1 3 -1.</_> + <_>14 7 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.4776909053325653e-003</threshold> + <left_val>0.6632621884346008</left_val> + <right_val>0.4892588853836060</right_val></_></_> + <_> + <!-- tree 18 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 4 20 12 -1.</_> + <_>0 4 10 6 2.</_> + <_>10 10 10 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.1264917999505997</threshold> + <left_val>0.1499778926372528</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 12 1 2 -1.</_> + <_>8 13 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.5253327193204314e-005</threshold> + <left_val>0.4233320057392120</left_val> + <right_val>0.5756040215492249</right_val></_></_> + <_> + <!-- tree 19 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 18 3 2 -1.</_> + <_>10 18 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.1856421157717705e-003</threshold> + <left_val>0.5288826823234558</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 17 6 2 -1.</_> + <_>11 17 2 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.7478230185806751e-004</threshold> + <left_val>0.4524017870426178</left_val> + <right_val>0.5604125261306763</right_val></_></_> + <_> + <!-- tree 20 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 6 2 3 -1.</_> + <_>5 7 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.2906810045242310e-003</threshold> + <left_val>0.5578274130821228</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 4 3 3 -1.</_> + <_>5 5 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.6744500026106834e-003</threshold> + <left_val>0.3323057889938355</left_val> + <right_val>0.5558788180351257</right_val></_></_> + <_> + <!-- tree 21 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>14 15 3 2 -1.</_> + <_>14 16 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.2349759927019477e-003</threshold> + <left_node>1</left_node> + <right_val>0.3653947114944458</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>11 3 3 4 -1.</_> + <_>12 3 1 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.7158754467964172e-003</threshold> + <left_val>0.1924533993005753</left_val> + <right_val>0.5313649773597717</right_val></_></_> + <_> + <!-- tree 22 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 15 3 2 -1.</_> + <_>3 16 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.6613621525466442e-003</threshold> + <left_node>1</left_node> + <right_val>0.2027730941772461</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 12 2 3 -1.</_> + <_>9 13 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.5815992206335068e-003</threshold> + <left_val>0.7636060118675232</left_val> + <right_val>0.5140826106071472</right_val></_></_> + <_> + <!-- tree 23 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 13 3 7 -1.</_> + <_>10 13 1 7 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0143521204590797</threshold> + <left_val>0.5252975821495056</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 12 5 3 -1.</_> + <_>12 13 5 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.7948719263076782e-003</threshold> + <left_val>0.2632937133312225</left_val> + <right_val>0.5328689217567444</right_val></_></_> + <_> + <!-- tree 24 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 18 3 2 -1.</_> + <_>9 18 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.4155680332332850e-003</threshold> + <left_val>0.2416087985038757</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 7 12 4 -1.</_> + <_>4 7 6 2 2.</_> + <_>10 9 6 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.2639090679585934e-003</threshold> + <left_val>0.3936544954776764</left_val> + <right_val>0.5478742122650147</right_val></_></_> + <_> + <!-- tree 25 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 19 14 1 -1.</_> + <_>6 19 7 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.7177697569131851e-003</threshold> + <left_val>0.4788199067115784</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>16 14 3 2 -1.</_> + <_>16 15 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.2232629600912333e-003</threshold> + <left_val>0.3631612062454224</left_val> + <right_val>0.5288316011428833</right_val></_></_> + <_> + <!-- tree 26 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 0 6 10 -1.</_> + <_>1 0 3 5 2.</_> + <_>4 5 3 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0421883687376976</threshold> + <left_val>0.6931139230728149</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 0 4 10 -1.</_> + <_>1 0 2 5 2.</_> + <_>3 5 2 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0198757499456406</threshold> + <left_val>0.4520100057125092</left_val> + <right_val>0.6855055093765259</right_val></_></_> + <_> + <!-- tree 27 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>15 3 5 6 -1.</_> + <_>15 5 5 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0311345104128122</threshold> + <left_node>1</left_node> + <right_val>0.5300424098968506</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 5 2 15 -1.</_> + <_>9 10 2 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.7032387703657150e-003</threshold> + <left_val>0.5606892108917236</left_val> + <right_val>0.4230622947216034</right_val></_></_> + <_> + <!-- tree 28 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 3 5 6 -1.</_> + <_>0 5 5 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.2733682096004486e-003</threshold> + <left_node>1</left_node> + <right_val>0.3247228860855103</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 0 3 2 -1.</_> + <_>7 0 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.1231069006025791e-003</threshold> + <left_val>0.1985695958137512</left_val> + <right_val>0.5349872708320618</right_val></_></_> + <_> + <!-- tree 29 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 8 8 2 -1.</_> + <_>16 8 4 1 2.</_> + <_>12 9 4 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.6453849063254893e-004</threshold> + <left_val>0.4207508862018585</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 8 12 1 -1.</_> + <_>9 8 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0303558893501759</threshold> + <left_val>0.5153458714485169</left_val> + <right_val>0.3118101060390472</right_val></_></_> + <_> + <!-- tree 30 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 13 3 3 -1.</_> + <_>3 14 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.2992769740521908e-003</threshold> + <left_val>0.3274506926536560</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 13 3 2 -1.</_> + <_>5 14 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.9509199773892760e-004</threshold> + <left_val>0.5953078269958496</left_val> + <right_val>0.4225521087646484</right_val></_></_> + <_> + <!-- tree 31 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 15 3 3 -1.</_> + <_>9 16 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.7784480527043343e-003</threshold> + <left_val>0.7211179733276367</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 15 7 3 -1.</_> + <_>7 16 7 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0169175993651152</threshold> + <left_val>0.4936591982841492</left_val> + <right_val>0.7030277252197266</right_val></_></_> + <_> + <!-- tree 32 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 14 11 6 -1.</_> + <_>3 16 11 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0519485697150230</threshold> + <left_val>0.1425534933805466</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 19 14 1 -1.</_> + <_>7 19 7 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.4751220159232616e-003</threshold> + <left_val>0.6059331893920898</left_val> + <right_val>0.4393995106220245</right_val></_></_> + <_> + <!-- tree 33 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 17 6 2 -1.</_> + <_>11 17 2 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.5210839592327829e-005</threshold> + <left_val>0.4488849937915802</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 11 6 2 -1.</_> + <_>14 11 2 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.0235579684376717e-003</threshold> + <left_val>0.4256550073623657</left_val> + <right_val>0.5795438289642334</right_val></_></_> + <_> + <!-- tree 34 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 17 6 2 -1.</_> + <_>7 17 2 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.0427719826111570e-004</threshold> + <left_val>0.4246039986610413</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 1 9 10 -1.</_> + <_>3 1 3 10 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.7853781878948212e-003</threshold> + <left_val>0.4958009123802185</left_val> + <right_val>0.6759430766105652</right_val></_></_> + <_> + <!-- tree 35 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>10 1 3 3 -1.</_> + <_>11 1 1 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.4012699034065008e-003</threshold> + <left_val>0.5423480868339539</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 5 6 4 -1.</_> + <_>9 5 3 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.8582378551363945e-004</threshold> + <left_val>0.3636542856693268</left_val> + <right_val>0.5464348793029785</right_val></_></_> + <_> + <!-- tree 36 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 1 3 3 -1.</_> + <_>8 1 1 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.2973360028117895e-003</threshold> + <left_val>0.2548818886280060</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 4 4 11 -1.</_> + <_>2 4 2 11 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0143301896750927</threshold> + <left_val>0.6587656736373901</left_val> + <right_val>0.4532802104949951</right_val></_></_> + <_> + <!-- tree 37 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 5 6 4 -1.</_> + <_>9 5 3 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.8565965890884399e-004</threshold> + <left_val>0.3822771012783051</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 0 8 10 -1.</_> + <_>10 0 4 5 2.</_> + <_>6 5 4 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0466407611966133</threshold> + <left_val>0.3077321946620941</left_val> + <right_val>0.5244132876396179</right_val></_></_> + <_> + <!-- tree 38 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 6 5 14 -1.</_> + <_>6 13 5 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.1190730035305023</threshold> + <left_val>0.1033862978219986</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 5 4 14 -1.</_> + <_>8 12 4 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0193332806229591</threshold> + <left_val>0.5554745197296143</left_val> + <right_val>0.3221316933631897</right_val></_></_> + <_> + <!-- tree 39 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 7 6 5 -1.</_> + <_>9 7 2 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0314278490841389</threshold> + <left_val>0.4682379066944122</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 3 3 9 -1.</_> + <_>9 6 3 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.0082130504306406e-004</threshold> + <left_val>0.5373070240020752</left_val> + <right_val>0.3800666928291321</right_val></_></_> + <_> + <!-- tree 40 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 1 3 3 -1.</_> + <_>9 1 1 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.2584900297224522e-003</threshold> + <left_val>0.1799207031726837</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 6 2 4 -1.</_> + <_>10 6 1 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.2861045375466347e-003</threshold> + <left_val>0.5095068812370300</left_val> + <right_val>0.7544605135917664</right_val></_></_> + <_> + <!-- tree 41 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>10 8 6 9 -1.</_> + <_>10 8 3 9 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.0529709290713072e-003</threshold> + <left_val>0.5628644824028015</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>16 4 3 8 -1.</_> + <_>17 4 1 8 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.2524869311600924e-003</threshold> + <left_val>0.4801689088344574</left_val> + <right_val>0.5802102088928223</right_val></_></_> + <_> + <!-- tree 42 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 9 10 6 -1.</_> + <_>5 9 5 3 2.</_> + <_>10 12 5 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0318849012255669</threshold> + <left_val>0.1742745041847229</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 5 6 4 -1.</_> + <_>8 5 3 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.8379340181127191e-003</threshold> + <left_val>0.3466596901416779</left_val> + <right_val>0.5107154846191406</right_val></_></_> + <_> + <!-- tree 43 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 8 4 2 -1.</_> + <_>9 9 4 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.8512680223211646e-004</threshold> + <left_node>1</left_node> + <right_val>0.5326086282730103</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>11 7 2 2 -1.</_> + <_>11 7 1 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.5407879147678614e-003</threshold> + <left_val>0.6342775225639343</left_val> + <right_val>0.4992693066596985</right_val></_></_> + <_> + <!-- tree 44 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 12 4 8 -1.</_> + <_>8 12 2 4 2.</_> + <_>10 16 2 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.1559060811996460e-003</threshold> + <left_val>0.3433429002761841</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 1 4 9 -1.</_> + <_>0 4 4 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0449687503278255</threshold> + <left_val>0.1868136972188950</left_val> + <right_val>0.5215464830398560</right_val></_></_> + <_> + <!-- tree 45 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 10 3 3 -1.</_> + <_>9 11 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.8984281495213509e-003</threshold> + <left_node>1</left_node> + <right_val>0.6229305267333984</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 11 4 2 -1.</_> + <_>8 12 4 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.2763120252639055e-003</threshold> + <left_val>0.4935772120952606</left_val> + <right_val>0.7217944860458374</right_val></_></_> + <_> + <!-- tree 46 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 8 4 2 -1.</_> + <_>7 9 4 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.0161520185647532e-004</threshold> + <left_node>1</left_node> + <right_val>0.5007976293563843</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 8 6 1 -1.</_> + <_>9 8 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.6290300118271261e-004</threshold> + <left_val>0.6024149060249329</left_val> + <right_val>0.2329508066177368</right_val></_></_> + <_> + <!-- tree 47 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>16 0 4 9 -1.</_> + <_>16 0 2 9 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.0541364625096321e-003</threshold> + <left_val>0.4510416984558106</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>16 0 3 6 -1.</_> + <_>16 3 3 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0353984907269478</threshold> + <left_val>0.5141996741294861</left_val> + <right_val>0.2860291898250580</right_val></_></_> + <_> + <!-- tree 48 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 0 4 9 -1.</_> + <_>2 0 2 9 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.6469351984560490e-003</threshold> + <left_val>0.4704925119876862</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 0 3 6 -1.</_> + <_>1 3 3 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.4807190056890249e-003</threshold> + <left_val>0.4179851114749908</left_val> + <right_val>0.6726647019386292</right_val></_></_> + <_> + <!-- tree 49 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 7 6 9 -1.</_> + <_>11 7 2 9 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.1088787838816643e-003</threshold> + <left_val>0.5809801816940308</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 6 3 6 -1.</_> + <_>11 6 1 6 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.0714469719678164e-003</threshold> + <left_val>0.6074783802032471</left_val> + <right_val>0.4524059891700745</right_val></_></_> + <_> + <!-- tree 50 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 2 18 2 -1.</_> + <_>1 2 9 1 2.</_> + <_>10 3 9 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.8939060866832733e-003</threshold> + <left_val>0.3383519947528839</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 8 6 8 -1.</_> + <_>7 8 2 8 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.3467279495671391e-003</threshold> + <left_val>0.5696910023689270</left_val> + <right_val>0.3970845043659210</right_val></_></_> + <_> + <!-- tree 51 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 0 6 16 -1.</_> + <_>11 0 2 16 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0907791331410408</threshold> + <left_val>0.1502701938152313</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>14 1 6 18 -1.</_> + <_>17 1 3 9 2.</_> + <_>14 10 3 9 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0831717625260353</threshold> + <left_val>0.7573670744895935</left_val> + <right_val>0.4936437010765076</right_val></_></_> + <_> + <!-- tree 52 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>2 9 2 3 -1.</_> + <_>2 10 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.4107000315561891e-003</threshold> + <left_val>0.3390932977199554</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 1 6 18 -1.</_> + <_>0 1 3 9 2.</_> + <_>3 10 3 9 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0556687600910664</threshold> + <left_val>0.5025097131729126</left_val> + <right_val>0.7422083020210266</right_val></_></_> + <_> + <!-- tree 53 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>11 8 4 12 -1.</_> + <_>11 8 2 12 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0577015392482281</threshold> + <left_val>0.5197371840476990</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>2 1 18 18 -1.</_> + <_>2 10 18 9 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.4250329136848450</threshold> + <left_val>0.0973469167947769</left_val> + <right_val>0.5185739994049072</right_val></_></_> + <_> + <!-- tree 54 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 3 3 1 -1.</_> + <_>7 3 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.4380719191394746e-004</threshold> + <left_val>0.3649350106716156</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 12 2 2 -1.</_> + <_>4 13 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.7924769781529903e-004</threshold> + <left_val>0.5619279146194458</left_val> + <right_val>0.3760297000408173</right_val></_></_> + <_> + <!-- tree 55 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 13 5 3 -1.</_> + <_>8 14 5 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.0382469780743122e-003</threshold> + <left_node>1</left_node> + <right_val>0.6328445076942444</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 14 4 3 -1.</_> + <_>8 15 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0151911703869700</threshold> + <left_val>0.4936082065105438</left_val> + <right_val>0.7426524758338928</right_val></_></_> + <_> + <!-- tree 56 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 12 5 3 -1.</_> + <_>3 13 5 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0123003898188472</threshold> + <left_val>0.1389349997043610</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 3 3 4 -1.</_> + <_>7 3 1 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.5168030513450503e-003</threshold> + <left_val>0.5091962218284607</left_val> + <right_val>0.3482648134231567</right_val></_></_> + <_> + <!-- tree 57 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>11 10 2 2 -1.</_> + <_>12 10 1 1 2.</_> + <_>11 11 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.5754547510296106e-004</threshold> + <left_node>1</left_node> + <right_val>0.6036316752433777</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 8 12 1 -1.</_> + <_>9 8 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0189622007310390</threshold> + <left_val>0.2319173067808151</left_val> + <right_val>0.5116652846336365</right_val></_></_> + <_> + <!-- tree 58 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 4 4 8 -1.</_> + <_>10 4 2 8 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0222722608596087</threshold> + <left_val>0.6555022001266480</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 6 8 5 -1.</_> + <_>10 6 4 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0251452308148146</threshold> + <left_val>0.1326071023941040</left_val> + <right_val>0.4674034118652344</right_val></_></_> + <_> + <!-- tree 59 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>10 4 6 4 -1.</_> + <_>12 4 2 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0195339005440474</threshold> + <left_val>0.5182027220726013</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 7 2 2 -1.</_> + <_>13 7 1 1 2.</_> + <_>12 8 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.1231349781155586e-003</threshold> + <left_val>0.6318243145942688</left_val> + <right_val>0.4825519025325775</right_val></_></_> + <_> + <!-- tree 60 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 5 10 8 -1.</_> + <_>3 9 10 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.4861139934509993e-003</threshold> + <left_val>0.2918671071529388</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 1 2 12 -1.</_> + <_>7 7 2 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.5002888762392104e-004</threshold> + <left_val>0.5621371269226074</left_val> + <right_val>0.4249213039875031</right_val></_></_> + <_> + <!-- tree 61 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 7 2 2 -1.</_> + <_>13 7 1 1 2.</_> + <_>12 8 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.1231349781155586e-003</threshold> + <left_node>1</left_node> + <right_val>0.4813745021820068</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>11 13 1 6 -1.</_> + <_>11 16 1 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0104097397997975</threshold> + <left_val>0.5184006094932556</left_val> + <right_val>0.2051223069429398</right_val></_></_> + <_> + <!-- tree 62 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 1 6 15 -1.</_> + <_>7 1 2 15 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0878325626254082</threshold> + <left_val>0.1179921999573708</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 7 2 2 -1.</_> + <_>6 7 1 1 2.</_> + <_>7 8 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.6584879485890269e-003</threshold> + <left_val>0.4987811148166657</left_val> + <right_val>0.6973755955696106</right_val></_></_> + <_> + <!-- tree 63 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>17 5 2 2 -1.</_> + <_>17 6 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.3008750285953283e-003</threshold> + <left_node>1</left_node> + <right_val>0.5339831113815308</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 3 4 10 -1.</_> + <_>12 3 2 5 2.</_> + <_>10 8 2 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0330261699855328</threshold> + <left_val>0.5033289194107056</left_val> + <right_val>0.6851906776428223</right_val></_></_> + <_> + <!-- tree 64 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 5 2 2 -1.</_> + <_>1 6 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.3585069682449102e-003</threshold> + <left_val>0.3002822101116180</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 10 2 2 -1.</_> + <_>7 10 1 1 2.</_> + <_>8 11 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.8067491995170712e-004</threshold> + <left_val>0.4593083858489990</left_val> + <right_val>0.6440045237541199</right_val></_></_> + <_> + <!-- tree 65 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 12 14 4 -1.</_> + <_>10 12 7 2 2.</_> + <_>3 14 7 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0180257596075535</threshold> + <left_node>1</left_node> + <right_val>0.5311291217803955</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 15 3 2 -1.</_> + <_>9 16 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.2354910140857100e-003</threshold> + <left_val>0.4729106128215790</left_val> + <right_val>0.5721461176872253</right_val></_></_> + <_> + <!-- tree 66 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 13 3 3 -1.</_> + <_>1 14 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-9.2583027435466647e-004</threshold> + <left_val>0.3662332892417908</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 3 1 2 -1.</_> + <_>0 4 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.0123997759073973e-004</threshold> + <left_val>0.5361989736557007</left_val> + <right_val>0.3008632957935333</right_val></_></_></trees> + <stage_threshold>32.6471290588378910</stage_threshold> + <parent>10</parent> + <next>-1</next></_> + <_> + <!-- stage 12 --> + <trees> + <_> + <!-- tree 0 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 7 6 1 -1.</_> + <_>9 7 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.4914839304983616e-003</threshold> + <left_val>0.3422389030456543</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 4 16 6 -1.</_> + <_>0 6 16 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0504885986447334</threshold> + <left_val>0.7703458070755005</left_val> + <right_val>0.4516390860080719</right_val></_></_> + <_> + <!-- tree 1 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 3 2 14 -1.</_> + <_>9 10 2 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.7838351717218757e-004</threshold> + <left_node>1</left_node> + <right_val>0.3256342113018036</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 0 4 3 -1.</_> + <_>12 0 2 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.3572890495415777e-004</threshold> + <left_val>0.3406555950641632</left_val> + <right_val>0.5897027254104614</right_val></_></_> + <_> + <!-- tree 2 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 18 12 2 -1.</_> + <_>8 18 4 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.5575071126222610e-003</threshold> + <left_val>0.4306578934192658</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 10 12 4 -1.</_> + <_>8 10 4 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.1241987645626068e-003</threshold> + <left_val>0.7149587273597717</left_val> + <right_val>0.4345684945583344</right_val></_></_> + <_> + <!-- tree 3 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 9 2 2 -1.</_> + <_>9 10 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.4612158671952784e-004</threshold> + <left_val>0.3295974135398865</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>14 1 2 8 -1.</_> + <_>15 1 1 4 2.</_> + <_>14 5 1 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.8972938889637589e-004</threshold> + <left_val>0.5845620036125183</left_val> + <right_val>0.3526687920093536</right_val></_></_> + <_> + <!-- tree 4 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 4 9 1 -1.</_> + <_>6 4 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.1604831646254752e-006</threshold> + <left_val>0.4081954956054688</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 3 4 2 -1.</_> + <_>3 4 4 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.8497708737850189e-004</threshold> + <left_val>0.4203113019466400</left_val> + <right_val>0.6634126901626587</right_val></_></_> + <_> + <!-- tree 5 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>11 15 2 4 -1.</_> + <_>11 17 2 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.9489860278554261e-004</threshold> + <left_val>0.3942466974258423</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>14 13 2 6 -1.</_> + <_>14 15 2 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0170838497579098</threshold> + <left_val>0.2294072061777115</left_val> + <right_val>0.5238960981369019</right_val></_></_> + <_> + <!-- tree 6 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 6 1 6 -1.</_> + <_>6 9 1 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.3513697609305382e-004</threshold> + <left_val>0.3026031851768494</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 10 8 8 -1.</_> + <_>6 14 8 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.5499608647078276e-004</threshold> + <left_val>0.6032196283340454</left_val> + <right_val>0.3412458896636963</right_val></_></_> + <_> + <!-- tree 7 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 13 4 3 -1.</_> + <_>8 14 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.0216713249683380e-003</threshold> + <left_node>1</left_node> + <right_val>0.7306240797042847</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 11 4 8 -1.</_> + <_>10 15 4 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0389305092394352</threshold> + <left_val>0.3599325120449066</left_val> + <right_val>0.5234380960464478</right_val></_></_> + <_> + <!-- tree 8 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 11 6 1 -1.</_> + <_>7 11 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.0348767621908337e-005</threshold> + <left_node>1</left_node> + <right_val>0.3493758141994476</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 4 6 10 -1.</_> + <_>8 4 3 10 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.5350573062896729e-003</threshold> + <left_val>0.2746109068393707</left_val> + <right_val>0.5626586079597473</right_val></_></_> + <_> + <!-- tree 9 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>14 2 6 3 -1.</_> + <_>14 3 6 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0108544500544667</threshold> + <left_val>0.5282226204872131</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 12 3 2 -1.</_> + <_>9 13 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.5329501153901219e-004</threshold> + <left_val>0.4522049129009247</left_val> + <right_val>0.6054301857948303</right_val></_></_> + <_> + <!-- tree 10 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 1 4 6 -1.</_> + <_>8 3 4 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.8117150466423482e-004</threshold> + <left_val>0.3306862115859985</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 5 13 8 -1.</_> + <_>3 9 13 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.6641560038551688e-004</threshold> + <left_val>0.1455000042915344</left_val> + <right_val>0.5384927988052368</right_val></_></_> + <_> + <!-- tree 11 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 5 5 3 -1.</_> + <_>12 6 5 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.4854792803525925e-003</threshold> + <left_node>1</left_node> + <right_val>0.4814155995845795</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 14 15 6 -1.</_> + <_>5 16 15 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0189343094825745</threshold> + <left_val>0.3563741147518158</left_val> + <right_val>0.5405145287513733</right_val></_></_> + <_> + <!-- tree 12 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 5 5 3 -1.</_> + <_>3 6 5 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.9814549274742603e-003</threshold> + <left_node>1</left_node> + <right_val>0.6957743167877197</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 14 2 6 -1.</_> + <_>9 14 1 3 2.</_> + <_>10 17 1 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.4286780282855034e-003</threshold> + <left_val>0.5050892829895020</left_val> + <right_val>0.2316994965076447</right_val></_></_> + <_> + <!-- tree 13 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 12 3 2 -1.</_> + <_>9 13 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.4203791185282171e-004</threshold> + <left_node>1</left_node> + <right_val>0.6018581986427307</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 13 3 2 -1.</_> + <_>9 14 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.3822550429031253e-004</threshold> + <left_val>0.4755082130432129</left_val> + <right_val>0.5585237741470337</right_val></_></_> + <_> + <!-- tree 14 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 2 6 3 -1.</_> + <_>0 3 6 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.4261639490723610e-003</threshold> + <left_val>0.2282465994358063</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 1 9 11 -1.</_> + <_>3 1 3 11 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.9637769162654877e-003</threshold> + <left_val>0.4040588140487671</left_val> + <right_val>0.5650169849395752</right_val></_></_> + <_> + <!-- tree 15 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 13 4 6 -1.</_> + <_>10 13 2 3 2.</_> + <_>8 16 2 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0136540504172444</threshold> + <left_val>0.5267739295959473</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 13 6 3 -1.</_> + <_>7 14 6 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-9.9892877042293549e-003</threshold> + <left_val>0.6794049739837647</left_val> + <right_val>0.4797033965587616</right_val></_></_> + <_> + <!-- tree 16 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 12 14 4 -1.</_> + <_>3 12 7 2 2.</_> + <_>10 14 7 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0365586318075657</threshold> + <left_node>1</left_node> + <right_val>0.0884257331490517</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 14 1 4 -1.</_> + <_>7 16 1 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.8999379941960797e-005</threshold> + <left_val>0.4020788073539734</left_val> + <right_val>0.5457332134246826</right_val></_></_> + <_> + <!-- tree 17 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 13 4 6 -1.</_> + <_>10 13 2 3 2.</_> + <_>8 16 2 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0136540504172444</threshold> + <left_val>0.5267612934112549</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 14 1 3 -1.</_> + <_>10 15 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.8802779959514737e-003</threshold> + <left_val>0.4806052148342133</left_val> + <right_val>0.6394364833831787</right_val></_></_> + <_> + <!-- tree 18 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 13 4 6 -1.</_> + <_>8 13 2 3 2.</_> + <_>10 16 2 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0136540504172444</threshold> + <left_val>0.1724810004234314</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 14 1 3 -1.</_> + <_>9 15 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.2778700329363346e-003</threshold> + <left_val>0.4479824006557465</left_val> + <right_val>0.6310008764266968</right_val></_></_> + <_> + <!-- tree 19 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>10 15 2 3 -1.</_> + <_>10 16 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.8843395244330168e-004</threshold> + <left_node>1</left_node> + <right_val>0.5948169231414795</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>11 16 1 2 -1.</_> + <_>11 17 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.4511500012304168e-005</threshold> + <left_val>0.4854174852371216</left_val> + <right_val>0.5309361219406128</right_val></_></_> + <_> + <!-- tree 20 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 0 2 2 -1.</_> + <_>9 1 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.2775429533794522e-004</threshold> + <left_val>0.3183631896972656</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 1 5 8 -1.</_> + <_>0 5 5 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0147537402808666</threshold> + <left_val>0.3084976077079773</left_val> + <right_val>0.5352026224136353</right_val></_></_> + <_> + <!-- tree 21 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>10 14 2 3 -1.</_> + <_>10 15 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.4148250706493855e-003</threshold> + <left_val>0.6115326881408691</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 13 2 3 -1.</_> + <_>10 14 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.5806681998074055e-003</threshold> + <left_val>0.4951646029949188</left_val> + <right_val>0.7061331272125244</right_val></_></_> + <_> + <!-- tree 22 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 3 16 6 -1.</_> + <_>0 6 16 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.7734688743948936e-003</threshold> + <left_node>1</left_node> + <right_val>0.3754220902919769</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 1 2 2 -1.</_> + <_>5 1 1 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.4033669079653919e-005</threshold> + <left_val>0.4115517139434815</left_val> + <right_val>0.5889444947242737</right_val></_></_> + <_> + <!-- tree 23 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 7 2 3 -1.</_> + <_>9 8 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.2278084009885788e-003</threshold> + <left_val>0.0956105664372444</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 8 2 12 -1.</_> + <_>10 12 2 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.3380909375846386e-003</threshold> + <left_val>0.5300508737564087</left_val> + <right_val>0.3961898088455200</right_val></_></_> + <_> + <!-- tree 24 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 7 2 2 -1.</_> + <_>10 7 1 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.7049109339714050e-003</threshold> + <left_val>0.6481869220733643</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 0 6 8 -1.</_> + <_>7 0 2 8 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.7341338619589806e-003</threshold> + <left_val>0.5110440254211426</left_val> + <right_val>0.3121519088745117</right_val></_></_> + <_> + <!-- tree 25 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 7 3 6 -1.</_> + <_>10 7 1 6 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0108866095542908</threshold> + <left_val>0.4801428914070129</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 12 10 8 -1.</_> + <_>8 16 10 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0110386600717902</threshold> + <left_val>0.5429710149765015</left_val> + <right_val>0.4162363111972809</right_val></_></_> + <_> + <!-- tree 26 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 7 3 6 -1.</_> + <_>9 7 1 6 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0100541999563575</threshold> + <left_val>0.7329335212707520</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 7 12 2 -1.</_> + <_>10 7 6 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.7072880230844021e-003</threshold> + <left_val>0.5356872081756592</left_val> + <right_val>0.3455547094345093</right_val></_></_> + <_> + <!-- tree 27 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 6 8 3 -1.</_> + <_>8 6 4 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.8278098003938794e-004</threshold> + <left_val>0.3655022084712982</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>16 15 3 3 -1.</_> + <_>16 16 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.5739220436662436e-003</threshold> + <left_val>0.3776760101318359</left_val> + <right_val>0.5391774773597717</right_val></_></_> + <_> + <!-- tree 28 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 6 12 3 -1.</_> + <_>10 6 6 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.0167761296033859e-003</threshold> + <left_val>0.4039304852485657</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 8 3 5 -1.</_> + <_>8 8 1 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.7727289814502001e-003</threshold> + <left_val>0.6950443983078003</left_val> + <right_val>0.4981116950511932</right_val></_></_> + <_> + <!-- tree 29 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 10 20 2 -1.</_> + <_>10 10 10 1 2.</_> + <_>0 11 10 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0163182895630598</threshold> + <left_node>1</left_node> + <right_val>0.5296732783317566</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>11 16 9 4 -1.</_> + <_>14 16 3 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0116630000993609</threshold> + <left_val>0.5842639803886414</left_val> + <right_val>0.4789502918720245</right_val></_></_> + <_> + <!-- tree 30 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 5 3 4 -1.</_> + <_>1 5 1 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.5881489273160696e-003</threshold> + <left_node>1</left_node> + <right_val>0.6092178821563721</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 15 4 2 -1.</_> + <_>8 15 2 1 2.</_> + <_>10 16 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.7328999023884535e-003</threshold> + <left_val>0.6721742749214172</left_val> + <right_val>0.4066894054412842</right_val></_></_> + <_> + <!-- tree 31 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 8 19 3 -1.</_> + <_>1 9 19 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.4355930034071207e-003</threshold> + <left_val>0.3585087954998016</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>15 16 3 3 -1.</_> + <_>15 17 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.8340899841859937e-003</threshold> + <left_val>0.5371158123016357</left_val> + <right_val>0.4033507108688355</right_val></_></_> + <_> + <!-- tree 32 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 4 20 10 -1.</_> + <_>0 4 10 5 2.</_> + <_>10 9 10 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.1228028982877731</threshold> + <left_node>1</left_node> + <right_val>0.1547572016716003</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>2 14 7 6 -1.</_> + <_>2 16 7 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0502287000417709</threshold> + <left_val>0.5433843731880188</left_val> + <right_val>0.0842926725745201</right_val></_></_> + <_> + <!-- tree 33 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 6 6 6 -1.</_> + <_>10 6 2 6 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0214370004832745</threshold> + <left_node>1</left_node> + <right_val>0.4860053956508637</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>16 4 4 6 -1.</_> + <_>16 6 4 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0310096200555563</threshold> + <left_val>0.1833010017871857</left_val> + <right_val>0.5207554101943970</right_val></_></_> + <_> + <!-- tree 34 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 13 6 3 -1.</_> + <_>7 14 6 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0129737202078104</threshold> + <left_val>0.7048240900039673</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 13 4 3 -1.</_> + <_>7 14 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.5818020328879356e-003</threshold> + <left_val>0.4170587062835693</left_val> + <right_val>0.5865163803100586</right_val></_></_> + <_> + <!-- tree 35 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>13 13 6 2 -1.</_> + <_>13 14 6 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-9.7806248813867569e-003</threshold> + <left_node>1</left_node> + <right_val>0.5307918190956116</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>14 12 2 3 -1.</_> + <_>14 13 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.1735740117728710e-003</threshold> + <left_val>0.5522453188896179</left_val> + <right_val>0.3507165014743805</right_val></_></_> + <_> + <!-- tree 36 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 13 6 2 -1.</_> + <_>1 14 6 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.4651629608124495e-003</threshold> + <left_node>1</left_node> + <right_val>0.3042651116847992</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 12 2 3 -1.</_> + <_>4 13 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.3532148916274309e-003</threshold> + <left_val>0.5339323282241821</left_val> + <right_val>0.2806236147880554</right_val></_></_> + <_> + <!-- tree 37 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>17 4 3 5 -1.</_> + <_>18 4 1 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.1809681355953217e-003</threshold> + <left_val>0.6410133242607117</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 5 14 8 -1.</_> + <_>12 5 7 4 2.</_> + <_>5 9 7 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.5688649192452431e-004</threshold> + <left_val>0.5620871186256409</left_val> + <right_val>0.4390318989753723</right_val></_></_> + <_> + <!-- tree 38 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 8 6 5 -1.</_> + <_>8 8 2 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0262280106544495</threshold> + <left_node>1</left_node> + <right_val>0.6445556879043579</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 4 4 6 -1.</_> + <_>0 6 4 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0179581101983786</threshold> + <left_val>0.2002713978290558</left_val> + <right_val>0.4624665081501007</right_val></_></_> + <_> + <!-- tree 39 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 1 3 6 -1.</_> + <_>10 1 1 6 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.6468721963465214e-003</threshold> + <left_node>1</left_node> + <right_val>0.5263200998306274</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 4 6 3 -1.</_> + <_>10 5 6 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.7482809964567423e-003</threshold> + <left_val>0.5873981118202210</left_val> + <right_val>0.4836600124835968</right_val></_></_> + <_> + <!-- tree 40 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 1 3 6 -1.</_> + <_>9 1 1 6 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0138518502935767</threshold> + <left_node>1</left_node> + <right_val>0.1566130965948105</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 4 6 3 -1.</_> + <_>4 5 6 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.6369190309196711e-003</threshold> + <left_val>0.4270178973674774</left_val> + <right_val>0.5806660056114197</right_val></_></_> + <_> + <!-- tree 41 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 4 3 3 -1.</_> + <_>12 5 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.1513599678874016e-003</threshold> + <left_val>0.6215866208076477</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 11 4 2 -1.</_> + <_>12 12 4 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.4788460248382762e-005</threshold> + <left_val>0.5576642751693726</left_val> + <right_val>0.4122002124786377</right_val></_></_> + <_> + <!-- tree 42 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 2 20 6 -1.</_> + <_>0 2 10 3 2.</_> + <_>10 5 10 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0736769884824753</threshold> + <left_val>0.1536709964275360</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 4 3 3 -1.</_> + <_>5 5 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.0912780202925205e-003</threshold> + <left_val>0.6344268918037415</left_val> + <right_val>0.4507412016391754</right_val></_></_> + <_> + <!-- tree 43 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>2 10 16 4 -1.</_> + <_>10 10 8 2 2.</_> + <_>2 12 8 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.9240966588258743e-003</threshold> + <left_val>0.5457975268363953</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 10 16 6 -1.</_> + <_>11 10 8 3 2.</_> + <_>3 13 8 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.5778040811419487e-003</threshold> + <left_val>0.5401657223701477</left_val> + <right_val>0.3890799880027771</right_val></_></_> + <_> + <!-- tree 44 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 10 16 6 -1.</_> + <_>1 10 8 3 2.</_> + <_>9 13 8 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.5403169244527817e-003</threshold> + <left_node>1</left_node> + <right_val>0.3555611073970795</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 7 2 4 -1.</_> + <_>5 7 1 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.1886510037584230e-004</threshold> + <left_val>0.5836750268936157</left_val> + <right_val>0.4274316132068634</right_val></_></_> + <_> + <!-- tree 45 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>11 16 9 4 -1.</_> + <_>14 16 3 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0184083692729473</threshold> + <left_val>0.5860440135002136</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 16 14 4 -1.</_> + <_>10 16 7 2 2.</_> + <_>3 18 7 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.3490579333156347e-003</threshold> + <left_val>0.4498957991600037</left_val> + <right_val>0.5498198866844177</right_val></_></_> + <_> + <!-- tree 46 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 16 9 4 -1.</_> + <_>3 16 3 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.6157399453222752e-003</threshold> + <left_node>1</left_node> + <right_val>0.4100992977619171</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 14 6 6 -1.</_> + <_>1 14 3 3 2.</_> + <_>4 17 3 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.3190969843417406e-003</threshold> + <left_val>0.6701378822326660</left_val> + <right_val>0.4353001117706299</right_val></_></_> + <_> + <!-- tree 47 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 0 2 1 -1.</_> + <_>9 0 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-9.4642979092895985e-004</threshold> + <left_node>1</left_node> + <right_val>0.5391176939010620</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 7 8 10 -1.</_> + <_>10 7 4 5 2.</_> + <_>6 12 4 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.7858550250530243e-003</threshold> + <left_val>0.5504050254821777</left_val> + <right_val>0.3990935087203980</right_val></_></_> + <_> + <!-- tree 48 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>2 15 1 2 -1.</_> + <_>2 16 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.6395459533669055e-004</threshold> + <left_node>1</left_node> + <right_val>0.3592933118343353</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 14 7 6 -1.</_> + <_>0 16 7 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.3508940357714891e-003</threshold> + <left_val>0.4034172892570496</left_val> + <right_val>0.5806077122688294</right_val></_></_> + <_> + <!-- tree 49 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 8 6 2 -1.</_> + <_>7 9 6 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.5449963333085179e-005</threshold> + <left_node>1</left_node> + <right_val>0.5412384867668152</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 2 2 15 -1.</_> + <_>9 7 2 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0270184893161058</threshold> + <left_val>0.4944922924041748</left_val> + <right_val>0.5589436292648315</right_val></_></_> + <_> + <!-- tree 50 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 6 2 2 -1.</_> + <_>5 7 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.4561208495870233e-004</threshold> + <left_node>1</left_node> + <right_val>0.5809218287467957</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 6 8 3 -1.</_> + <_>6 7 8 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.1687109945341945e-003</threshold> + <left_val>0.4746957123279572</left_val> + <right_val>0.2845895886421204</right_val></_></_> + <_> + <!-- tree 51 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 13 5 6 -1.</_> + <_>12 15 5 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0228975005447865</threshold> + <left_node>1</left_node> + <right_val>0.2414411008358002</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 0 20 18 -1.</_> + <_>0 9 20 9 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.7087926268577576</threshold> + <left_val>0.5195764899253845</left_val> + <right_val>0.1030092015862465</right_val></_></_> + <_> + <!-- tree 52 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 1 6 6 -1.</_> + <_>7 1 2 6 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0374838300049305</threshold> + <left_node>1</left_node> + <right_val>0.1814638972282410</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 1 4 9 -1.</_> + <_>7 1 2 9 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.2827500468119979e-003</threshold> + <left_val>0.4246071875095367</left_val> + <right_val>0.5707973241806030</right_val></_></_> + <_> + <!-- tree 53 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 19 18 1 -1.</_> + <_>7 19 6 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.1718312315642834e-003</threshold> + <left_val>0.6143323183059692</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>14 16 5 2 -1.</_> + <_>14 17 5 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.7545939665287733e-003</threshold> + <left_val>0.5205671191215515</left_val> + <right_val>0.4220441877841950</right_val></_></_> + <_> + <!-- tree 54 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 5 15 10 -1.</_> + <_>0 10 15 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.6072919610887766e-003</threshold> + <left_val>0.3182592093944550</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 15 4 2 -1.</_> + <_>7 15 2 1 2.</_> + <_>9 16 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.5258748792111874e-004</threshold> + <left_val>0.5710468292236328</left_val> + <right_val>0.4226093888282776</right_val></_></_> + <_> + <!-- tree 55 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>14 11 2 2 -1.</_> + <_>14 12 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.0514748804271221e-003</threshold> + <left_node>1</left_node> + <right_val>0.5162829756736755</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 8 3 3 -1.</_> + <_>9 9 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.4323761723935604e-003</threshold> + <left_val>0.2666288912296295</left_val> + <right_val>0.5214679837226868</right_val></_></_> + <_> + <!-- tree 56 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 11 2 2 -1.</_> + <_>4 12 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.4652940080850385e-005</threshold> + <left_node>1</left_node> + <right_val>0.3981761038303375</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 8 3 3 -1.</_> + <_>8 9 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.8556920113041997e-003</threshold> + <left_val>0.3322763144969940</left_val> + <right_val>0.5705834031105042</right_val></_></_> + <_> + <!-- tree 57 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 10 2 3 -1.</_> + <_>9 11 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.7609540633857250e-003</threshold> + <left_node>1</left_node> + <right_val>0.6636558175086975</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 8 4 3 -1.</_> + <_>8 9 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.5676260227337480e-003</threshold> + <left_val>0.5505567789077759</left_val> + <right_val>0.4420661926269531</right_val></_></_> + <_> + <!-- tree 58 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 9 4 10 -1.</_> + <_>1 9 2 5 2.</_> + <_>3 14 2 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.4239919409155846e-003</threshold> + <left_node>1</left_node> + <right_val>0.5959938168525696</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 12 6 8 -1.</_> + <_>2 12 2 8 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.4692399464547634e-003</threshold> + <left_val>0.5369594097137451</left_val> + <right_val>0.3744339942932129</right_val></_></_> + <_> + <!-- tree 59 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 1 4 2 -1.</_> + <_>11 1 2 1 2.</_> + <_>9 2 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.8038539504632354e-004</threshold> + <left_val>0.4103595018386841</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 13 7 6 -1.</_> + <_>12 15 7 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0450864508748055</threshold> + <left_val>0.5177506804466248</left_val> + <right_val>0.1878100037574768</right_val></_></_> + <_> + <!-- tree 60 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 0 2 3 -1.</_> + <_>7 1 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.1405387930572033e-003</threshold> + <left_val>0.2352892011404038</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 14 6 3 -1.</_> + <_>9 14 2 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0212361291050911</threshold> + <left_val>0.1708751022815704</left_val> + <right_val>0.5424973964691162</right_val></_></_> + <_> + <!-- tree 61 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 6 6 4 -1.</_> + <_>11 6 2 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.3763340432196856e-003</threshold> + <left_val>0.5836530923843384</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 10 8 3 -1.</_> + <_>8 10 4 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0541225895285606</threshold> + <left_val>0.5117433071136475</left_val> + <right_val>0.1865931004285812</right_val></_></_> + <_> + <!-- tree 62 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 10 4 3 -1.</_> + <_>8 10 2 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.3492980077862740e-004</threshold> + <left_val>0.5108693242073059</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 8 3 5 -1.</_> + <_>7 8 1 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.8454048121348023e-004</threshold> + <left_val>0.4775491058826447</left_val> + <right_val>0.2439853996038437</right_val></_></_></trees> + <stage_threshold>30.6721305847167970</stage_threshold> + <parent>11</parent> + <next>-1</next></_> + <_> + <!-- stage 13 --> + <trees> + <_> + <!-- tree 0 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 4 8 1 -1.</_> + <_>4 4 4 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.0031939968466759e-003</threshold> + <left_val>0.3349649906158447</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 2 2 6 -1.</_> + <_>8 2 1 3 2.</_> + <_>9 5 1 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.9161207647994161e-004</threshold> + <left_val>0.4518367946147919</left_val> + <right_val>0.7289354205131531</right_val></_></_> + <_> + <!-- tree 1 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 7 20 6 -1.</_> + <_>0 9 20 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0112127903848886</threshold> + <left_val>0.2950800955295563</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 10 3 6 -1.</_> + <_>12 13 3 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.6108198845759034e-004</threshold> + <left_val>0.5669054985046387</left_val> + <right_val>0.2830851078033447</right_val></_></_> + <_> + <!-- tree 2 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 15 1 4 -1.</_> + <_>8 17 1 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.1984579759882763e-004</threshold> + <left_val>0.4090577960014343</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 16 2 4 -1.</_> + <_>5 18 2 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.9725349557120353e-004</threshold> + <left_val>0.6951494216918945</left_val> + <right_val>0.4637868106365204</right_val></_></_> + <_> + <!-- tree 3 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 2 8 12 -1.</_> + <_>6 6 8 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.5180420167744160e-003</threshold> + <left_node>1</left_node> + <right_val>0.3167675137519836</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 7 12 2 -1.</_> + <_>8 7 4 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.2148249661549926e-003</threshold> + <left_val>0.3316706120967865</left_val> + <right_val>0.5396397709846497</right_val></_></_> + <_> + <!-- tree 4 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 0 6 1 -1.</_> + <_>9 0 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.2497441172599792e-003</threshold> + <left_val>0.2600573897361755</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 11 3 3 -1.</_> + <_>8 12 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-9.4915721565485001e-003</threshold> + <left_val>0.7484294772148132</left_val> + <right_val>0.5073192119598389</right_val></_></_> + <_> + <!-- tree 5 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 11 3 6 -1.</_> + <_>12 14 3 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.5378600265830755e-004</threshold> + <left_node>1</left_node> + <right_val>0.3952010869979858</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>11 2 6 10 -1.</_> + <_>14 2 3 5 2.</_> + <_>11 7 3 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.9741100519895554e-004</threshold> + <left_val>0.5880274772644043</left_val> + <right_val>0.3552120029926300</right_val></_></_> + <_> + <!-- tree 6 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 7 10 12 -1.</_> + <_>5 7 5 6 2.</_> + <_>10 13 5 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0430792495608330</threshold> + <left_val>0.2434878051280975</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 4 2 10 -1.</_> + <_>4 9 2 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.1999092102050781e-004</threshold> + <left_val>0.3195562958717346</left_val> + <right_val>0.5585454702377319</right_val></_></_> + <_> + <!-- tree 7 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 7 2 3 -1.</_> + <_>9 7 1 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.5451628975570202e-003</threshold> + <left_node>1</left_node> + <right_val>0.4845289885997772</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>11 9 6 2 -1.</_> + <_>11 9 3 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.9610403627157211e-003</threshold> + <left_val>0.3801181018352509</left_val> + <right_val>0.5358511805534363</right_val></_></_> + <_> + <!-- tree 8 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 7 2 2 -1.</_> + <_>5 7 1 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.1919340835884213e-004</threshold> + <left_node>1</left_node> + <right_val>0.4356329143047333</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 2 4 6 -1.</_> + <_>0 4 4 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0192238893359900</threshold> + <left_val>0.2613066136837006</left_val> + <right_val>0.6155496239662170</right_val></_></_> + <_> + <!-- tree 9 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>10 7 3 4 -1.</_> + <_>11 7 1 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.3076990144327283e-003</threshold> + <left_val>0.5942062139511108</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 7 3 5 -1.</_> + <_>10 7 1 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0198250394314528</threshold> + <left_val>0.4945428073406220</left_val> + <right_val>0.7384855151176453</right_val></_></_> + <_> + <!-- tree 10 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 1 1 3 -1.</_> + <_>9 2 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.2013280540704727e-003</threshold> + <left_val>0.2214481979608536</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 6 16 6 -1.</_> + <_>0 6 8 3 2.</_> + <_>8 9 8 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.8596705570816994e-003</threshold> + <left_val>0.3600977063179016</left_val> + <right_val>0.5298550128936768</right_val></_></_> + <_> + <!-- tree 11 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>10 15 3 3 -1.</_> + <_>10 16 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.4142199652269483e-003</threshold> + <left_node>1</left_node> + <right_val>0.5776566267013550</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 14 4 3 -1.</_> + <_>9 15 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0112327598035336</threshold> + <left_val>0.6934456825256348</left_val> + <right_val>0.4827207028865814</right_val></_></_> + <_> + <!-- tree 12 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 2 6 10 -1.</_> + <_>3 2 3 5 2.</_> + <_>6 7 3 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.9746301006525755e-003</threshold> + <left_node>1</left_node> + <right_val>0.3216677010059357</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 0 14 2 -1.</_> + <_>3 1 14 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.3283828310668468e-004</threshold> + <left_val>0.3962500095367432</left_val> + <right_val>0.5680363774299622</right_val></_></_> + <_> + <!-- tree 13 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 14 3 3 -1.</_> + <_>9 15 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0101052597165108</threshold> + <left_node>1</left_node> + <right_val>0.7567418217658997</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 15 3 3 -1.</_> + <_>10 16 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0116536999121308</threshold> + <left_val>0.6523556709289551</left_val> + <right_val>0.5027053952217102</right_val></_></_> + <_> + <!-- tree 14 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 13 2 6 -1.</_> + <_>9 16 2 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.0609981194138527e-003</threshold> + <left_val>0.2538770139217377</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 13 6 3 -1.</_> + <_>7 14 6 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.2343141026794910e-003</threshold> + <left_val>0.4387277066707611</left_val> + <right_val>0.6177632212638855</right_val></_></_> + <_> + <!-- tree 15 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 11 3 6 -1.</_> + <_>12 14 3 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0298022795468569</threshold> + <left_node>1</left_node> + <right_val>0.5201140046119690</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 12 5 2 -1.</_> + <_>8 13 5 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.1611840454861522e-003</threshold> + <left_val>0.4647909998893738</left_val> + <right_val>0.6184254884719849</right_val></_></_> + <_> + <!-- tree 16 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 11 3 6 -1.</_> + <_>5 14 3 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.4824447296559811e-004</threshold> + <left_node>1</left_node> + <right_val>0.3040994107723236</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 12 3 2 -1.</_> + <_>8 13 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.1284630424343050e-004</threshold> + <left_val>0.4518808126449585</left_val> + <right_val>0.6245782971382141</right_val></_></_> + <_> + <!-- tree 17 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>11 13 7 6 -1.</_> + <_>11 15 7 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0312035400420427</threshold> + <left_val>0.2788935899734497</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 14 6 3 -1.</_> + <_>7 15 6 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.7652881108224392e-003</threshold> + <left_val>0.4698500037193298</left_val> + <right_val>0.6502454280853272</right_val></_></_> + <_> + <!-- tree 18 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 13 14 4 -1.</_> + <_>3 13 7 2 2.</_> + <_>10 15 7 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0256447792053223</threshold> + <left_node>1</left_node> + <right_val>0.1805171072483063</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 14 4 6 -1.</_> + <_>8 14 2 3 2.</_> + <_>10 17 2 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.5331530533730984e-003</threshold> + <left_val>0.3208068907260895</left_val> + <right_val>0.5522022843360901</right_val></_></_> + <_> + <!-- tree 19 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 15 4 3 -1.</_> + <_>8 16 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.2047149725258350e-003</threshold> + <left_node>1</left_node> + <right_val>0.6436933875083923</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 16 6 2 -1.</_> + <_>9 16 2 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.4282479716930538e-004</threshold> + <left_val>0.5676705241203308</left_val> + <right_val>0.4509103894233704</right_val></_></_> + <_> + <!-- tree 20 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 7 6 2 -1.</_> + <_>7 8 6 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.1979342717677355e-004</threshold> + <left_val>0.3122146129608154</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 9 13 3 -1.</_> + <_>3 10 13 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.0101029016077518e-004</threshold> + <left_val>0.2965193986892700</left_val> + <right_val>0.5230494737625122</right_val></_></_> + <_> + <!-- tree 21 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 8 3 4 -1.</_> + <_>9 10 3 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-9.1816839994862676e-004</threshold> + <left_node>1</left_node> + <right_val>0.5464711785316467</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 10 4 3 -1.</_> + <_>8 11 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.2239529751241207e-003</threshold> + <left_val>0.4618502855300903</left_val> + <right_val>0.5679548978805542</right_val></_></_> + <_> + <!-- tree 22 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 7 3 4 -1.</_> + <_>8 7 1 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.8743730662390590e-004</threshold> + <left_val>0.5430880188941956</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 7 3 5 -1.</_> + <_>9 7 1 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.8252469599246979e-003</threshold> + <left_val>0.5433623194694519</left_val> + <right_val>0.3385221064090729</right_val></_></_> + <_> + <!-- tree 23 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 3 3 4 -1.</_> + <_>13 3 1 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.4570789001882076e-003</threshold> + <left_node>1</left_node> + <right_val>0.5265594720840454</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 7 2 3 -1.</_> + <_>9 7 1 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.3775748237967491e-003</threshold> + <left_val>0.4857215881347656</left_val> + <right_val>0.6815124154090881</right_val></_></_> + <_> + <!-- tree 24 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 3 3 4 -1.</_> + <_>6 3 1 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.7602309603244066e-003</threshold> + <left_node>1</left_node> + <right_val>0.2832160890102387</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 7 12 1 -1.</_> + <_>7 7 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.7752222316339612e-004</threshold> + <left_val>0.3966830968856812</left_val> + <right_val>0.5512480735778809</right_val></_></_> + <_> + <!-- tree 25 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 5 3 3 -1.</_> + <_>12 6 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.5084479972720146e-003</threshold> + <left_node>1</left_node> + <right_val>0.6784620285034180</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>11 2 6 2 -1.</_> + <_>11 3 6 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.5949047459289432e-004</threshold> + <left_val>0.3906503021717072</left_val> + <right_val>0.5457202792167664</right_val></_></_> + <_> + <!-- tree 26 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 2 14 2 -1.</_> + <_>3 2 7 1 2.</_> + <_>10 3 7 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.6352660022675991e-003</threshold> + <left_node>1</left_node> + <right_val>0.3640204071998596</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 1 7 14 -1.</_> + <_>6 8 7 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.2750849418807775e-004</threshold> + <left_val>0.5829724073410034</left_val> + <right_val>0.4194979965686798</right_val></_></_> + <_> + <!-- tree 27 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 0 12 5 -1.</_> + <_>8 0 6 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0220676101744175</threshold> + <left_val>0.4606702923774719</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 9 18 1 -1.</_> + <_>7 9 6 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0192037895321846</threshold> + <left_val>0.3261483013629913</left_val> + <right_val>0.5236080884933472</right_val></_></_> + <_> + <!-- tree 28 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 0 10 5 -1.</_> + <_>5 0 5 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0129981096833944</threshold> + <left_val>0.7022112011909485</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>2 5 8 15 -1.</_> + <_>2 10 8 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.1332690268754959e-003</threshold> + <left_val>0.2870470881462097</left_val> + <right_val>0.5076476931571960</right_val></_></_> + <_> + <!-- tree 29 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 5 3 3 -1.</_> + <_>12 6 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.2937557920813560e-003</threshold> + <left_node>1</left_node> + <right_val>0.4709520936012268</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>13 4 2 3 -1.</_> + <_>13 5 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.1857069805264473e-003</threshold> + <left_val>0.4708291888237000</left_val> + <right_val>0.6169841885566711</right_val></_></_> + <_> + <!-- tree 30 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>2 15 4 3 -1.</_> + <_>2 16 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.5750709250569344e-003</threshold> + <left_val>0.3114252984523773</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 6 10 3 -1.</_> + <_>10 6 5 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0451521389186382</threshold> + <left_val>0.1851435005664825</left_val> + <right_val>0.5504814982414246</right_val></_></_> + <_> + <!-- tree 31 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>11 6 2 2 -1.</_> + <_>12 6 1 1 2.</_> + <_>11 7 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.7783559635281563e-003</threshold> + <left_node>1</left_node> + <right_val>0.4937348067760468</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 4 4 3 -1.</_> + <_>12 5 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.5752480141818523e-003</threshold> + <left_val>0.6152948141098023</left_val> + <right_val>0.4735499918460846</right_val></_></_> + <_> + <!-- tree 32 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 6 2 2 -1.</_> + <_>7 6 1 1 2.</_> + <_>8 7 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.1614130344241858e-003</threshold> + <left_node>1</left_node> + <right_val>0.6510571837425232</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 4 4 3 -1.</_> + <_>4 5 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.3350189439952374e-003</threshold> + <left_val>0.4088341891765595</left_val> + <right_val>0.5684152245521545</right_val></_></_> + <_> + <!-- tree 33 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>11 4 3 3 -1.</_> + <_>12 4 1 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.8499289657920599e-003</threshold> + <left_node>1</left_node> + <right_val>0.3025828897953033</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 3 2 1 -1.</_> + <_>9 3 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.4529630318284035e-003</threshold> + <left_val>0.5232502818107605</left_val> + <right_val>0.2017620950937271</right_val></_></_> + <_> + <!-- tree 34 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 5 5 3 -1.</_> + <_>4 6 5 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.6731390282511711e-003</threshold> + <left_node>1</left_node> + <right_val>0.6428425908088684</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 6 4 3 -1.</_> + <_>4 7 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.1937100682407618e-003</threshold> + <left_val>0.4328865110874176</left_val> + <right_val>0.6420509815216065</right_val></_></_> + <_> + <!-- tree 35 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>11 4 3 3 -1.</_> + <_>12 4 1 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.4666871912777424e-003</threshold> + <left_node>1</left_node> + <right_val>0.5254065990447998</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 8 4 3 -1.</_> + <_>8 9 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.7186251506209373e-003</threshold> + <left_val>0.2490984052419663</left_val> + <right_val>0.5287619233131409</right_val></_></_> + <_> + <!-- tree 36 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 4 3 3 -1.</_> + <_>7 4 1 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.9941878579556942e-004</threshold> + <left_node>1</left_node> + <right_val>0.3329795897006989</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 14 1 3 -1.</_> + <_>4 15 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.8276498243212700e-004</threshold> + <left_val>0.3598344922065735</left_val> + <right_val>0.5498340725898743</right_val></_></_> + <_> + <!-- tree 37 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 7 2 3 -1.</_> + <_>9 7 1 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.3231188319623470e-003</threshold> + <left_val>0.4818705022335053</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>17 0 3 2 -1.</_> + <_>17 1 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.0838290005922318e-003</threshold> + <left_val>0.5266330242156982</left_val> + <right_val>0.3105789124965668</right_val></_></_> + <_> + <!-- tree 38 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 10 2 9 -1.</_> + <_>8 13 2 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.0515898833982646e-004</threshold> + <left_node>1</left_node> + <right_val>0.3995291888713837</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 8 18 2 -1.</_> + <_>0 9 18 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.2640280183404684e-003</threshold> + <left_val>0.3228437900543213</left_val> + <right_val>0.5819215178489685</right_val></_></_> + <_> + <!-- tree 39 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 15 2 3 -1.</_> + <_>9 16 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0101526603102684</threshold> + <left_val>0.8026071190834045</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 7 4 3 -1.</_> + <_>8 8 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.6863690000027418e-003</threshold> + <left_val>0.3875617086887360</left_val> + <right_val>0.5466570854187012</right_val></_></_> + <_> + <!-- tree 40 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 14 6 6 -1.</_> + <_>1 14 3 3 2.</_> + <_>4 17 3 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-9.0515613555908203e-003</threshold> + <left_node>1</left_node> + <right_val>0.4372057914733887</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 18 6 2 -1.</_> + <_>0 19 6 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.3204211182892323e-003</threshold> + <left_val>0.1126551032066345</left_val> + <right_val>0.6395416259765625</right_val></_></_> + <_> + <!-- tree 41 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 9 4 3 -1.</_> + <_>12 9 2 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.6117300149053335e-003</threshold> + <left_val>0.5423989295959473</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 8 3 8 -1.</_> + <_>10 8 1 8 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0143390195444226</threshold> + <left_val>0.4979273080825806</left_val> + <right_val>0.6042236089706421</right_val></_></_> + <_> + <!-- tree 42 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 9 4 3 -1.</_> + <_>6 9 2 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.8452780097723007e-003</threshold> + <left_node>1</left_node> + <right_val>0.3491092026233673</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 18 6 1 -1.</_> + <_>6 18 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.4783289771003183e-005</threshold> + <left_val>0.4195067882537842</left_val> + <right_val>0.5775966048240662</right_val></_></_> + <_> + <!-- tree 43 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 7 3 2 -1.</_> + <_>10 7 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.1814555451273918e-003</threshold> + <left_val>0.4885987043380737</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 7 8 12 -1.</_> + <_>10 7 4 6 2.</_> + <_>6 13 4 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.6321990452706814e-003</threshold> + <left_val>0.5444468259811401</left_val> + <right_val>0.4420995116233826</right_val></_></_> + <_> + <!-- tree 44 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 7 3 2 -1.</_> + <_>9 7 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.2483461070805788e-003</threshold> + <left_val>0.6699792146682739</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 7 3 6 -1.</_> + <_>9 7 1 6 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0123745603486896</threshold> + <left_val>0.4478605985641480</left_val> + <right_val>0.6564893722534180</right_val></_></_> + <_> + <!-- tree 45 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 16 14 4 -1.</_> + <_>10 16 7 2 2.</_> + <_>3 18 7 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.6516688093543053e-003</threshold> + <left_node>1</left_node> + <right_val>0.5511878728866577</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 14 18 4 -1.</_> + <_>10 14 9 2 2.</_> + <_>1 16 9 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.5750613361597061e-003</threshold> + <left_val>0.4017445147037506</left_val> + <right_val>0.5405536293983460</right_val></_></_> + <_> + <!-- tree 46 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 7 3 3 -1.</_> + <_>8 8 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.5078441984951496e-003</threshold> + <left_node>1</left_node> + <right_val>0.2294393032789230</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 4 20 12 -1.</_> + <_>0 4 10 6 2.</_> + <_>10 10 10 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0286752097308636</threshold> + <left_val>0.5177900195121765</left_val> + <right_val>0.3567756116390228</right_val></_></_> + <_> + <!-- tree 47 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 5 10 12 -1.</_> + <_>10 5 5 6 2.</_> + <_>5 11 5 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.0673860609531403e-003</threshold> + <left_val>0.5564699769020081</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 2 4 7 -1.</_> + <_>10 2 2 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.2367829913273454e-003</threshold> + <left_val>0.3627698123455048</left_val> + <right_val>0.5572413802146912</right_val></_></_> + <_> + <!-- tree 48 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 11 4 3 -1.</_> + <_>8 12 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.4818679131567478e-003</threshold> + <left_node>1</left_node> + <right_val>0.6784911155700684</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 12 3 3 -1.</_> + <_>8 13 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.7109839506447315e-003</threshold> + <left_val>0.4121252894401550</left_val> + <right_val>0.6072235703468323</right_val></_></_> + <_> + <!-- tree 49 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>13 13 5 6 -1.</_> + <_>13 15 5 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.9405790418386459e-003</threshold> + <left_node>1</left_node> + <right_val>0.5459766983985901</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 0 6 6 -1.</_> + <_>9 0 2 6 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0333020985126495</threshold> + <left_val>0.5276706814765930</left_val> + <right_val>0.2374915927648544</right_val></_></_> + <_> + <!-- tree 50 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>2 13 5 6 -1.</_> + <_>2 15 5 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0361046306788921</threshold> + <left_node>1</left_node> + <right_val>0.0724927932024002</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 4 2 12 -1.</_> + <_>0 4 1 6 2.</_> + <_>1 10 1 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0196746494621038</threshold> + <left_val>0.4626345932483673</left_val> + <right_val>0.8208963274955750</right_val></_></_> + <_> + <!-- tree 51 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 19 3 1 -1.</_> + <_>10 19 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.4766150638461113e-003</threshold> + <left_val>0.5208731889724731</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>18 0 2 6 -1.</_> + <_>18 2 2 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.3987369602546096e-003</threshold> + <left_val>0.5484414100646973</left_val> + <right_val>0.4230034947395325</right_val></_></_> + <_> + <!-- tree 52 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 3 1 6 -1.</_> + <_>0 5 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.0974249131977558e-003</threshold> + <left_node>1</left_node> + <right_val>0.2780553102493286</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 0 3 6 -1.</_> + <_>0 2 3 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.6973790954798460e-003</threshold> + <left_val>0.5403831005096436</left_val> + <right_val>0.3790988922119141</right_val></_></_> + <_> + <!-- tree 53 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>17 2 3 7 -1.</_> + <_>18 2 1 7 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.6591699831187725e-003</threshold> + <left_node>1</left_node> + <right_val>0.4798336029052734</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 3 4 7 -1.</_> + <_>10 3 2 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.9460969856008887e-004</threshold> + <left_val>0.3766950070858002</left_val> + <right_val>0.5429229140281677</right_val></_></_> + <_> + <!-- tree 54 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 2 3 7 -1.</_> + <_>1 2 1 7 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.1750570740550756e-003</threshold> + <left_node>1</left_node> + <right_val>0.6207162737846375</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 2 4 8 -1.</_> + <_>8 2 2 8 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.4614439569413662e-003</threshold> + <left_val>0.3357945084571838</left_val> + <right_val>0.5142632126808167</right_val></_></_> + <_> + <!-- tree 55 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>13 0 1 4 -1.</_> + <_>13 2 1 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.3006567759439349e-004</threshold> + <left_node>1</left_node> + <right_val>0.5344640016555786</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 1 12 5 -1.</_> + <_>9 1 4 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.1486930996179581</threshold> + <left_val>0.5159608125686646</left_val> + <right_val>0.2561823129653931</right_val></_></_> + <_> + <!-- tree 56 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 0 1 4 -1.</_> + <_>6 2 1 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.8816498494707048e-005</threshold> + <left_node>1</left_node> + <right_val>0.5123091936111450</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 1 12 5 -1.</_> + <_>7 1 4 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.6275369562208652e-003</threshold> + <left_val>0.6017646193504334</left_val> + <right_val>0.3109371960163117</right_val></_></_> + <_> + <!-- tree 57 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 12 3 8 -1.</_> + <_>10 12 1 8 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0128818098455668</threshold> + <left_val>0.2712287008762360</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 13 6 1 -1.</_> + <_>9 13 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.4982917653396726e-004</threshold> + <left_val>0.5442442297935486</left_val> + <right_val>0.4028888046741486</right_val></_></_> + <_> + <!-- tree 58 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 14 6 3 -1.</_> + <_>7 15 6 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0123159997165203</threshold> + <left_node>1</left_node> + <right_val>0.4736065864562988</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 16 7 3 -1.</_> + <_>5 17 7 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.0286601334810257e-003</threshold> + <left_val>0.7451434731483460</left_val> + <right_val>0.3487991988658905</right_val></_></_> + <_> + <!-- tree 59 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 12 20 6 -1.</_> + <_>0 14 20 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0868761166930199</threshold> + <left_val>0.2290333062410355</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 18 14 2 -1.</_> + <_>4 19 14 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.5107560102478601e-005</threshold> + <left_val>0.5517889857292175</left_val> + <right_val>0.4393149018287659</right_val></_></_> + <_> + <!-- tree 60 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 12 3 8 -1.</_> + <_>9 12 1 8 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0174576602876186</threshold> + <left_val>0.0901679024100304</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 13 3 3 -1.</_> + <_>7 14 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.5219470262527466e-003</threshold> + <left_val>0.6233540177345276</left_val> + <right_val>0.4789459109306335</right_val></_></_> + <_> + <!-- tree 61 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 5 12 10 -1.</_> + <_>11 5 6 5 2.</_> + <_>5 10 6 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.0656520025804639e-003</threshold> + <left_val>0.5489696264266968</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 1 5 10 -1.</_> + <_>8 6 5 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.2540300637483597e-003</threshold> + <left_val>0.5579808950424194</left_val> + <right_val>0.4375877976417542</right_val></_></_> + <_> + <!-- tree 62 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 4 9 12 -1.</_> + <_>5 10 9 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-9.0349102392792702e-003</threshold> + <left_val>0.3579156100749970</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 13 6 6 -1.</_> + <_>7 15 6 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.5230999561026692e-003</threshold> + <left_val>0.5613660216331482</left_val> + <right_val>0.3939043879508972</right_val></_></_> + <_> + <!-- tree 63 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 4 5 16 -1.</_> + <_>8 12 5 8 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.8441150207072496e-003</threshold> + <left_node>1</left_node> + <right_val>0.3901554942131043</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 12 4 6 -1.</_> + <_>8 15 4 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.2824429217725992e-003</threshold> + <left_val>0.4528619050979614</left_val> + <right_val>0.5441343188285828</right_val></_></_> + <_> + <!-- tree 64 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 13 2 2 -1.</_> + <_>7 13 1 1 2.</_> + <_>8 14 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.2161718991119415e-005</threshold> + <left_node>1</left_node> + <right_val>0.5803111791610718</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 12 2 2 -1.</_> + <_>7 12 1 1 2.</_> + <_>8 13 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.0118400900391862e-005</threshold> + <left_val>0.3336850106716156</left_val> + <right_val>0.5504856109619141</right_val></_></_> + <_> + <!-- tree 65 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>18 0 2 14 -1.</_> + <_>18 0 1 14 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.6150099262595177e-003</threshold> + <left_val>0.6124789118766785</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 11 7 2 -1.</_> + <_>12 12 7 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0173892099410295</threshold> + <left_val>0.0872716307640076</left_val> + <right_val>0.5204588174819946</right_val></_></_> + <_> + <!-- tree 66 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 18 1 2 -1.</_> + <_>1 19 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.4361080654198304e-005</threshold> + <left_val>0.3935329020023346</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>2 18 1 2 -1.</_> + <_>2 19 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.0354899859521538e-004</threshold> + <left_val>0.5918853878974915</left_val> + <right_val>0.4119614064693451</right_val></_></_> + <_> + <!-- tree 67 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 7 2 1 -1.</_> + <_>9 7 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.5939630102366209e-003</threshold> + <left_val>0.4839623868465424</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 6 2 3 -1.</_> + <_>9 6 1 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.5440789759159088e-003</threshold> + <left_val>0.4787364900112152</left_val> + <right_val>0.6360663175582886</right_val></_></_> + <_> + <!-- tree 68 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 1 2 2 -1.</_> + <_>4 1 1 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.5083180187502876e-005</threshold> + <left_val>0.4231117069721222</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 0 3 2 -1.</_> + <_>3 1 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-9.9282202427275479e-005</threshold> + <left_val>0.4274589121341705</left_val> + <right_val>0.6094048023223877</right_val></_></_> + <_> + <!-- tree 69 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 10 3 4 -1.</_> + <_>12 12 3 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.5371708003804088e-004</threshold> + <left_node>1</left_node> + <right_val>0.4271987974643707</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 7 8 2 -1.</_> + <_>7 8 8 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.9186759600415826e-003</threshold> + <left_val>0.4497107863426209</left_val> + <right_val>0.5549122095108032</right_val></_></_> + <_> + <!-- tree 70 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 8 3 4 -1.</_> + <_>8 10 3 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.0764222396537662e-004</threshold> + <left_node>1</left_node> + <right_val>0.5477195978164673</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 12 6 3 -1.</_> + <_>7 13 6 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.7236480489373207e-003</threshold> + <left_val>0.2882922887802124</left_val> + <right_val>0.5615127086639404</right_val></_></_></trees> + <stage_threshold>34.6770782470703120</stage_threshold> + <parent>12</parent> + <next>-1</next></_> + <_> + <!-- stage 14 --> + <trees> + <_> + <!-- tree 0 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 2 10 3 -1.</_> + <_>5 2 5 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0130921695381403</threshold> + <left_val>0.3338870108127594</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 1 20 6 -1.</_> + <_>0 3 20 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.1446479735895991e-004</threshold> + <left_val>0.3099352121353149</left_val> + <right_val>0.6677492260932922</right_val></_></_> + <_> + <!-- tree 1 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 6 6 3 -1.</_> + <_>9 6 2 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0218357294797897</threshold> + <left_val>0.4369049072265625</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 7 14 4 -1.</_> + <_>3 9 14 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0483239404857159</threshold> + <left_val>0.4301724135875702</left_val> + <right_val>0.6153885126113892</right_val></_></_> + <_> + <!-- tree 2 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 7 3 6 -1.</_> + <_>5 9 3 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.6091950237751007e-003</threshold> + <left_val>0.3387326002120972</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 8 3 12 -1.</_> + <_>8 12 3 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.3469760306179523e-003</threshold> + <left_val>0.6248713731765747</left_val> + <right_val>0.3594130873680115</right_val></_></_> + <_> + <!-- tree 3 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 17 6 2 -1.</_> + <_>12 17 3 1 2.</_> + <_>9 18 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.7729059618432075e-004</threshold> + <left_val>0.3868424892425537</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 17 4 3 -1.</_> + <_>10 18 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.6743620876222849e-004</threshold> + <left_val>0.4409345090389252</left_val> + <right_val>0.5476474165916443</right_val></_></_> + <_> + <!-- tree 4 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 2 4 2 -1.</_> + <_>4 3 4 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.2352119665592909e-003</threshold> + <left_val>0.3260171115398407</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 3 6 14 -1.</_> + <_>9 3 2 14 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.1705530341714621e-003</threshold> + <left_val>0.4111348986625671</left_val> + <right_val>0.6088163852691650</right_val></_></_> + <_> + <!-- tree 5 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>15 13 1 6 -1.</_> + <_>15 16 1 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.9695429475395940e-005</threshold> + <left_node>1</left_node> + <right_val>0.4269422888755798</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>13 14 2 6 -1.</_> + <_>13 16 2 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.7050738572143018e-004</threshold> + <left_val>0.4306466877460480</left_val> + <right_val>0.5810514092445374</right_val></_></_> + <_> + <!-- tree 6 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 11 5 6 -1.</_> + <_>4 14 5 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.9626210208516568e-005</threshold> + <left_node>1</left_node> + <right_val>0.3669143021106720</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 17 4 2 -1.</_> + <_>6 17 2 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.3152441028505564e-004</threshold> + <left_val>0.4610663950443268</left_val> + <right_val>0.6290590167045593</right_val></_></_> + <_> + <!-- tree 7 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 6 20 2 -1.</_> + <_>0 6 10 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0523058287799358</threshold> + <left_node>1</left_node> + <right_val>0.5328689813613892</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 5 10 12 -1.</_> + <_>11 5 5 6 2.</_> + <_>6 11 5 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0268804691731930</threshold> + <left_val>0.5213261246681213</left_val> + <right_val>0.3231219947338104</right_val></_></_> + <_> + <!-- tree 8 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 0 2 12 -1.</_> + <_>4 0 1 6 2.</_> + <_>5 6 1 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.4203000066336244e-004</threshold> + <left_node>1</left_node> + <right_val>0.3568570017814636</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 1 6 2 -1.</_> + <_>6 1 2 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.6424639616161585e-003</threshold> + <left_val>0.3440661132335663</left_val> + <right_val>0.5625604987144470</right_val></_></_> + <_> + <!-- tree 9 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>13 7 2 1 -1.</_> + <_>13 7 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.6830288697965443e-004</threshold> + <left_node>1</left_node> + <right_val>0.4561173021793366</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 5 15 6 -1.</_> + <_>5 7 15 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.2649629972875118e-003</threshold> + <left_val>0.5321351885795593</left_val> + <right_val>0.3674154877662659</right_val></_></_> + <_> + <!-- tree 10 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 10 18 2 -1.</_> + <_>1 10 9 1 2.</_> + <_>10 11 9 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0156272090971470</threshold> + <left_node>1</left_node> + <right_val>0.2029353976249695</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 6 15 7 -1.</_> + <_>6 6 5 7 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.1621132045984268</threshold> + <left_val>0.5563033223152161</left_val> + <right_val>0.2618849873542786</right_val></_></_> + <_> + <!-- tree 11 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 14 4 3 -1.</_> + <_>8 15 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.7391691002994776e-003</threshold> + <left_val>0.6062194705009460</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 14 3 3 -1.</_> + <_>9 15 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.0878419745713472e-003</threshold> + <left_val>0.5950763821601868</left_val> + <right_val>0.4545117020606995</right_val></_></_> + <_> + <!-- tree 12 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 14 4 3 -1.</_> + <_>8 15 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.3334210272878408e-003</threshold> + <left_node>1</left_node> + <right_val>0.6435524225234985</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 13 3 2 -1.</_> + <_>8 14 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.5116386394947767e-005</threshold> + <left_val>0.3520734012126923</left_val> + <right_val>0.5179778933525085</right_val></_></_> + <_> + <!-- tree 13 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>15 14 5 3 -1.</_> + <_>15 15 5 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.4625718407332897e-003</threshold> + <left_val>0.5326688289642334</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 14 20 1 -1.</_> + <_>0 14 10 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0220326893031597</threshold> + <left_val>0.3491981029510498</left_val> + <right_val>0.5429236888885498</right_val></_></_> + <_> + <!-- tree 14 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 14 6 3 -1.</_> + <_>0 15 6 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.3081610500812531e-003</threshold> + <left_val>0.2084023058414459</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 3 4 2 -1.</_> + <_>5 4 4 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.3259368976578116e-004</threshold> + <left_val>0.3965272009372711</left_val> + <right_val>0.5425453782081604</right_val></_></_> + <_> + <!-- tree 15 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 6 20 1 -1.</_> + <_>0 6 10 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0322092287242413</threshold> + <left_node>1</left_node> + <right_val>0.5306411981582642</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 3 10 14 -1.</_> + <_>11 3 5 7 2.</_> + <_>6 10 5 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-9.0424838708713651e-004</threshold> + <left_val>0.5450385808944702</left_val> + <right_val>0.4256696999073029</right_val></_></_> + <_> + <!-- tree 16 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 12 4 2 -1.</_> + <_>8 13 4 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.2727500181645155e-003</threshold> + <left_node>1</left_node> + <right_val>0.5968611240386963</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 3 8 6 -1.</_> + <_>6 3 4 3 2.</_> + <_>10 6 4 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.9820008464157581e-003</threshold> + <left_val>0.4758140146732330</left_val> + <right_val>0.3150944113731384</right_val></_></_> + <_> + <!-- tree 17 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>13 7 2 1 -1.</_> + <_>13 7 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.8856618124991655e-004</threshold> + <left_node>1</left_node> + <right_val>0.4847748875617981</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 3 10 14 -1.</_> + <_>11 3 5 7 2.</_> + <_>6 10 5 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.8227191008627415e-004</threshold> + <left_val>0.5426316261291504</left_val> + <right_val>0.4338341057300568</right_val></_></_> + <_> + <!-- tree 18 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 7 2 1 -1.</_> + <_>6 7 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.4473457061685622e-005</threshold> + <left_node>1</left_node> + <right_val>0.4287509918212891</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 3 10 14 -1.</_> + <_>4 3 5 7 2.</_> + <_>9 10 5 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.9148979703895748e-004</threshold> + <left_val>0.6345185041427612</left_val> + <right_val>0.4101851880550385</right_val></_></_> + <_> + <!-- tree 19 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 7 2 2 -1.</_> + <_>9 7 1 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.6939629353582859e-003</threshold> + <left_node>1</left_node> + <right_val>0.4849104881286621</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 3 20 1 -1.</_> + <_>0 3 10 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0112078497186303</threshold> + <left_val>0.4146336913108826</left_val> + <right_val>0.5471264123916626</right_val></_></_> + <_> + <!-- tree 20 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>2 1 10 3 -1.</_> + <_>2 2 10 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0103374095633626</threshold> + <left_val>0.2877183854579926</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 7 2 2 -1.</_> + <_>10 7 1 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.6883640568703413e-003</threshold> + <left_val>0.5101901888847351</left_val> + <right_val>0.7216951251029968</right_val></_></_> + <_> + <!-- tree 21 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 17 3 2 -1.</_> + <_>10 17 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.8984280545264482e-003</threshold> + <left_node>1</left_node> + <right_val>0.5276182293891907</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 7 3 6 -1.</_> + <_>10 7 1 6 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.9986729174852371e-003</threshold> + <left_val>0.6618459820747376</left_val> + <right_val>0.4841631054878235</right_val></_></_> + <_> + <!-- tree 22 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 17 3 2 -1.</_> + <_>9 17 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.5043681748211384e-003</threshold> + <left_node>1</left_node> + <right_val>0.1874157935380936</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 7 3 6 -1.</_> + <_>9 7 1 6 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0177995301783085</threshold> + <left_val>0.4616934955120087</left_val> + <right_val>0.7088965773582459</right_val></_></_> + <_> + <!-- tree 23 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>16 3 4 6 -1.</_> + <_>16 5 4 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0184625703841448</threshold> + <left_val>0.3001979887485504</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>15 6 2 12 -1.</_> + <_>16 6 1 6 2.</_> + <_>15 12 1 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.4931300029275008e-005</threshold> + <left_val>0.4561808109283447</left_val> + <right_val>0.5610787868499756</right_val></_></_> + <_> + <!-- tree 24 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 4 18 10 -1.</_> + <_>1 4 9 5 2.</_> + <_>10 9 9 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0860212296247482</threshold> + <left_val>0.2341700941324234</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 4 2 4 -1.</_> + <_>9 6 2 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.0818758356617764e-005</threshold> + <left_val>0.5672286152839661</left_val> + <right_val>0.4199964106082916</right_val></_></_> + <_> + <!-- tree 25 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 5 3 2 -1.</_> + <_>12 6 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.2670679716393352e-003</threshold> + <left_node>1</left_node> + <right_val>0.6207482218742371</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 12 10 4 -1.</_> + <_>5 14 10 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.3699879636988044e-003</threshold> + <left_val>0.5394958853721619</left_val> + <right_val>0.3823862969875336</right_val></_></_> + <_> + <!-- tree 26 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 5 3 2 -1.</_> + <_>5 6 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.3162781037390232e-003</threshold> + <left_node>1</left_node> + <right_val>0.7061681151390076</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 6 12 6 -1.</_> + <_>8 6 4 6 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.4532039640471339e-003</threshold> + <left_val>0.3065513074398041</left_val> + <right_val>0.4827373027801514</right_val></_></_> + <_> + <!-- tree 27 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>14 4 6 6 -1.</_> + <_>14 6 6 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0714920610189438</threshold> + <left_node>1</left_node> + <right_val>0.5193122029304504</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>16 0 4 6 -1.</_> + <_>18 0 2 3 2.</_> + <_>16 3 2 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.9857978913933039e-003</threshold> + <left_val>0.4642435014247894</left_val> + <right_val>0.5807694792747498</right_val></_></_> + <_> + <!-- tree 28 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 4 6 6 -1.</_> + <_>0 6 6 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.2516499310731888e-003</threshold> + <left_node>1</left_node> + <right_val>0.2949813902378082</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 0 4 6 -1.</_> + <_>0 0 2 3 2.</_> + <_>2 3 2 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.7005500160157681e-003</threshold> + <left_val>0.4585886895656586</left_val> + <right_val>0.6022353768348694</right_val></_></_> + <_> + <!-- tree 29 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 0 8 5 -1.</_> + <_>12 0 4 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0111303897574544</threshold> + <left_val>0.4357841014862061</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>16 0 4 17 -1.</_> + <_>16 0 2 17 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0150928497314453</threshold> + <left_val>0.4561539888381958</left_val> + <right_val>0.6119061708450317</right_val></_></_> + <_> + <!-- tree 30 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 0 18 20 -1.</_> + <_>7 0 6 20 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0279433000832796</threshold> + <left_val>0.6537144184112549</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 0 2 5 -1.</_> + <_>7 0 1 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.4036991312168539e-005</threshold> + <left_val>0.3474723100662231</left_val> + <right_val>0.5336967706680298</right_val></_></_> + <_> + <!-- tree 31 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 6 20 1 -1.</_> + <_>0 6 10 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0122327702119946</threshold> + <left_val>0.3731676042079926</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 7 6 4 -1.</_> + <_>10 7 2 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.8591412855312228e-004</threshold> + <left_val>0.5717229247093201</left_val> + <right_val>0.4793379008769989</right_val></_></_> + <_> + <!-- tree 32 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 1 16 4 -1.</_> + <_>1 1 8 2 2.</_> + <_>9 3 8 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.8992990739643574e-003</threshold> + <left_val>0.4056436121463776</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 2 4 2 -1.</_> + <_>7 2 2 1 2.</_> + <_>9 3 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.9113907152786851e-004</threshold> + <left_val>0.6174048185348511</left_val> + <right_val>0.4471754133701325</right_val></_></_> + <_> + <!-- tree 33 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 4 9 3 -1.</_> + <_>7 5 9 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.2117747515439987e-003</threshold> + <left_node>1</left_node> + <right_val>0.6179698109626770</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 4 5 12 -1.</_> + <_>10 10 5 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0455644801259041</threshold> + <left_val>0.2285494953393936</left_val> + <right_val>0.5249565839767456</right_val></_></_> + <_> + <!-- tree 34 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 12 2 3 -1.</_> + <_>3 13 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.3631910122931004e-003</threshold> + <left_val>0.1784950047731400</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 8 3 5 -1.</_> + <_>9 8 1 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0122749703004956</threshold> + <left_val>0.7261952757835388</left_val> + <right_val>0.4550398886203766</right_val></_></_> + <_> + <!-- tree 35 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>13 9 2 3 -1.</_> + <_>13 9 1 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.4185991175472736e-003</threshold> + <left_val>0.5252990722656250</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>15 11 2 2 -1.</_> + <_>15 12 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.1846961984410882e-004</threshold> + <left_val>0.5445222258567810</left_val> + <right_val>0.3272218108177185</right_val></_></_> + <_> + <!-- tree 36 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 6 2 3 -1.</_> + <_>5 7 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.1358140297234058e-003</threshold> + <left_node>1</left_node> + <right_val>0.7013831734657288</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>2 11 6 2 -1.</_> + <_>2 12 6 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.9578010910190642e-004</threshold> + <left_val>0.4965943992137909</left_val> + <right_val>0.3295598030090332</right_val></_></_> + <_> + <!-- tree 37 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>15 11 4 3 -1.</_> + <_>15 12 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.6887691132724285e-003</threshold> + <left_val>0.5362641811370850</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>16 0 4 17 -1.</_> + <_>16 0 2 17 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0182554405182600</threshold> + <left_val>0.6496108770370483</left_val> + <right_val>0.4757137000560761</right_val></_></_> + <_> + <!-- tree 38 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 11 4 3 -1.</_> + <_>1 12 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.2736468389630318e-003</threshold> + <left_val>0.2343741059303284</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 11 1 3 -1.</_> + <_>9 12 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.4320168886333704e-003</threshold> + <left_val>0.4620118141174316</left_val> + <right_val>0.6898419260978699</right_val></_></_> + <_> + <!-- tree 39 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>10 9 6 7 -1.</_> + <_>10 9 3 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0496176294982433</threshold> + <left_val>0.2100719958543778</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 15 4 2 -1.</_> + <_>8 16 4 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.1701210169121623e-003</threshold> + <left_val>0.4621528983116150</left_val> + <right_val>0.5797135829925537</right_val></_></_> + <_> + <!-- tree 40 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 9 6 7 -1.</_> + <_>7 9 3 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0452372916042805</threshold> + <left_val>0.2118262052536011</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 14 2 3 -1.</_> + <_>9 15 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.7563421539962292e-003</threshold> + <left_val>0.4884614944458008</left_val> + <right_val>0.6872498989105225</right_val></_></_> + <_> + <!-- tree 41 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 2 20 2 -1.</_> + <_>10 2 10 1 2.</_> + <_>0 3 10 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0148359695449471</threshold> + <left_node>1</left_node> + <right_val>0.5275105834007263</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 7 8 2 -1.</_> + <_>6 8 8 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.7436608262360096e-004</threshold> + <left_val>0.4172320961952210</left_val> + <right_val>0.5491139888763428</right_val></_></_> + <_> + <!-- tree 42 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 2 20 2 -1.</_> + <_>0 2 10 1 2.</_> + <_>10 3 10 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0148359695449471</threshold> + <left_node>1</left_node> + <right_val>0.2124876976013184</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 1 2 10 -1.</_> + <_>3 1 1 5 2.</_> + <_>4 6 1 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.0892542609944940e-004</threshold> + <left_val>0.5495215058326721</left_val> + <right_val>0.4207795858383179</right_val></_></_> + <_> + <!-- tree 43 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>13 4 1 10 -1.</_> + <_>13 9 1 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.7517668250948191e-004</threshold> + <left_val>0.3321942090988159</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 8 4 3 -1.</_> + <_>9 9 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.7618978209793568e-003</threshold> + <left_val>0.2212958037853241</left_val> + <right_val>0.5232653021812439</right_val></_></_> + <_> + <!-- tree 44 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>2 11 16 4 -1.</_> + <_>2 11 8 2 2.</_> + <_>10 13 8 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0401358604431152</threshold> + <left_val>0.1101796030998230</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 1 3 5 -1.</_> + <_>6 1 1 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.3651469275355339e-003</threshold> + <left_val>0.3810100853443146</left_val> + <right_val>0.5617291927337647</right_val></_></_> + <_> + <!-- tree 45 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 10 2 3 -1.</_> + <_>9 11 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.4713007779791951e-004</threshold> + <left_node>1</left_node> + <right_val>0.5795056819915772</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 11 2 2 -1.</_> + <_>9 12 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.2727389372885227e-003</threshold> + <left_val>0.6392269134521484</left_val> + <right_val>0.4711438119411469</right_val></_></_> + <_> + <!-- tree 46 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 10 20 2 -1.</_> + <_>0 11 20 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.6202510818839073e-003</threshold> + <left_node>1</left_node> + <right_val>0.3409883975982666</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 7 6 4 -1.</_> + <_>1 7 3 2 2.</_> + <_>4 9 3 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.7307618660852313e-004</threshold> + <left_val>0.3659302890300751</left_val> + <right_val>0.5388171076774597</right_val></_></_> + <_> + <!-- tree 47 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 0 8 8 -1.</_> + <_>16 0 4 4 2.</_> + <_>12 4 4 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0330949090421200</threshold> + <left_node>1</left_node> + <right_val>0.7170385718345642</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>14 1 6 4 -1.</_> + <_>16 1 2 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0115441195666790</threshold> + <left_val>0.6386818289756775</left_val> + <right_val>0.4681304097175598</right_val></_></_> + <_> + <!-- tree 48 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 3 2 14 -1.</_> + <_>6 10 2 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.4234469793736935e-003</threshold> + <left_val>0.3263700902462006</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 1 7 12 -1.</_> + <_>6 7 7 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.2252950370311737e-003</threshold> + <left_val>0.5767819285392761</left_val> + <right_val>0.4346418082714081</right_val></_></_> + <_> + <!-- tree 49 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 0 15 5 -1.</_> + <_>10 0 5 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0181331094354391</threshold> + <left_val>0.4697827994823456</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>15 0 4 10 -1.</_> + <_>15 0 2 10 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.0903049781918526e-003</threshold> + <left_val>0.4437389075756073</left_val> + <right_val>0.6061668992042542</right_val></_></_> + <_> + <!-- tree 50 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 0 18 3 -1.</_> + <_>7 0 6 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0132729401811957</threshold> + <left_val>0.6558511257171631</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 0 17 2 -1.</_> + <_>0 1 17 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.4632199599873275e-004</threshold> + <left_val>0.3376353979110718</left_val> + <right_val>0.5091655254364014</right_val></_></_> + <_> + <!-- tree 51 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>10 0 3 3 -1.</_> + <_>11 0 1 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.5790191031992435e-003</threshold> + <left_val>0.2947883903980255</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 0 3 12 -1.</_> + <_>11 0 1 12 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.6997101162560284e-004</threshold> + <left_val>0.5556982159614563</left_val> + <right_val>0.4665456116199493</right_val></_></_> + <_> + <!-- tree 52 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 3 4 16 -1.</_> + <_>1 3 2 8 2.</_> + <_>3 11 2 8 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0481794402003288</threshold> + <left_val>0.7338355779647827</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 0 3 3 -1.</_> + <_>8 0 1 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-9.2581362696364522e-004</threshold> + <left_val>0.3543871939182282</left_val> + <right_val>0.5285149812698364</right_val></_></_> + <_> + <!-- tree 53 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 13 2 6 -1.</_> + <_>9 16 2 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0147807300090790</threshold> + <left_val>0.1944441944360733</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 0 6 13 -1.</_> + <_>11 0 2 13 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.1002745032310486</threshold> + <left_val>0.0990492925047874</left_val> + <right_val>0.5139853954315186</right_val></_></_> + <_> + <!-- tree 54 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 7 3 2 -1.</_> + <_>8 7 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-9.3848101096227765e-004</threshold> + <left_val>0.5827109813690186</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 2 1 12 -1.</_> + <_>8 6 1 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.8861360624432564e-003</threshold> + <left_val>0.3441427946090698</left_val> + <right_val>0.5148838758468628</right_val></_></_> + <_> + <!-- tree 55 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 10 12 6 -1.</_> + <_>10 10 6 3 2.</_> + <_>4 13 6 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0436827614903450</threshold> + <left_node>1</left_node> + <right_val>0.5207998156547546</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>13 5 2 3 -1.</_> + <_>13 6 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.6115700602531433e-003</threshold> + <left_val>0.4835503101348877</left_val> + <right_val>0.6322219967842102</right_val></_></_> + <_> + <!-- tree 56 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 10 12 6 -1.</_> + <_>4 10 6 3 2.</_> + <_>10 13 6 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0436827614903450</threshold> + <left_node>1</left_node> + <right_val>0.1364538073539734</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 5 2 3 -1.</_> + <_>5 6 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.7179530113935471e-003</threshold> + <left_val>0.4537320137023926</left_val> + <right_val>0.6066750884056091</right_val></_></_> + <_> + <!-- tree 57 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 6 6 7 -1.</_> + <_>10 6 2 7 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0339649096131325</threshold> + <left_node>1</left_node> + <right_val>0.4968374967575073</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 6 2 4 -1.</_> + <_>9 6 1 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.0993590112775564e-003</threshold> + <left_val>0.5831680893898010</left_val> + <right_val>0.4688239991664887</right_val></_></_> + <_> + <!-- tree 58 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 6 6 7 -1.</_> + <_>8 6 2 7 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0543010793626308</threshold> + <left_node>1</left_node> + <right_val>0.7568289041519165</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 6 2 4 -1.</_> + <_>10 6 1 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.0993590112775564e-003</threshold> + <left_val>0.4330148100852966</left_val> + <right_val>0.5768468976020813</right_val></_></_> + <_> + <!-- tree 59 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 9 2 3 -1.</_> + <_>12 9 1 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.4954120160837192e-005</threshold> + <left_node>1</left_node> + <right_val>0.4443281888961792</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 6 20 1 -1.</_> + <_>0 6 10 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0314158685505390</threshold> + <left_val>0.5274472832679749</left_val> + <right_val>0.3037855923175812</right_val></_></_> + <_> + <!-- tree 60 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 7 10 2 -1.</_> + <_>10 7 5 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0108318496495485</threshold> + <left_node>1</left_node> + <right_val>0.3581720888614655</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 16 4 3 -1.</_> + <_>1 17 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.6545711383223534e-004</threshold> + <left_val>0.5937584042549133</left_val> + <right_val>0.4294629991054535</right_val></_></_> + <_> + <!-- tree 61 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 4 3 3 -1.</_> + <_>12 5 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.2743160370737314e-003</threshold> + <left_node>1</left_node> + <right_val>0.5954576730728149</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 3 5 3 -1.</_> + <_>10 4 5 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.9340821094810963e-003</threshold> + <left_val>0.4792222976684570</left_val> + <right_val>0.5856133103370667</right_val></_></_> + <_> + <!-- tree 62 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 9 14 8 -1.</_> + <_>3 9 7 4 2.</_> + <_>10 13 7 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.1451907753944397e-003</threshold> + <left_node>1</left_node> + <right_val>0.3573477864265442</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 8 8 10 -1.</_> + <_>6 8 4 5 2.</_> + <_>10 13 4 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.2763288840651512e-003</threshold> + <left_val>0.4026022851467133</left_val> + <right_val>0.5764743089675903</right_val></_></_> + <_> + <!-- tree 63 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 4 3 3 -1.</_> + <_>12 5 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.3787851035594940e-003</threshold> + <left_node>1</left_node> + <right_val>0.4981333017349243</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 3 5 3 -1.</_> + <_>10 4 5 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.5621910570189357e-003</threshold> + <left_val>0.4736588001251221</left_val> + <right_val>0.5583608150482178</right_val></_></_> + <_> + <!-- tree 64 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 4 3 3 -1.</_> + <_>5 5 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.2318739686161280e-003</threshold> + <left_node>1</left_node> + <right_val>0.6167436838150024</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 3 5 3 -1.</_> + <_>5 4 5 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.6804019734263420e-003</threshold> + <left_val>0.4131424129009247</left_val> + <right_val>0.6280695199966431</right_val></_></_> + <_> + <!-- tree 65 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>13 16 2 3 -1.</_> + <_>13 17 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.3396480139344931e-003</threshold> + <left_val>0.3446358144283295</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 5 20 6 -1.</_> + <_>0 7 20 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.2093348056077957</threshold> + <left_val>0.1038658022880554</left_val> + <right_val>0.5204489231109619</right_val></_></_> + <_> + <!-- tree 66 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 14 3 3 -1.</_> + <_>3 15 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.3805822283029556e-003</threshold> + <left_node>1</left_node> + <right_val>0.2167402058839798</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 15 5 3 -1.</_> + <_>7 16 5 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.0137799009680748e-003</threshold> + <left_val>0.6738399267196655</left_val> + <right_val>0.4896650910377502</right_val></_></_> + <_> + <!-- tree 67 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 9 2 3 -1.</_> + <_>12 9 1 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.1756077706813812e-003</threshold> + <left_node>1</left_node> + <right_val>0.5177915096282959</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>15 13 2 6 -1.</_> + <_>15 13 1 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.3951779156923294e-004</threshold> + <left_val>0.4819645881652832</left_val> + <right_val>0.5464438199996948</right_val></_></_> + <_> + <!-- tree 68 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 9 2 3 -1.</_> + <_>7 9 1 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.0127760469913483e-003</threshold> + <left_node>1</left_node> + <right_val>0.3423596024513245</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 13 2 6 -1.</_> + <_>4 13 1 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.9784599104896188e-004</threshold> + <left_val>0.4488461017608643</left_val> + <right_val>0.5912671089172363</right_val></_></_> + <_> + <!-- tree 69 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>11 4 2 4 -1.</_> + <_>11 4 1 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.3596490316558629e-004</threshold> + <left_node>1</left_node> + <right_val>0.5568863153457642</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>13 4 2 5 -1.</_> + <_>13 4 1 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0135716600343585</threshold> + <left_val>0.5161067843437195</left_val> + <right_val>0.1713000982999802</right_val></_></_> + <_> + <!-- tree 70 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 4 2 4 -1.</_> + <_>8 4 1 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.0259079721872695e-005</threshold> + <left_node>1</left_node> + <right_val>0.4916203916072846</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 4 2 5 -1.</_> + <_>6 4 1 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.2625840976834297e-003</threshold> + <left_val>0.6404662728309631</left_val> + <right_val>0.2859084904193878</right_val></_></_> + <_> + <!-- tree 71 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>19 6 1 2 -1.</_> + <_>19 7 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.9217010412830859e-004</threshold> + <left_node>1</left_node> + <right_val>0.5459282994270325</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 7 8 13 -1.</_> + <_>12 7 4 13 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0219938792288303</threshold> + <left_val>0.4715713858604431</left_val> + <right_val>0.5690075159072876</right_val></_></_> + <_> + <!-- tree 72 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 6 1 2 -1.</_> + <_>0 7 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.8907777788117528e-004</threshold> + <left_node>1</left_node> + <right_val>0.3279826939105988</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 15 4 3 -1.</_> + <_>6 16 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.0893891602754593e-004</threshold> + <left_val>0.4302007853984833</left_val> + <right_val>0.5696045160293579</right_val></_></_> + <_> + <!-- tree 73 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>11 8 2 2 -1.</_> + <_>11 9 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.1662710312521085e-004</threshold> + <left_node>1</left_node> + <right_val>0.5387235283851624</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>11 7 2 4 -1.</_> + <_>11 7 1 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.0604078248143196e-003</threshold> + <left_val>0.5021423101425171</left_val> + <right_val>0.5965322256088257</right_val></_></_> + <_> + <!-- tree 74 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 13 2 3 -1.</_> + <_>4 14 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.5925969071686268e-004</threshold> + <left_node>1</left_node> + <right_val>0.3473494052886963</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 17 18 3 -1.</_> + <_>6 17 6 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0195261295884848</threshold> + <left_val>0.6475545167922974</left_val> + <right_val>0.4643782079219818</right_val></_></_></trees> + <stage_threshold>36.7265014648437500</stage_threshold> + <parent>13</parent> + <next>-1</next></_> + <_> + <!-- stage 15 --> + <trees> + <_> + <!-- tree 0 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 0 18 5 -1.</_> + <_>7 0 6 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0412424392998219</threshold> + <left_val>0.3393315076828003</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 7 3 4 -1.</_> + <_>5 9 3 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0156267099082470</threshold> + <left_val>0.5104100108146668</left_val> + <right_val>0.7772815227508545</right_val></_></_> + <_> + <!-- tree 1 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>10 6 2 2 -1.</_> + <_>10 6 1 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.9947189614176750e-004</threshold> + <left_val>0.3664673864841461</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 4 14 4 -1.</_> + <_>13 4 7 2 2.</_> + <_>6 6 7 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.0037609608843923e-003</threshold> + <left_val>0.5405650734901428</left_val> + <right_val>0.3926205039024353</right_val></_></_> + <_> + <!-- tree 2 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 16 6 4 -1.</_> + <_>5 16 3 2 2.</_> + <_>8 18 3 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.8128242855891585e-004</threshold> + <left_val>0.4251519143581390</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 15 2 4 -1.</_> + <_>7 17 2 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.3098999625071883e-004</threshold> + <left_val>0.4135144948959351</left_val> + <right_val>0.6925746202468872</right_val></_></_> + <_> + <!-- tree 3 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 5 5 14 -1.</_> + <_>8 12 5 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.1696720980107784e-003</threshold> + <left_node>1</left_node> + <right_val>0.3455873131752014</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 9 2 2 -1.</_> + <_>9 10 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.0587369799613953e-003</threshold> + <left_val>0.2234193980693817</left_val> + <right_val>0.5286118984222412</right_val></_></_> + <_> + <!-- tree 4 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 5 3 7 -1.</_> + <_>8 5 1 7 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.6395038953050971e-004</threshold> + <left_node>1</left_node> + <right_val>0.4206520020961762</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 0 3 9 -1.</_> + <_>0 3 3 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.5089480224996805e-003</threshold> + <left_val>0.6502981781959534</left_val> + <right_val>0.4117597937583923</right_val></_></_> + <_> + <!-- tree 5 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 6 8 8 -1.</_> + <_>12 6 4 4 2.</_> + <_>8 10 4 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.3975980002433062e-003</threshold> + <left_node>1</left_node> + <right_val>0.3673301041126251</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 8 13 2 -1.</_> + <_>4 9 13 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.0901279747486115e-003</threshold> + <left_val>0.2906238138675690</left_val> + <right_val>0.5445111989974976</right_val></_></_> + <_> + <!-- tree 6 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 3 6 1 -1.</_> + <_>6 3 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.6524370585102588e-004</threshold> + <left_val>0.4233515858650208</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 1 2 6 -1.</_> + <_>9 3 2 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.1602319106459618e-004</threshold> + <left_val>0.3886361122131348</left_val> + <right_val>0.6269165873527527</right_val></_></_> + <_> + <!-- tree 7 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>10 5 6 4 -1.</_> + <_>12 5 2 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.3739910102449358e-004</threshold> + <left_val>0.5524451136589050</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 5 2 12 -1.</_> + <_>9 9 2 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0247397609055042</threshold> + <left_val>0.4960095882415772</left_val> + <right_val>0.5373491048812866</right_val></_></_> + <_> + <!-- tree 8 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 14 4 3 -1.</_> + <_>8 15 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0153428399935365</threshold> + <left_val>0.6849405169487000</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 12 4 3 -1.</_> + <_>8 13 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0115404697135091</threshold> + <left_val>0.4037235081195831</left_val> + <right_val>0.6786940097808838</right_val></_></_> + <_> + <!-- tree 9 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>10 3 6 7 -1.</_> + <_>12 3 2 7 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.4230621792376041e-003</threshold> + <left_node>1</left_node> + <right_val>0.3814676105976105</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 10 16 6 -1.</_> + <_>3 12 16 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0129778096452355</threshold> + <left_val>0.5527058839797974</left_val> + <right_val>0.3744955956935883</right_val></_></_> + <_> + <!-- tree 10 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 5 3 10 -1.</_> + <_>5 10 3 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.1063399724662304e-003</threshold> + <left_val>0.3520928919315338</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 10 3 6 -1.</_> + <_>6 13 3 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.3743690215051174e-003</threshold> + <left_val>0.5641903281211853</left_val> + <right_val>0.3075025975704193</right_val></_></_> + <_> + <!-- tree 11 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>17 2 2 12 -1.</_> + <_>17 2 1 12 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0162337794899940</threshold> + <left_val>0.4888828098773956</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>16 6 2 14 -1.</_> + <_>16 13 2 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.1519351806491613e-004</threshold> + <left_val>0.5456321239471436</left_val> + <right_val>0.4743550121784210</right_val></_></_> + <_> + <!-- tree 12 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 11 12 9 -1.</_> + <_>3 14 12 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0907824933528900</threshold> + <left_val>0.2925248146057129</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 2 4 12 -1.</_> + <_>2 2 2 12 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0116652101278305</threshold> + <left_val>0.4688454866409302</left_val> + <right_val>0.6230347752571106</right_val></_></_> + <_> + <!-- tree 13 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>18 0 2 18 -1.</_> + <_>18 0 1 18 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0232864096760750</threshold> + <left_val>0.6895843148231506</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>16 12 3 2 -1.</_> + <_>16 13 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.1559339947998524e-003</threshold> + <left_val>0.5355802178382874</left_val> + <right_val>0.3423466086387634</right_val></_></_> + <_> + <!-- tree 14 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 2 2 15 -1.</_> + <_>1 2 1 15 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.3167220428586006e-003</threshold> + <left_val>0.5937076210975647</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 10 2 4 -1.</_> + <_>1 12 2 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.5610599657520652e-003</threshold> + <left_val>0.4708659946918488</left_val> + <right_val>0.2736997008323669</right_val></_></_> + <_> + <!-- tree 15 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>11 1 2 18 -1.</_> + <_>11 1 1 18 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0140766398981214</threshold> + <left_val>0.5287156105041504</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 2 14 2 -1.</_> + <_>10 2 7 1 2.</_> + <_>3 3 7 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.1018589660525322e-003</threshold> + <left_val>0.5336192846298218</left_val> + <right_val>0.3224813938140869</right_val></_></_> + <_> + <!-- tree 16 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 1 2 18 -1.</_> + <_>8 1 1 18 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.8221647739410400e-003</threshold> + <left_val>0.2983910143375397</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 1 8 12 -1.</_> + <_>6 7 8 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.3852899000048637e-003</threshold> + <left_val>0.5623999238014221</left_val> + <right_val>0.4295912086963654</right_val></_></_> + <_> + <!-- tree 17 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 14 4 3 -1.</_> + <_>8 15 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.3483278974890709e-003</threshold> + <left_node>1</left_node> + <right_val>0.6813961267471314</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 14 6 3 -1.</_> + <_>7 15 6 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.5707519855350256e-003</threshold> + <left_val>0.5857968926429749</left_val> + <right_val>0.4603429138660431</right_val></_></_> + <_> + <!-- tree 18 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 13 5 2 -1.</_> + <_>0 14 5 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.3340100888162851e-003</threshold> + <left_node>1</left_node> + <right_val>0.2744851112365723</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 0 2 6 -1.</_> + <_>9 0 1 3 2.</_> + <_>10 3 1 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.7432780265808105e-003</threshold> + <left_val>0.5047526955604553</left_val> + <right_val>0.2362741976976395</right_val></_></_> + <_> + <!-- tree 19 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 0 2 6 -1.</_> + <_>10 0 1 3 2.</_> + <_>9 3 1 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.5055489540100098e-003</threshold> + <left_val>0.5242248177528381</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 7 3 6 -1.</_> + <_>10 7 1 6 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0125892497599125</threshold> + <left_val>0.4823690950870514</left_val> + <right_val>0.6752536892890930</right_val></_></_> + <_> + <!-- tree 20 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 0 2 6 -1.</_> + <_>9 0 1 3 2.</_> + <_>10 3 1 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.3358368352055550e-003</threshold> + <left_val>0.1734634935855866</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 7 3 6 -1.</_> + <_>9 7 1 6 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.7639651931822300e-003</threshold> + <left_val>0.6354380846023560</left_val> + <right_val>0.4587475061416626</right_val></_></_> + <_> + <!-- tree 21 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 6 2 6 -1.</_> + <_>9 6 1 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.3599749654531479e-003</threshold> + <left_val>0.4580380916595459</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 4 4 3 -1.</_> + <_>9 4 2 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0284042600542307</threshold> + <left_val>0.5176380872726440</left_val> + <right_val>0.1204385012388229</right_val></_></_> + <_> + <!-- tree 22 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 4 4 3 -1.</_> + <_>0 5 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-9.2958156019449234e-003</threshold> + <left_val>0.2337957024574280</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 7 4 2 -1.</_> + <_>8 8 4 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.1800320353358984e-003</threshold> + <left_val>0.3902814090251923</left_val> + <right_val>0.5652930140495300</right_val></_></_> + <_> + <!-- tree 23 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>10 6 6 3 -1.</_> + <_>12 6 2 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.0948140881955624e-003</threshold> + <left_val>0.5512028932571411</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 6 3 12 -1.</_> + <_>9 10 3 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.1679958812892437e-003</threshold> + <left_val>0.5455976128578186</left_val> + <right_val>0.4798949062824249</right_val></_></_> + <_> + <!-- tree 24 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 4 2 3 -1.</_> + <_>5 5 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.4458891972899437e-003</threshold> + <left_node>1</left_node> + <right_val>0.6127086877822876</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 6 1 3 -1.</_> + <_>5 7 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.2766510481014848e-003</threshold> + <left_val>0.5317131876945496</left_val> + <right_val>0.3850932121276856</right_val></_></_> + <_> + <!-- tree 25 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 17 3 2 -1.</_> + <_>10 17 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.9404270723462105e-004</threshold> + <left_val>0.5446437001228333</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 7 20 2 -1.</_> + <_>0 8 20 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0423096083104610</threshold> + <left_val>0.5234643816947937</left_val> + <right_val>0.2213044017553330</right_val></_></_> + <_> + <!-- tree 26 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 3 6 7 -1.</_> + <_>6 3 2 7 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.6189671158790588e-003</threshold> + <left_val>0.4916197955608368</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 10 6 10 -1.</_> + <_>5 10 3 5 2.</_> + <_>8 15 3 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.2401198558509350e-003</threshold> + <left_val>0.1471475958824158</left_val> + <right_val>0.4852893948554993</right_val></_></_> + <_> + <!-- tree 27 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 17 3 2 -1.</_> + <_>10 17 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.5610670931637287e-003</threshold> + <left_val>0.2773773968219757</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 10 2 2 -1.</_> + <_>9 11 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.5506159949582070e-005</threshold> + <left_val>0.4626461863517761</left_val> + <right_val>0.5768079161643982</right_val></_></_> + <_> + <!-- tree 28 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 17 3 2 -1.</_> + <_>9 17 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.1903791502118111e-003</threshold> + <left_val>0.1644289940595627</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 6 1 3 -1.</_> + <_>5 7 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.1186462193727493e-004</threshold> + <left_val>0.4778591096401215</left_val> + <right_val>0.6261864900588989</right_val></_></_> + <_> + <!-- tree 29 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 1 20 2 -1.</_> + <_>10 1 10 1 2.</_> + <_>0 2 10 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0137798096984625</threshold> + <left_val>0.5257307887077332</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>14 2 6 9 -1.</_> + <_>14 5 6 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.1290319962427020e-003</threshold> + <left_val>0.5498048067092896</left_val> + <right_val>0.3983106911182404</right_val></_></_> + <_> + <!-- tree 30 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 3 3 2 -1.</_> + <_>5 4 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.0610350000206381e-004</threshold> + <left_val>0.4033519029617310</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 4 4 2 -1.</_> + <_>7 4 2 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.6695790691301227e-004</threshold> + <left_val>0.4149340093135834</left_val> + <right_val>0.5795341134071350</right_val></_></_> + <_> + <!-- tree 31 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>14 2 6 9 -1.</_> + <_>14 5 6 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.1290319962427020e-003</threshold> + <left_node>1</left_node> + <right_val>0.3934114873409271</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 12 20 6 -1.</_> + <_>0 14 20 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.1201934963464737</threshold> + <left_val>0.0734004825353622</left_val> + <right_val>0.5202586054801941</right_val></_></_> + <_> + <!-- tree 32 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>2 2 16 4 -1.</_> + <_>2 2 8 2 2.</_> + <_>10 4 8 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0152307404205203</threshold> + <left_val>0.3749505877494812</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 12 5 3 -1.</_> + <_>7 13 5 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.5759829916059971e-003</threshold> + <left_val>0.5078150033950806</left_val> + <right_val>0.6606066226959229</right_val></_></_> + <_> + <!-- tree 33 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>14 9 6 10 -1.</_> + <_>14 9 3 10 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0134794600307941</threshold> + <left_val>0.4547711014747620</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>16 6 3 2 -1.</_> + <_>16 7 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.1162950433790684e-003</threshold> + <left_val>0.3311006128787994</left_val> + <right_val>0.5384259223937988</right_val></_></_> + <_> + <!-- tree 34 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 9 6 10 -1.</_> + <_>3 9 3 10 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0178777091205120</threshold> + <left_val>0.6513252854347229</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 16 5 2 -1.</_> + <_>0 17 5 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.0931970318779349e-003</threshold> + <left_val>0.5264765024185181</left_val> + <right_val>0.3456991016864777</right_val></_></_> + <_> + <!-- tree 35 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 12 2 3 -1.</_> + <_>9 13 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.0553159303963184e-003</threshold> + <left_val>0.6268613934516907</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 7 2 12 -1.</_> + <_>9 11 2 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.6365049891173840e-003</threshold> + <left_val>0.5399212837219238</left_val> + <right_val>0.4345397055149078</right_val></_></_> + <_> + <!-- tree 36 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 2 6 2 -1.</_> + <_>5 2 2 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.7896481747739017e-005</threshold> + <left_val>0.3835605978965759</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 1 1 2 -1.</_> + <_>4 2 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.2714448752813041e-004</threshold> + <left_val>0.3337667882442474</left_val> + <right_val>0.5539165735244751</right_val></_></_> + <_> + <!-- tree 37 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>11 15 1 2 -1.</_> + <_>11 16 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.3425030889920890e-004</threshold> + <left_node>1</left_node> + <right_val>0.5788270235061646</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 1 16 2 -1.</_> + <_>11 1 8 1 2.</_> + <_>3 2 8 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0140055799856782</threshold> + <left_val>0.5275077819824219</left_val> + <right_val>0.2701125144958496</right_val></_></_> + <_> + <!-- tree 38 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 6 2 2 -1.</_> + <_>3 6 1 1 2.</_> + <_>4 7 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-9.2654931358993053e-004</threshold> + <left_val>0.5852280259132385</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 11 10 6 -1.</_> + <_>5 11 5 3 2.</_> + <_>10 14 5 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.9504268206655979e-003</threshold> + <left_val>0.4728336930274963</left_val> + <right_val>0.3313918113708496</right_val></_></_> + <_> + <!-- tree 39 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>10 11 4 6 -1.</_> + <_>10 14 4 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.8086868375539780e-004</threshold> + <left_node>1</left_node> + <right_val>0.4258810877799988</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>14 9 6 11 -1.</_> + <_>16 9 2 11 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0120180202648044</threshold> + <left_val>0.5609787106513977</left_val> + <right_val>0.4895192086696625</right_val></_></_> + <_> + <!-- tree 40 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 9 6 11 -1.</_> + <_>2 9 2 11 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.1452154070138931</threshold> + <left_val>0.0438944809138775</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>2 11 16 6 -1.</_> + <_>2 11 8 3 2.</_> + <_>10 14 8 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.6049019806087017e-003</threshold> + <left_val>0.4229170978069305</left_val> + <right_val>0.5616292953491211</right_val></_></_> + <_> + <!-- tree 41 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 0 8 10 -1.</_> + <_>16 0 4 5 2.</_> + <_>12 5 4 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0349097512662411</threshold> + <left_node>1</left_node> + <right_val>0.4788128137588501</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>14 2 6 4 -1.</_> + <_>16 2 2 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.7478420417755842e-003</threshold> + <left_val>0.4800282120704651</left_val> + <right_val>0.5801389217376709</right_val></_></_> + <_> + <!-- tree 42 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 0 8 10 -1.</_> + <_>0 0 4 5 2.</_> + <_>4 5 4 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0330380313098431</threshold> + <left_node>1</left_node> + <right_val>0.7078176140785217</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 2 6 4 -1.</_> + <_>2 2 2 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.6872599739581347e-003</threshold> + <left_val>0.4449624121189117</left_val> + <right_val>0.5957731008529663</right_val></_></_> + <_> + <!-- tree 43 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 9 15 2 -1.</_> + <_>9 9 5 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.5311939902603626e-003</threshold> + <left_val>0.4177047014236450</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 3 4 8 -1.</_> + <_>14 3 2 4 2.</_> + <_>12 7 2 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.1058510541915894e-003</threshold> + <left_val>0.5372948050498962</left_val> + <right_val>0.3736926913261414</right_val></_></_> + <_> + <!-- tree 44 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 2 2 9 -1.</_> + <_>10 2 1 9 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.7599847465753555e-003</threshold> + <left_val>0.6658807992935181</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 2 20 1 -1.</_> + <_>10 2 10 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0230033099651337</threshold> + <left_val>0.2647922039031982</left_val> + <right_val>0.5101817846298218</right_val></_></_> + <_> + <!-- tree 45 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>16 1 4 5 -1.</_> + <_>16 1 2 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.3664818406105042e-003</threshold> + <left_val>0.4548634886741638</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>16 0 4 6 -1.</_> + <_>16 3 4 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0389717705547810</threshold> + <left_val>0.5157061815261841</left_val> + <right_val>0.3436439037322998</right_val></_></_> + <_> + <!-- tree 46 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 3 6 4 -1.</_> + <_>6 3 2 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0277671907097101</threshold> + <left_val>0.2354391068220139</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 0 18 5 -1.</_> + <_>6 0 6 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-9.8894089460372925e-003</threshold> + <left_val>0.6887741088867188</left_val> + <right_val>0.5111051797866821</right_val></_></_> + <_> + <!-- tree 47 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 2 12 14 -1.</_> + <_>12 2 6 7 2.</_> + <_>6 9 6 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.2073140610009432e-003</threshold> + <left_val>0.5438867807388306</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>11 8 3 5 -1.</_> + <_>12 8 1 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.7484978353604674e-004</threshold> + <left_val>0.5451148748397827</left_val> + <right_val>0.4831353127956390</right_val></_></_> + <_> + <!-- tree 48 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 12 2 2 -1.</_> + <_>5 13 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.1947520114481449e-003</threshold> + <left_val>0.2113419026136398</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 10 4 3 -1.</_> + <_>7 10 2 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.6169899501837790e-004</threshold> + <left_val>0.5273681879043579</left_val> + <right_val>0.3992587029933929</right_val></_></_> + <_> + <!-- tree 49 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 9 15 2 -1.</_> + <_>9 9 5 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.2421479225158691e-003</threshold> + <left_val>0.4688260853290558</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 7 6 2 -1.</_> + <_>12 7 2 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.2139769969508052e-003</threshold> + <left_val>0.5504235029220581</left_val> + <right_val>0.4384871125221252</right_val></_></_> + <_> + <!-- tree 50 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 9 15 2 -1.</_> + <_>6 9 5 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.9469770379364491e-003</threshold> + <left_val>0.3892847001552582</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 0 2 10 -1.</_> + <_>5 0 1 5 2.</_> + <_>6 5 1 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.9291830034926534e-004</threshold> + <left_val>0.6001722812652588</left_val> + <right_val>0.4561662971973419</right_val></_></_> + <_> + <!-- tree 51 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 0 20 14 -1.</_> + <_>0 7 20 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.6255072951316834</threshold> + <left_node>1</left_node> + <right_val>0.0681256130337715</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 7 8 4 -1.</_> + <_>12 7 4 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.7744520753622055e-003</threshold> + <left_val>0.4813025891780853</left_val> + <right_val>0.5620657205581665</right_val></_></_> + <_> + <!-- tree 52 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 7 8 4 -1.</_> + <_>4 7 4 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0943782478570938</threshold> + <left_node>1</left_node> + <right_val>0.0666322931647301</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 1 3 3 -1.</_> + <_>9 1 1 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.9560910295695066e-003</threshold> + <left_val>0.3588232994079590</left_val> + <right_val>0.5295407176017761</right_val></_></_> + <_> + <!-- tree 53 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 7 3 4 -1.</_> + <_>10 7 1 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.0652769431471825e-003</threshold> + <left_val>0.4822688102722168</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 9 3 1 -1.</_> + <_>10 9 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.2138071148656309e-004</threshold> + <left_val>0.4670332968235016</left_val> + <right_val>0.5683112740516663</right_val></_></_> + <_> + <!-- tree 54 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 9 3 2 -1.</_> + <_>8 10 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.4220191193744540e-004</threshold> + <left_node>1</left_node> + <right_val>0.5360795259475708</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 4 2 8 -1.</_> + <_>8 4 1 4 2.</_> + <_>9 8 1 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.7313501127064228e-003</threshold> + <left_val>0.6137245893478394</left_val> + <right_val>0.3188089132308960</right_val></_></_> + <_> + <!-- tree 55 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 8 12 3 -1.</_> + <_>5 9 12 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.5395509544759989e-003</threshold> + <left_val>0.4487720131874085</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>11 14 1 3 -1.</_> + <_>11 15 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.4315000046044588e-003</threshold> + <left_val>0.4894166886806488</left_val> + <right_val>0.6716653704643250</right_val></_></_> + <_> + <!-- tree 56 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 10 3 6 -1.</_> + <_>6 12 3 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0155816199257970</threshold> + <left_val>0.3336741924285889</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 17 8 3 -1.</_> + <_>4 18 8 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.0816920548677444e-003</threshold> + <left_val>0.4718219935894013</left_val> + <right_val>0.5960627198219299</right_val></_></_> + <_> + <!-- tree 57 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>17 6 2 3 -1.</_> + <_>17 7 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.2197659127414227e-003</threshold> + <left_val>0.3588554859161377</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 12 2 2 -1.</_> + <_>10 12 1 1 2.</_> + <_>9 13 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-9.3048671260476112e-004</threshold> + <left_val>0.6218712925910950</left_val> + <right_val>0.4817300140857697</right_val></_></_> + <_> + <!-- tree 58 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 13 2 4 -1.</_> + <_>9 13 1 2 2.</_> + <_>10 15 1 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.7418707981705666e-003</threshold> + <left_val>0.2550027072429657</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 11 2 3 -1.</_> + <_>9 12 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.2950369901955128e-003</threshold> + <left_val>0.6728078722953796</left_val> + <right_val>0.5051063895225525</right_val></_></_> + <_> + <!-- tree 59 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 5 12 10 -1.</_> + <_>11 5 6 5 2.</_> + <_>5 10 6 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.5216049291193485e-003</threshold> + <left_val>0.5401909947395325</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 3 12 12 -1.</_> + <_>12 3 6 6 2.</_> + <_>6 9 6 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.4289379362016916e-003</threshold> + <left_val>0.5419461727142334</left_val> + <right_val>0.4347142875194550</right_val></_></_> + <_> + <!-- tree 60 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 7 2 2 -1.</_> + <_>5 7 1 1 2.</_> + <_>6 8 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.5261470582336187e-003</threshold> + <left_val>0.6970624923706055</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 3 3 2 -1.</_> + <_>5 3 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.4817339833825827e-003</threshold> + <left_val>0.3263416886329651</left_val> + <right_val>0.4917873144149780</right_val></_></_> + <_> + <!-- tree 61 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 2 12 14 -1.</_> + <_>12 2 6 7 2.</_> + <_>6 9 6 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.2247453033924103</threshold> + <left_val>7.2937291115522385e-003</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 2 12 3 -1.</_> + <_>9 2 4 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.8342509176582098e-003</threshold> + <left_val>0.4579229950904846</left_val> + <right_val>0.5379881262779236</right_val></_></_> + <_> + <!-- tree 62 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 1 18 17 -1.</_> + <_>7 1 6 17 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0208216104656458</threshold> + <left_val>0.6024088859558106</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 9 10 1 -1.</_> + <_>5 9 5 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.4896340144332498e-004</threshold> + <left_val>0.3336144089698792</left_val> + <right_val>0.4962815940380096</right_val></_></_> + <_> + <!-- tree 63 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>16 8 4 3 -1.</_> + <_>16 9 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.3524499740451574e-003</threshold> + <left_val>0.3558751046657562</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 13 6 6 -1.</_> + <_>7 16 6 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0372798815369606</threshold> + <left_val>0.1698562949895859</left_val> + <right_val>0.5208985805511475</right_val></_></_> + <_> + <!-- tree 64 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 14 1 6 -1.</_> + <_>6 16 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.3896770542487502e-004</threshold> + <left_node>1</left_node> + <right_val>0.5590686202049255</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 17 4 2 -1.</_> + <_>6 18 4 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.1912620761431754e-004</threshold> + <left_val>0.5848733782768250</left_val> + <right_val>0.3795836865901947</right_val></_></_> + <_> + <!-- tree 65 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>10 18 6 2 -1.</_> + <_>13 18 3 1 2.</_> + <_>10 19 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.4003461264073849e-004</threshold> + <left_node>1</left_node> + <right_val>0.5670288205146790</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>16 8 1 3 -1.</_> + <_>16 9 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.8956850767135620e-003</threshold> + <left_val>0.5182694792747498</left_val> + <right_val>0.3327709138393402</right_val></_></_> + <_> + <!-- tree 66 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 13 4 3 -1.</_> + <_>8 14 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.6084529925137758e-003</threshold> + <left_node>1</left_node> + <right_val>0.5410485863685608</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 15 1 2 -1.</_> + <_>9 16 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.7474587811157107e-004</threshold> + <left_val>0.6022642254829407</left_val> + <right_val>0.3644644021987915</right_val></_></_> + <_> + <!-- tree 67 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>13 0 3 12 -1.</_> + <_>14 0 1 12 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0134350396692753</threshold> + <left_node>1</left_node> + <right_val>0.3441281914710999</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>15 11 1 3 -1.</_> + <_>15 12 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.1368139423429966e-003</threshold> + <left_val>0.5292434096336365</left_val> + <right_val>0.2747075855731964</right_val></_></_> + <_> + <!-- tree 68 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 15 3 3 -1.</_> + <_>8 16 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0141576295718551</threshold> + <left_node>1</left_node> + <right_val>0.8027868270874023</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 0 3 12 -1.</_> + <_>5 0 1 12 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.3884391672909260e-003</threshold> + <left_val>0.5222315192222595</left_val> + <right_val>0.3586727976799011</right_val></_></_> + <_> + <!-- tree 69 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 7 3 3 -1.</_> + <_>10 7 1 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.8013410568237305e-003</threshold> + <left_val>0.4900386929512024</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 9 3 1 -1.</_> + <_>10 9 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.8858849438838661e-004</threshold> + <left_val>0.4681056141853333</left_val> + <right_val>0.5721952915191650</right_val></_></_> + <_> + <!-- tree 70 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>2 2 12 14 -1.</_> + <_>2 2 6 7 2.</_> + <_>8 9 6 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.2143588867038488e-003</threshold> + <left_val>0.5388805866241455</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 2 12 3 -1.</_> + <_>8 2 4 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.4642972797155380e-003</threshold> + <left_val>0.6675537824630737</left_val> + <right_val>0.3448441922664642</right_val></_></_> + <_> + <!-- tree 71 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>18 18 2 2 -1.</_> + <_>18 18 1 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0150443902239203</threshold> + <left_node>1</left_node> + <right_val>0.9239614009857178</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>17 2 3 8 -1.</_> + <_>18 2 1 8 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.6346402056515217e-003</threshold> + <left_val>0.4884896874427795</left_val> + <right_val>0.6306052803993225</right_val></_></_> + <_> + <!-- tree 72 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 18 2 2 -1.</_> + <_>1 18 1 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.3895121305249631e-004</threshold> + <left_node>1</left_node> + <right_val>0.3997431099414825</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 11 2 6 -1.</_> + <_>6 14 2 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.1157610171940178e-004</threshold> + <left_val>0.5663982033729553</left_val> + <right_val>0.3972980976104736</right_val></_></_> + <_> + <!-- tree 73 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>13 10 5 6 -1.</_> + <_>13 12 5 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0275149494409561</threshold> + <left_node>1</left_node> + <right_val>0.5201063752174377</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 8 15 3 -1.</_> + <_>5 9 15 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0516030602157116</threshold> + <left_val>0.5140730142593384</left_val> + <right_val>0.1245130971074104</right_val></_></_> + <_> + <!-- tree 74 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>2 10 5 6 -1.</_> + <_>2 12 5 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.7510651163756847e-003</threshold> + <left_node>1</left_node> + <right_val>0.3802095055580139</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 8 15 3 -1.</_> + <_>0 9 15 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.1457639522850513e-003</threshold> + <left_val>0.3309448063373566</left_val> + <right_val>0.5474538803100586</right_val></_></_> + <_> + <!-- tree 75 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>16 2 3 1 -1.</_> + <_>17 2 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.8178009930998087e-004</threshold> + <left_node>1</left_node> + <right_val>0.4892601966857910</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>17 4 3 2 -1.</_> + <_>18 4 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-9.3638541875407100e-004</threshold> + <left_val>0.5937399268150330</left_val> + <right_val>0.4664669036865234</right_val></_></_> + <_> + <!-- tree 76 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 8 8 12 -1.</_> + <_>0 8 4 6 2.</_> + <_>4 14 4 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0416674911975861</threshold> + <left_node>1</left_node> + <right_val>0.7021353244781494</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 7 8 6 -1.</_> + <_>1 7 4 3 2.</_> + <_>5 10 4 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.7763780243694782e-003</threshold> + <left_val>0.3222751021385193</left_val> + <right_val>0.5068395137786865</right_val></_></_> + <_> + <!-- tree 77 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>14 1 6 2 -1.</_> + <_>16 1 2 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.9170580673962831e-003</threshold> + <left_node>1</left_node> + <right_val>0.4717701077461243</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>15 0 4 4 -1.</_> + <_>17 0 2 2 2.</_> + <_>15 2 2 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.2789530814625323e-004</threshold> + <left_val>0.4509383141994476</left_val> + <right_val>0.5651162862777710</right_val></_></_></trees> + <stage_threshold>38.2360382080078130</stage_threshold> + <parent>14</parent> + <next>-1</next></_> + <_> + <!-- stage 16 --> + <trees> + <_> + <!-- tree 0 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 1 4 11 -1.</_> + <_>3 1 2 11 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0117298001423478</threshold> + <left_val>0.3805224895477295</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 5 1 8 -1.</_> + <_>5 9 1 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.1712179984897375e-003</threshold> + <left_val>0.3140017986297607</left_val> + <right_val>0.6858146190643311</right_val></_></_> + <_> + <!-- tree 1 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 7 6 1 -1.</_> + <_>9 7 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.3555096536874771e-003</threshold> + <left_node>1</left_node> + <right_val>0.6834673285484314</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 7 12 2 -1.</_> + <_>8 7 4 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.6570610459893942e-003</threshold> + <left_val>0.2992472946643829</left_val> + <right_val>0.5475677847862244</right_val></_></_> + <_> + <!-- tree 2 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 4 4 4 -1.</_> + <_>8 6 4 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.3387809740379453e-003</threshold> + <left_node>1</left_node> + <right_val>0.2941406965255737</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>2 4 9 1 -1.</_> + <_>5 4 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.7580550047568977e-004</threshold> + <left_val>0.3896977901458740</left_val> + <right_val>0.5872970819473267</right_val></_></_> + <_> + <!-- tree 3 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 12 2 8 -1.</_> + <_>9 16 2 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.9473248869180679e-003</threshold> + <left_val>0.3576571941375732</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 8 14 12 -1.</_> + <_>3 14 14 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.3220899105072021e-003</threshold> + <left_val>0.5232400894165039</left_val> + <right_val>0.3231087923049927</right_val></_></_> + <_> + <!-- tree 4 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 13 7 3 -1.</_> + <_>6 14 7 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.4366689659655094e-003</threshold> + <left_node>1</left_node> + <right_val>0.6715673208236694</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 9 6 3 -1.</_> + <_>7 9 2 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.1322889369912446e-004</threshold> + <left_val>0.5470541715621948</left_val> + <right_val>0.3863396048545837</right_val></_></_> + <_> + <!-- tree 5 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 1 6 3 -1.</_> + <_>12 2 6 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.8024631366133690e-003</threshold> + <left_val>0.2771460115909576</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 12 6 2 -1.</_> + <_>8 13 6 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.6611228501424193e-004</threshold> + <left_val>0.4689136147499085</left_val> + <right_val>0.5851963758468628</right_val></_></_> + <_> + <!-- tree 6 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 2 18 2 -1.</_> + <_>0 2 9 1 2.</_> + <_>9 3 9 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-9.2346500605344772e-003</threshold> + <left_val>0.2704397141933441</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 10 3 6 -1.</_> + <_>6 13 3 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.4676499631605111e-005</threshold> + <left_val>0.5622550249099731</left_val> + <right_val>0.3579317033290863</right_val></_></_> + <_> + <!-- tree 7 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>14 0 6 6 -1.</_> + <_>14 0 3 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.7007937729358673e-003</threshold> + <left_val>0.4173871874809265</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>15 0 5 8 -1.</_> + <_>15 4 5 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.5320650786161423e-003</threshold> + <left_val>0.4195013046264648</left_val> + <right_val>0.5549468994140625</right_val></_></_> + <_> + <!-- tree 8 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 16 6 4 -1.</_> + <_>9 16 2 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0216164104640484</threshold> + <left_node>1</left_node> + <right_val>0.2857390940189362</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>2 11 14 4 -1.</_> + <_>2 11 7 2 2.</_> + <_>9 13 7 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.4567608963698149e-003</threshold> + <left_val>0.6024532914161682</left_val> + <right_val>0.4377507865428925</right_val></_></_> + <_> + <!-- tree 9 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>14 10 6 10 -1.</_> + <_>14 10 3 10 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0229143202304840</threshold> + <left_val>0.4689350128173828</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 8 10 12 -1.</_> + <_>14 8 5 6 2.</_> + <_>9 14 5 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.4328910987824202e-003</threshold> + <left_val>0.4664604961872101</left_val> + <right_val>0.5762562155723572</right_val></_></_> + <_> + <!-- tree 10 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 10 6 10 -1.</_> + <_>3 10 3 10 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.6510833352804184e-003</threshold> + <left_val>0.6381739974021912</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 8 10 12 -1.</_> + <_>1 8 5 6 2.</_> + <_>6 14 5 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.4510039472952485e-003</threshold> + <left_val>0.3711487948894501</left_val> + <right_val>0.5530750751495361</right_val></_></_> + <_> + <!-- tree 11 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 3 6 1 -1.</_> + <_>11 3 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.8191719949245453e-003</threshold> + <left_val>0.5264362096786499</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 4 6 3 -1.</_> + <_>9 4 2 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.0798550394829363e-004</threshold> + <left_val>0.3730512857437134</left_val> + <right_val>0.5445731282234192</right_val></_></_> + <_> + <!-- tree 12 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 3 6 1 -1.</_> + <_>7 3 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.9962218143045902e-003</threshold> + <left_val>0.2438170015811920</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 5 6 3 -1.</_> + <_>6 5 2 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.5010139577498194e-005</threshold> + <left_val>0.5324671268463135</left_val> + <right_val>0.3682988882064819</right_val></_></_> + <_> + <!-- tree 13 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 16 3 3 -1.</_> + <_>9 17 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.2428788729012012e-003</threshold> + <left_val>0.6481474041938782</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 14 6 3 -1.</_> + <_>8 15 6 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.1374982148408890e-003</threshold> + <left_val>0.4896158874034882</left_val> + <right_val>0.6558843255043030</right_val></_></_> + <_> + <!-- tree 14 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 0 8 12 -1.</_> + <_>6 0 4 6 2.</_> + <_>10 6 4 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.8254585862159729e-003</threshold> + <left_node>1</left_node> + <right_val>0.3613870143890381</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 12 2 3 -1.</_> + <_>4 13 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.4092212384566665e-004</threshold> + <left_val>0.5502895712852478</left_val> + <right_val>0.3632518053054810</right_val></_></_> + <_> + <!-- tree 15 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 16 6 3 -1.</_> + <_>12 17 6 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0125033501535654</threshold> + <left_val>0.2261132001876831</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 12 7 2 -1.</_> + <_>7 13 7 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.6759645491838455e-003</threshold> + <left_val>0.4987890124320984</left_val> + <right_val>0.6847196221351624</right_val></_></_> + <_> + <!-- tree 16 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>2 16 6 3 -1.</_> + <_>2 17 6 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0104167601093650</threshold> + <left_val>0.2446299046278000</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 7 16 6 -1.</_> + <_>0 10 16 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.7432460337877274e-003</threshold> + <left_val>0.3511525094509125</left_val> + <right_val>0.5399826765060425</right_val></_></_> + <_> + <!-- tree 17 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 7 3 3 -1.</_> + <_>10 7 1 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.2385691776871681e-003</threshold> + <left_val>0.6823673248291016</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 7 3 5 -1.</_> + <_>10 7 1 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0183258708566427</threshold> + <left_val>0.4891580045223236</left_val> + <right_val>0.7135618925094605</right_val></_></_> + <_> + <!-- tree 18 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 5 20 10 -1.</_> + <_>0 5 10 5 2.</_> + <_>10 10 10 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0243345405906439</threshold> + <left_val>0.3522521853446960</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 1 4 2 -1.</_> + <_>5 1 2 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.6469361404888332e-004</threshold> + <left_val>0.4049868881702423</left_val> + <right_val>0.5515825748443604</right_val></_></_> + <_> + <!-- tree 19 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 6 8 10 -1.</_> + <_>11 6 4 5 2.</_> + <_>7 11 4 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.4260009415447712e-003</threshold> + <left_node>1</left_node> + <right_val>0.4126769900321960</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>17 6 3 2 -1.</_> + <_>17 7 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.5827318895608187e-003</threshold> + <left_val>0.2899428904056549</left_val> + <right_val>0.5386431813240051</right_val></_></_> + <_> + <!-- tree 20 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 6 8 10 -1.</_> + <_>5 6 4 5 2.</_> + <_>9 11 4 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.0545699624344707e-003</threshold> + <left_node>1</left_node> + <right_val>0.3771344125270844</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 12 10 6 -1.</_> + <_>5 14 10 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-9.1257691383361816e-004</threshold> + <left_val>0.5827386975288391</left_val> + <right_val>0.4267556965351105</right_val></_></_> + <_> + <!-- tree 21 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 7 3 3 -1.</_> + <_>10 7 1 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.6589010376483202e-003</threshold> + <left_val>0.4688124954700470</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 3 2 6 -1.</_> + <_>11 3 1 3 2.</_> + <_>10 6 1 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.8598358407616615e-003</threshold> + <left_val>0.4853922128677368</left_val> + <right_val>0.6163644790649414</right_val></_></_> + <_> + <!-- tree 22 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 4 3 3 -1.</_> + <_>0 5 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.0638676881790161e-003</threshold> + <left_node>1</left_node> + <right_val>0.1749195009469986</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 16 8 4 -1.</_> + <_>3 16 4 2 2.</_> + <_>7 18 4 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.5898370705544949e-003</threshold> + <left_val>0.6826189756393433</left_val> + <right_val>0.4894070029258728</right_val></_></_> + <_> + <!-- tree 23 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 13 5 2 -1.</_> + <_>8 14 5 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.6368070868775249e-004</threshold> + <left_val>0.4614596068859100</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 7 4 12 -1.</_> + <_>8 11 4 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0625949501991272</threshold> + <left_val>0.5183017253875732</left_val> + <right_val>0.2686696052551270</right_val></_></_> + <_> + <!-- tree 24 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 9 2 2 -1.</_> + <_>6 9 1 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.9753207713365555e-003</threshold> + <left_val>0.1758466958999634</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 15 2 3 -1.</_> + <_>9 16 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.0880119409412146e-003</threshold> + <left_val>0.6369382143020630</left_val> + <right_val>0.4930044114589691</right_val></_></_> + <_> + <!-- tree 25 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>13 9 2 3 -1.</_> + <_>13 9 1 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.5644511748105288e-004</threshold> + <left_node>1</left_node> + <right_val>0.4139398932456970</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>14 0 6 17 -1.</_> + <_>16 0 2 17 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0317214615643024</threshold> + <left_val>0.6045557260513306</left_val> + <right_val>0.4816364049911499</right_val></_></_> + <_> + <!-- tree 26 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 10 2 2 -1.</_> + <_>6 10 1 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.2898689601570368e-003</threshold> + <left_val>0.5450810790061951</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>2 9 9 1 -1.</_> + <_>5 9 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.8405163735151291e-003</threshold> + <left_val>0.2924000918865204</left_val> + <right_val>0.6699606180191040</right_val></_></_> + <_> + <!-- tree 27 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 11 2 3 -1.</_> + <_>9 12 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.2237089686095715e-003</threshold> + <left_node>1</left_node> + <right_val>0.6282836794853210</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 11 6 3 -1.</_> + <_>7 12 6 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.4232585504651070e-003</threshold> + <left_val>0.5986570119857788</left_val> + <right_val>0.4852580130100250</right_val></_></_> + <_> + <!-- tree 28 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 6 3 2 -1.</_> + <_>0 7 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.2726322105154395e-004</threshold> + <left_val>0.3340049088001251</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 0 6 1 -1.</_> + <_>9 0 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.6842931769788265e-003</threshold> + <left_val>0.5168923735618591</left_val> + <right_val>0.2679480016231537</right_val></_></_> + <_> + <!-- tree 29 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 16 3 3 -1.</_> + <_>9 17 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.0379579616710544e-003</threshold> + <left_val>0.5925791859626770</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>2 13 17 6 -1.</_> + <_>2 16 17 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.1342730447649956e-003</threshold> + <left_val>0.5437728166580200</left_val> + <right_val>0.4346800148487091</right_val></_></_> + <_> + <!-- tree 30 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 3 3 7 -1.</_> + <_>2 3 1 7 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.4971119817346334e-003</threshold> + <left_val>0.4129500985145569</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 1 6 4 -1.</_> + <_>3 1 2 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.5762320253998041e-003</threshold> + <left_val>0.4522874057292938</left_val> + <right_val>0.6556292176246643</right_val></_></_> + <_> + <!-- tree 31 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>14 1 6 5 -1.</_> + <_>14 1 3 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.7496247142553329e-003</threshold> + <left_val>0.4532034099102020</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>13 2 3 2 -1.</_> + <_>13 3 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.5103599121794105e-004</threshold> + <left_val>0.3785983920097351</left_val> + <right_val>0.5416975021362305</right_val></_></_> + <_> + <!-- tree 32 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 1 6 5 -1.</_> + <_>3 1 3 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0173255708068609</threshold> + <left_val>0.6884248256683350</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>2 3 2 6 -1.</_> + <_>2 5 2 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.3266440778970718e-003</threshold> + <left_val>0.3091326057910919</left_val> + <right_val>0.5243654847145081</right_val></_></_> + <_> + <!-- tree 33 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 10 3 2 -1.</_> + <_>9 11 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.5157909729168750e-005</threshold> + <left_val>0.4765793979167938</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 13 4 3 -1.</_> + <_>8 14 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.8041470320895314e-003</threshold> + <left_val>0.4725385904312134</left_val> + <right_val>0.5716555118560791</right_val></_></_> + <_> + <!-- tree 34 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 3 3 1 -1.</_> + <_>7 3 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.0691560823470354e-003</threshold> + <left_node>1</left_node> + <right_val>0.2143359929323196</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 2 3 12 -1.</_> + <_>8 6 3 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.2225510444259271e-005</threshold> + <left_val>0.5653210282325745</left_val> + <right_val>0.4385111033916473</right_val></_></_> + <_> + <!-- tree 35 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>11 12 1 2 -1.</_> + <_>11 13 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.0072169970953837e-004</threshold> + <left_node>1</left_node> + <right_val>0.5924776196479797</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>11 12 2 2 -1.</_> + <_>12 12 1 1 2.</_> + <_>11 13 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.3573700562119484e-004</threshold> + <left_val>0.4573448896408081</left_val> + <right_val>0.5769382715225220</right_val></_></_> + <_> + <!-- tree 36 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 5 2 2 -1.</_> + <_>5 6 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.2137878527864814e-004</threshold> + <left_node>1</left_node> + <right_val>0.5992609262466431</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 4 1 3 -1.</_> + <_>5 5 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.0316581251099706e-004</threshold> + <left_val>0.3610081076622009</left_val> + <right_val>0.5049325823783875</right_val></_></_> + <_> + <!-- tree 37 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 11 16 4 -1.</_> + <_>11 11 8 2 2.</_> + <_>3 13 8 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0395824797451496</threshold> + <left_node>1</left_node> + <right_val>0.1538489013910294</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 10 20 3 -1.</_> + <_>0 11 20 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0475196801126003</threshold> + <left_val>0.5216140747070313</left_val> + <right_val>0.1428391039371491</right_val></_></_> + <_> + <!-- tree 38 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 11 16 4 -1.</_> + <_>1 11 8 2 2.</_> + <_>9 13 8 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0188717599958181</threshold> + <left_node>1</left_node> + <right_val>0.2825506925582886</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 2 4 2 -1.</_> + <_>4 3 4 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.9876459049992263e-004</threshold> + <left_val>0.4035016894340515</left_val> + <right_val>0.5437793135643005</right_val></_></_> + <_> + <!-- tree 39 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 6 2 2 -1.</_> + <_>13 6 1 1 2.</_> + <_>12 7 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.6556600136682391e-004</threshold> + <left_val>0.4668996930122376</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 11 6 6 -1.</_> + <_>12 13 6 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.7090610973536968e-003</threshold> + <left_val>0.5331354737281799</left_val> + <right_val>0.4136571884155273</right_val></_></_> + <_> + <!-- tree 40 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 6 2 2 -1.</_> + <_>6 6 1 1 2.</_> + <_>7 7 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.8931160448119044e-003</threshold> + <left_val>0.7155163288116455</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 4 4 16 -1.</_> + <_>8 4 2 16 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0130569497123361</threshold> + <left_val>0.3117899894714356</left_val> + <right_val>0.5208439826965332</right_val></_></_> + <_> + <!-- tree 41 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>11 18 3 2 -1.</_> + <_>11 19 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.9484119547996670e-004</threshold> + <left_node>1</left_node> + <right_val>0.4637658894062042</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 17 6 2 -1.</_> + <_>12 17 3 1 2.</_> + <_>9 18 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.5093220099515747e-005</threshold> + <left_val>0.4561653137207031</left_val> + <right_val>0.5445234179496765</right_val></_></_> + <_> + <!-- tree 42 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>2 13 5 2 -1.</_> + <_>2 14 5 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.1617960202274844e-006</threshold> + <left_node>1</left_node> + <right_val>0.4193108081817627</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 15 2 2 -1.</_> + <_>3 16 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.0164679628796875e-004</threshold> + <left_val>0.5966237783432007</left_val> + <right_val>0.4100500047206879</right_val></_></_> + <_> + <!-- tree 43 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 7 3 3 -1.</_> + <_>10 7 1 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.4195181690156460e-003</threshold> + <left_val>0.4845055937767029</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 6 2 6 -1.</_> + <_>9 6 1 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.3984181508421898e-003</threshold> + <left_val>0.6206846237182617</left_val> + <right_val>0.4931209087371826</right_val></_></_> + <_> + <!-- tree 44 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 14 7 6 -1.</_> + <_>1 16 7 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.8031201846897602e-003</threshold> + <left_node>1</left_node> + <right_val>0.5282462835311890</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 1 2 11 -1.</_> + <_>9 1 1 11 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0107314297929406</threshold> + <left_val>0.9104834198951721</left_val> + <right_val>0.3455922007560730</right_val></_></_> + <_> + <!-- tree 45 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 7 2 4 -1.</_> + <_>9 7 1 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.4246780192479491e-003</threshold> + <left_val>0.4708554148674011</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>11 10 2 1 -1.</_> + <_>11 10 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.2717568147927523e-005</threshold> + <left_val>0.5651623010635376</left_val> + <right_val>0.4731023907661438</right_val></_></_> + <_> + <!-- tree 46 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 3 3 9 -1.</_> + <_>1 3 1 9 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.4803409837186337e-003</threshold> + <left_node>1</left_node> + <right_val>0.6175886988639832</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 3 3 6 -1.</_> + <_>0 5 3 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.0789140146225691e-003</threshold> + <left_val>0.5139533281326294</left_val> + <right_val>0.3423087894916534</right_val></_></_> + <_> + <!-- tree 47 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>11 15 2 2 -1.</_> + <_>12 15 1 1 2.</_> + <_>11 16 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.1310289846733212e-003</threshold> + <left_node>1</left_node> + <right_val>0.4918282032012940</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>11 14 2 2 -1.</_> + <_>12 14 1 1 2.</_> + <_>11 15 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.0410690447315574e-003</threshold> + <left_val>0.5942087173461914</left_val> + <right_val>0.4923042953014374</right_val></_></_> + <_> + <!-- tree 48 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 15 2 2 -1.</_> + <_>7 15 1 1 2.</_> + <_>8 16 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.1648540385067463e-003</threshold> + <left_node>1</left_node> + <right_val>0.6405271887779236</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 14 2 2 -1.</_> + <_>7 14 1 1 2.</_> + <_>8 15 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.0057362103834748e-004</threshold> + <left_val>0.4504396915435791</left_val> + <right_val>0.6192076802253723</right_val></_></_> + <_> + <!-- tree 49 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 13 4 6 -1.</_> + <_>10 13 2 3 2.</_> + <_>8 16 2 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.8781538866460323e-003</threshold> + <left_val>0.5374813079833984</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>2 14 16 4 -1.</_> + <_>10 14 8 2 2.</_> + <_>2 16 8 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0352839007973671</threshold> + <left_val>0.2247101068496704</left_val> + <right_val>0.5217170715332031</right_val></_></_> + <_> + <!-- tree 50 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 8 2 2 -1.</_> + <_>9 9 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.3320200378075242e-003</threshold> + <left_val>0.2554703056812286</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 7 5 3 -1.</_> + <_>7 8 5 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.3177571129053831e-003</threshold> + <left_val>0.3792515993118286</left_val> + <right_val>0.5243226885795593</right_val></_></_> + <_> + <!-- tree 51 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 5 6 2 -1.</_> + <_>9 5 2 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.1332940377760679e-004</threshold> + <left_val>0.3860337138175964</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 1 6 18 -1.</_> + <_>11 1 2 18 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0134679004549980</threshold> + <left_val>0.5380687713623047</left_val> + <right_val>0.4178363978862763</right_val></_></_> + <_> + <!-- tree 52 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 6 3 4 -1.</_> + <_>9 6 1 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.2829169863834977e-003</threshold> + <left_val>0.6133623123168945</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 5 2 4 -1.</_> + <_>8 5 1 2 2.</_> + <_>9 7 1 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.1571638323366642e-004</threshold> + <left_val>0.4028537869453430</left_val> + <right_val>0.5536851882934570</right_val></_></_> + <_> + <!-- tree 53 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 13 2 6 -1.</_> + <_>10 13 1 3 2.</_> + <_>9 16 1 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.9254198782145977e-003</threshold> + <left_val>0.5279921293258667</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>11 0 3 18 -1.</_> + <_>12 0 1 18 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0337805896997452</threshold> + <left_val>0.2334675043821335</left_val> + <right_val>0.5175911784172058</right_val></_></_> + <_> + <!-- tree 54 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 0 3 18 -1.</_> + <_>7 0 1 18 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0378537215292454</threshold> + <left_val>0.1074853017926216</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 15 4 2 -1.</_> + <_>7 15 2 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.0752900531515479e-004</threshold> + <left_val>0.5345929861068726</left_val> + <right_val>0.4198938012123108</right_val></_></_> + <_> + <!-- tree 55 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 9 18 1 -1.</_> + <_>7 9 6 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.1193809118121862e-003</threshold> + <left_val>0.3855825066566467</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 0 20 3 -1.</_> + <_>0 1 20 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0157149694859982</threshold> + <left_val>0.3335190117359161</left_val> + <right_val>0.5263202190399170</right_val></_></_> + <_> + <!-- tree 56 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 6 2 4 -1.</_> + <_>10 6 1 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.8525702701881528e-004</threshold> + <left_val>0.5860397219657898</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 10 6 2 -1.</_> + <_>8 10 2 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.8750501223839819e-004</threshold> + <left_val>0.5437784790992737</left_val> + <right_val>0.3716104924678803</right_val></_></_> + <_> + <!-- tree 57 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 7 20 1 -1.</_> + <_>0 7 10 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0280168596655130</threshold> + <left_node>1</left_node> + <right_val>0.3330754935741425</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>11 3 5 4 -1.</_> + <_>11 5 5 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.9018839811906219e-003</threshold> + <left_val>0.5366597771644592</left_val> + <right_val>0.4693793952465057</right_val></_></_> + <_> + <!-- tree 58 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 7 10 1 -1.</_> + <_>10 7 5 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0206475593149662</threshold> + <left_node>1</left_node> + <right_val>0.1006956025958061</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 10 3 3 -1.</_> + <_>8 11 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.3002571910619736e-003</threshold> + <left_val>0.4816035926342011</left_val> + <right_val>0.6215677261352539</right_val></_></_> + <_> + <!-- tree 59 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>2 0 16 8 -1.</_> + <_>10 0 8 4 2.</_> + <_>2 4 8 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0134591404348612</threshold> + <left_val>0.5461953878402710</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>11 0 9 10 -1.</_> + <_>11 5 9 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0103200403973460</threshold> + <left_val>0.4578453004360199</left_val> + <right_val>0.5419309735298157</right_val></_></_> + <_> + <!-- tree 60 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 2 8 18 -1.</_> + <_>4 2 4 18 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.3199074864387512</threshold> + <left_node>1</left_node> + <right_val>0.2008046954870224</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 0 2 6 -1.</_> + <_>0 2 2 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.2198798665776849e-004</threshold> + <left_val>0.5193281173706055</left_val> + <right_val>0.3912194073200226</right_val></_></_> + <_> + <!-- tree 61 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 0 9 2 -1.</_> + <_>6 1 9 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.1852539288811386e-004</threshold> + <left_val>0.4299744069576263</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 1 12 2 -1.</_> + <_>4 2 12 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.5891108564101160e-004</threshold> + <left_val>0.4344502985477448</left_val> + <right_val>0.5531973838806152</right_val></_></_> + <_> + <!-- tree 62 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>2 1 16 14 -1.</_> + <_>2 8 16 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.2099243998527527</threshold> + <left_val>0.1075721010565758</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 1 8 12 -1.</_> + <_>5 7 8 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.9328152090311050e-003</threshold> + <left_val>0.5762796998023987</left_val> + <right_val>0.4574643969535828</right_val></_></_> + <_> + <!-- tree 63 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 11 2 2 -1.</_> + <_>9 12 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.3409130517393351e-003</threshold> + <left_node>1</left_node> + <right_val>0.7476807832717896</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 10 5 6 -1.</_> + <_>9 12 5 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.7120270319283009e-003</threshold> + <left_val>0.5261765122413635</left_val> + <right_val>0.4505550861358643</right_val></_></_> + <_> + <!-- tree 64 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 0 13 8 -1.</_> + <_>3 4 13 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0287131909281015</threshold> + <left_val>0.4407103061676025</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 7 5 8 -1.</_> + <_>6 11 5 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.6156550738960505e-003</threshold> + <left_val>0.4244270920753479</left_val> + <right_val>0.6892976760864258</right_val></_></_> + <_> + <!-- tree 65 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 5 2 3 -1.</_> + <_>9 6 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0135589698329568</threshold> + <left_val>0.1252267956733704</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 8 8 3 -1.</_> + <_>6 9 8 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.0331799644045532e-004</threshold> + <left_val>0.4077791869640350</left_val> + <right_val>0.5442817807197571</right_val></_></_> + <_> + <!-- tree 66 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>2 2 7 6 -1.</_> + <_>2 5 7 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.5601762142032385e-004</threshold> + <left_val>0.5378003716468811</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>2 1 14 4 -1.</_> + <_>2 1 7 2 2.</_> + <_>9 3 7 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.4025330785661936e-003</threshold> + <left_val>0.3166579902172089</left_val> + <right_val>0.5285738110542297</right_val></_></_> + <_> + <!-- tree 67 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>11 14 1 3 -1.</_> + <_>11 15 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.4089901018887758e-003</threshold> + <left_node>1</left_node> + <right_val>0.4905214905738831</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 15 8 2 -1.</_> + <_>6 16 8 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.0019602319225669e-004</threshold> + <left_val>0.4522736072540283</left_val> + <right_val>0.5580614209175110</right_val></_></_> + <_> + <!-- tree 68 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 14 1 3 -1.</_> + <_>8 15 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.1901070140302181e-003</threshold> + <left_node>1</left_node> + <right_val>0.6612681746482849</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 11 2 8 -1.</_> + <_>8 15 2 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.3745369873940945e-003</threshold> + <left_val>0.5107765197753906</left_val> + <right_val>0.3386929929256439</right_val></_></_> + <_> + <!-- tree 69 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 15 8 2 -1.</_> + <_>6 16 8 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.0019602319225669e-004</threshold> + <left_node>1</left_node> + <right_val>0.5707560181617737</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 16 8 3 -1.</_> + <_>7 17 8 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0173460692167282</threshold> + <left_val>0.5016021132469177</left_val> + <right_val>0.6306459903717041</right_val></_></_> + <_> + <!-- tree 70 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 16 2 2 -1.</_> + <_>0 17 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.9568449351936579e-003</threshold> + <left_val>0.3017806112766266</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 16 8 4 -1.</_> + <_>1 16 4 2 2.</_> + <_>5 18 4 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0112290196120739</threshold> + <left_val>0.6293851137161255</left_val> + <right_val>0.4520488977432251</right_val></_></_> + <_> + <!-- tree 71 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>2 9 16 3 -1.</_> + <_>2 10 16 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.6608388870954514e-003</threshold> + <left_val>0.3344007134437561</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>13 11 2 4 -1.</_> + <_>13 11 1 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0116151003167033</threshold> + <left_val>0.2825379073619843</left_val> + <right_val>0.5150970816612244</right_val></_></_> + <_> + <!-- tree 72 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 13 16 6 -1.</_> + <_>0 15 16 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0952486023306847</threshold> + <left_val>0.1398265063762665</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 11 2 4 -1.</_> + <_>6 11 1 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.3701781220734119e-003</threshold> + <left_val>0.5293998718261719</left_val> + <right_val>0.2331728041172028</right_val></_></_> + <_> + <!-- tree 73 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>18 2 2 18 -1.</_> + <_>19 2 1 9 2.</_> + <_>18 11 1 9 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0149539001286030</threshold> + <left_node>1</left_node> + <right_val>0.4940465986728668</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>19 7 1 9 -1.</_> + <_>19 10 1 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.7038792874664068e-004</threshold> + <left_val>0.5466570854187012</left_val> + <right_val>0.4626767933368683</right_val></_></_> + <_> + <!-- tree 74 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 2 2 18 -1.</_> + <_>0 2 1 9 2.</_> + <_>1 11 1 9 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.8516198769211769e-003</threshold> + <left_node>1</left_node> + <right_val>0.6270040869712830</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 7 1 9 -1.</_> + <_>0 10 1 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.1150549582671374e-004</threshold> + <left_val>0.5508140921592712</left_val> + <right_val>0.4061872959136963</right_val></_></_> + <_> + <!-- tree 75 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>14 12 2 2 -1.</_> + <_>14 13 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.9679190346505493e-006</threshold> + <left_node>1</left_node> + <right_val>0.4096567928791046</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>11 14 2 3 -1.</_> + <_>11 15 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.9677387839183211e-004</threshold> + <left_val>0.5615556836128235</left_val> + <right_val>0.4666886031627655</right_val></_></_> + <_> + <!-- tree 76 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 8 6 2 -1.</_> + <_>7 9 6 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0194594804197550</threshold> + <left_node>1</left_node> + <right_val>0.2311480939388275</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 12 4 6 -1.</_> + <_>7 12 2 3 2.</_> + <_>9 15 2 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0111608300358057</threshold> + <left_val>0.3087011873722076</left_val> + <right_val>0.5514662265777588</right_val></_></_> + <_> + <!-- tree 77 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 13 5 3 -1.</_> + <_>8 14 5 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0140561498701572</threshold> + <left_node>1</left_node> + <right_val>0.7005056142807007</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 14 2 2 -1.</_> + <_>13 14 1 1 2.</_> + <_>12 15 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.2958350493572652e-004</threshold> + <left_val>0.5797485709190369</left_val> + <right_val>0.4691650867462158</right_val></_></_> + <_> + <!-- tree 78 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 13 6 3 -1.</_> + <_>7 14 6 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.4636420682072639e-003</threshold> + <left_val>0.5928595066070557</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 13 5 2 -1.</_> + <_>7 14 5 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.8881669247057289e-005</threshold> + <left_val>0.3741397857666016</left_val> + <right_val>0.5170168876647949</right_val></_></_> + <_> + <!-- tree 79 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>2 10 16 4 -1.</_> + <_>10 10 8 2 2.</_> + <_>2 12 8 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.6343429498374462e-003</threshold> + <left_val>0.5414987802505493</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 0 6 6 -1.</_> + <_>9 0 2 6 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0452634096145630</threshold> + <left_val>0.5180327296257019</left_val> + <right_val>0.1529684066772461</right_val></_></_> + <_> + <!-- tree 80 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 1 6 3 -1.</_> + <_>7 2 6 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.0646127462387085e-003</threshold> + <left_val>0.2515468001365662</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 12 6 2 -1.</_> + <_>0 13 6 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.7389548853971064e-004</threshold> + <left_val>0.5121998786926270</left_val> + <right_val>0.3725948929786682</right_val></_></_> + <_> + <!-- tree 81 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 3 11 2 -1.</_> + <_>6 4 11 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.4877359717502259e-005</threshold> + <left_node>1</left_node> + <right_val>0.5532435774803162</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 0 8 6 -1.</_> + <_>16 0 4 3 2.</_> + <_>12 3 4 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0243211593478918</threshold> + <left_val>0.4960766136646271</left_val> + <right_val>0.5983315110206604</right_val></_></_> + <_> + <!-- tree 82 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 12 1 2 -1.</_> + <_>8 13 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.9931396865285933e-005</threshold> + <left_val>0.4163953065872192</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 8 1 12 -1.</_> + <_>8 12 1 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.6287760119885206e-003</threshold> + <left_val>0.5880144834518433</left_val> + <right_val>0.3399662971496582</right_val></_></_> + <_> + <!-- tree 83 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>11 11 2 2 -1.</_> + <_>12 11 1 1 2.</_> + <_>11 12 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.8190539926290512e-003</threshold> + <left_node>1</left_node> + <right_val>0.7846621274948120</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 7 3 13 -1.</_> + <_>13 7 1 13 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0259891506284475</threshold> + <left_val>0.3288114070892334</left_val> + <right_val>0.5155087709426880</right_val></_></_> + <_> + <!-- tree 84 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 11 2 2 -1.</_> + <_>7 11 1 1 2.</_> + <_>8 12 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.2062400346621871e-003</threshold> + <left_val>0.4596059918403626</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 13 1 3 -1.</_> + <_>3 14 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.5557400183752179e-003</threshold> + <left_val>0.3126986920833588</left_val> + <right_val>0.7183399200439453</right_val></_></_> + <_> + <!-- tree 85 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>10 18 3 2 -1.</_> + <_>11 18 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.2691930644214153e-003</threshold> + <left_node>1</left_node> + <right_val>0.5274006128311157</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>11 11 2 1 -1.</_> + <_>11 11 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.3287249496206641e-004</threshold> + <left_val>0.4878666102886200</left_val> + <right_val>0.5615152716636658</right_val></_></_> + <_> + <!-- tree 86 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 10 5 9 -1.</_> + <_>1 13 5 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.5999699980020523e-003</threshold> + <left_node>1</left_node> + <right_val>0.5160812139511108</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 8 6 4 -1.</_> + <_>6 8 2 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0104961898177862</threshold> + <left_val>0.5701614022254944</left_val> + <right_val>0.3204850852489471</right_val></_></_> + <_> + <!-- tree 87 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>13 12 1 4 -1.</_> + <_>13 14 1 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.4814930182183161e-005</threshold> + <left_val>0.5538837909698486</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>11 3 4 14 -1.</_> + <_>13 3 2 7 2.</_> + <_>11 10 2 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.4287078566849232e-004</threshold> + <left_val>0.5349429249763489</left_val> + <right_val>0.4472151100635529</right_val></_></_> + <_> + <!-- tree 88 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 12 1 4 -1.</_> + <_>6 14 1 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.8891949730459601e-004</threshold> + <left_val>0.5012837052345276</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 3 4 14 -1.</_> + <_>5 3 2 7 2.</_> + <_>7 10 2 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-9.0413521975278854e-003</threshold> + <left_val>0.2562935948371887</left_val> + <right_val>0.4503383040428162</right_val></_></_> + <_> + <!-- tree 89 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>10 18 3 2 -1.</_> + <_>11 18 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.9534705728292465e-003</threshold> + <left_node>1</left_node> + <right_val>0.2630499899387360</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 12 3 3 -1.</_> + <_>9 13 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.7908999472856522e-003</threshold> + <left_val>0.5756508708000183</left_val> + <right_val>0.4854863882064819</right_val></_></_> + <_> + <!-- tree 90 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>2 2 12 6 -1.</_> + <_>2 2 6 3 2.</_> + <_>8 5 6 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.2857100013643503e-003</threshold> + <left_node>1</left_node> + <right_val>0.4084751904010773</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 6 6 2 -1.</_> + <_>9 6 3 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.7063008211553097e-004</threshold> + <left_val>0.4073356091976166</left_val> + <right_val>0.5920240879058838</right_val></_></_></trees> + <stage_threshold>44.6829681396484380</stage_threshold> + <parent>15</parent> + <next>-1</next></_> + <_> + <!-- stage 17 --> + <trees> + <_> + <!-- tree 0 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 0 18 12 -1.</_> + <_>7 0 6 12 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0630219429731369</threshold> + <left_val>0.3419382870197296</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 7 6 4 -1.</_> + <_>5 7 3 2 2.</_> + <_>8 9 3 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.8374609537422657e-003</threshold> + <left_val>0.6829563975334168</left_val> + <right_val>0.4404523074626923</right_val></_></_> + <_> + <!-- tree 1 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 7 10 4 -1.</_> + <_>5 9 10 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0464619509875774</threshold> + <left_val>0.4391745030879974</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 7 6 4 -1.</_> + <_>9 7 2 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0291525404900312</threshold> + <left_val>0.4601063132286072</left_val> + <right_val>0.6357936859130859</right_val></_></_> + <_> + <!-- tree 2 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 5 2 2 -1.</_> + <_>9 6 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.4000290320836939e-005</threshold> + <left_node>1</left_node> + <right_val>0.3730010092258453</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 9 2 2 -1.</_> + <_>9 10 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.2757079675793648e-003</threshold> + <left_val>0.3093824088573456</left_val> + <right_val>0.5901370048522949</right_val></_></_> + <_> + <!-- tree 3 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 17 8 3 -1.</_> + <_>6 18 8 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.3596529606729746e-003</threshold> + <left_val>0.4337565004825592</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 17 6 2 -1.</_> + <_>12 17 3 1 2.</_> + <_>9 18 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.7991929780691862e-004</threshold> + <left_val>0.4217503964900971</left_val> + <right_val>0.5846847891807556</right_val></_></_> + <_> + <!-- tree 4 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 12 2 2 -1.</_> + <_>4 13 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.4166639630275313e-005</threshold> + <left_node>1</left_node> + <right_val>0.4084691107273102</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 12 9 2 -1.</_> + <_>3 13 9 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.0252390539972112e-005</threshold> + <left_val>0.5087286829948425</left_val> + <right_val>0.7277184128761292</right_val></_></_> + <_> + <!-- tree 5 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 3 6 1 -1.</_> + <_>10 3 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.4320368692278862e-003</threshold> + <left_node>1</left_node> + <right_val>0.2967903017997742</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 3 4 6 -1.</_> + <_>11 3 2 3 2.</_> + <_>9 6 2 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.6682319953106344e-004</threshold> + <left_val>0.4110462963581085</left_val> + <right_val>0.5581219792366028</right_val></_></_> + <_> + <!-- tree 6 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 3 6 5 -1.</_> + <_>3 3 3 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.7436279021203518e-003</threshold> + <left_val>0.4287309944629669</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>2 0 2 18 -1.</_> + <_>2 6 2 6 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.2019240316003561e-003</threshold> + <left_val>0.4266195893287659</left_val> + <right_val>0.6444045901298523</right_val></_></_> + <_> + <!-- tree 7 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>14 2 4 9 -1.</_> + <_>14 5 4 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.7637941790744662e-004</threshold> + <left_node>1</left_node> + <right_val>0.4084824919700623</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 18 3 2 -1.</_> + <_>11 18 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.7901920732110739e-003</threshold> + <left_val>0.3181920945644379</left_val> + <right_val>0.5230693221092224</right_val></_></_> + <_> + <!-- tree 8 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>2 2 4 9 -1.</_> + <_>2 5 4 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.8914109356701374e-003</threshold> + <left_node>1</left_node> + <right_val>0.3548356890678406</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 18 3 2 -1.</_> + <_>8 18 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.6459292061626911e-003</threshold> + <left_val>0.5610597729682922</left_val> + <right_val>0.2693848907947540</right_val></_></_> + <_> + <!-- tree 9 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>10 14 3 3 -1.</_> + <_>10 15 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.8799369037151337e-003</threshold> + <left_val>0.6235408186912537</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 12 2 6 -1.</_> + <_>10 15 2 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0181474704295397</threshold> + <left_val>0.2861981987953186</left_val> + <right_val>0.5226848125457764</right_val></_></_> + <_> + <!-- tree 10 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 5 3 6 -1.</_> + <_>7 7 3 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.1409220314817503e-004</threshold> + <left_node>1</left_node> + <right_val>0.3257833123207092</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 3 6 2 -1.</_> + <_>3 4 6 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.4334272863343358e-004</threshold> + <left_val>0.3882969021797180</left_val> + <right_val>0.5341166257858276</right_val></_></_> + <_> + <!-- tree 11 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 4 7 3 -1.</_> + <_>8 5 7 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.7602489572018385e-003</threshold> + <left_val>0.6353965997695923</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>13 6 2 3 -1.</_> + <_>13 7 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.9730569329112768e-003</threshold> + <left_val>0.5880761146545410</left_val> + <right_val>0.4593090116977692</right_val></_></_> + <_> + <!-- tree 12 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 8 2 12 -1.</_> + <_>8 12 2 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.4565239436924458e-003</threshold> + <left_node>1</left_node> + <right_val>0.3134010136127472</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 4 8 14 -1.</_> + <_>5 4 4 7 2.</_> + <_>9 11 4 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.9392010290175676e-004</threshold> + <left_val>0.5277131795883179</left_val> + <right_val>0.3604106903076172</right_val></_></_> + <_> + <!-- tree 13 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 1 20 8 -1.</_> + <_>10 1 10 4 2.</_> + <_>0 5 10 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0786430165171623</threshold> + <left_val>0.5290341973304749</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 0 12 2 -1.</_> + <_>4 1 12 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.5276869572699070e-003</threshold> + <left_val>0.4654479920864105</left_val> + <right_val>0.6044905185699463</right_val></_></_> + <_> + <!-- tree 14 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 1 20 8 -1.</_> + <_>0 1 10 4 2.</_> + <_>10 5 10 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0787167996168137</threshold> + <left_val>0.2541126906871796</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 0 12 2 -1.</_> + <_>4 1 12 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.7298499159514904e-003</threshold> + <left_val>0.4366919100284576</left_val> + <right_val>0.5822886228561401</right_val></_></_> + <_> + <!-- tree 15 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 5 6 3 -1.</_> + <_>9 5 3 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.2386557692661881e-004</threshold> + <left_node>1</left_node> + <right_val>0.5472692251205444</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 13 10 6 -1.</_> + <_>8 15 10 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0852672308683395</threshold> + <left_val>0.1461607962846756</left_val> + <right_val>0.5181810855865479</right_val></_></_> + <_> + <!-- tree 16 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 5 6 3 -1.</_> + <_>8 5 3 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0409811101853848</threshold> + <left_node>1</left_node> + <right_val>0.1270135045051575</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 3 6 1 -1.</_> + <_>8 3 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.7135749161243439e-003</threshold> + <left_val>0.4832684993743897</left_val> + <right_val>0.2223578989505768</right_val></_></_> + <_> + <!-- tree 17 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>11 18 9 2 -1.</_> + <_>14 18 3 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.8663940764963627e-003</threshold> + <left_val>0.5918928980827332</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>13 11 6 7 -1.</_> + <_>13 11 3 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0145596396178007</threshold> + <left_val>0.4761506915092468</left_val> + <right_val>0.5727223753929138</right_val></_></_> + <_> + <!-- tree 18 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 6 12 10 -1.</_> + <_>4 6 6 5 2.</_> + <_>10 11 6 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0100643103942275</threshold> + <left_val>0.3636730909347534</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 17 3 3 -1.</_> + <_>9 17 1 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.6274080630391836e-003</threshold> + <left_val>0.5271731019020081</left_val> + <right_val>0.2740525007247925</right_val></_></_> + <_> + <!-- tree 19 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>11 18 9 2 -1.</_> + <_>14 18 3 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.3421540390700102e-003</threshold> + <left_val>0.5497784018516541</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>13 11 6 8 -1.</_> + <_>13 11 3 8 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0246864091604948</threshold> + <left_val>0.6059895157814026</left_val> + <right_val>0.4960314035415649</right_val></_></_> + <_> + <!-- tree 20 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 16 2 2 -1.</_> + <_>4 17 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.9456120207905769e-004</threshold> + <left_node>1</left_node> + <right_val>0.3769465088844299</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 15 4 4 -1.</_> + <_>7 17 4 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.1714211218059063e-004</threshold> + <left_val>0.4062362015247345</left_val> + <right_val>0.5668215155601502</right_val></_></_> + <_> + <!-- tree 21 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 4 3 3 -1.</_> + <_>12 5 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.0793990697711706e-003</threshold> + <left_val>0.4618656933307648</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>13 6 2 3 -1.</_> + <_>13 7 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.7982709687203169e-003</threshold> + <left_val>0.4867505133152008</left_val> + <right_val>0.6518449783325195</right_val></_></_> + <_> + <!-- tree 22 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 11 6 1 -1.</_> + <_>7 11 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.2287059982772917e-004</threshold> + <left_val>0.5677595734596252</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 10 3 1 -1.</_> + <_>8 10 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.2623921288177371e-004</threshold> + <left_val>0.3710733950138092</left_val> + <right_val>0.5676605105400085</right_val></_></_> + <_> + <!-- tree 23 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 12 20 4 -1.</_> + <_>0 14 20 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0667926818132401</threshold> + <left_val>0.2511521875858307</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 2 3 2 -1.</_> + <_>10 3 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.4869889710098505e-003</threshold> + <left_val>0.3886750936508179</left_val> + <right_val>0.5262253880500794</right_val></_></_> + <_> + <!-- tree 24 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 4 3 3 -1.</_> + <_>5 5 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.0454870797693729e-003</threshold> + <left_val>0.6557472944259644</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 5 4 3 -1.</_> + <_>5 6 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.8297587782144547e-003</threshold> + <left_val>0.5934106111526489</left_val> + <right_val>0.4285922050476074</right_val></_></_> + <_> + <!-- tree 25 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 8 4 3 -1.</_> + <_>8 9 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.0722599690780044e-003</threshold> + <left_node>1</left_node> + <right_val>0.5426058769226074</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 4 2 12 -1.</_> + <_>10 8 2 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.7901195511221886e-003</threshold> + <left_val>0.5351303219795227</left_val> + <right_val>0.4834277927875519</right_val></_></_> + <_> + <!-- tree 26 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 3 4 3 -1.</_> + <_>0 4 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.1750381030142307e-003</threshold> + <left_val>0.2067168951034546</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 3 2 3 -1.</_> + <_>1 4 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.1251230025663972e-003</threshold> + <left_val>0.5112252235412598</left_val> + <right_val>0.3468714058399200</right_val></_></_> + <_> + <!-- tree 27 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>16 1 4 11 -1.</_> + <_>16 1 2 11 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0106347100809217</threshold> + <left_val>0.4479008018970490</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>18 2 2 16 -1.</_> + <_>19 2 1 8 2.</_> + <_>18 10 1 8 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0117632197216153</threshold> + <left_val>0.6253901720046997</left_val> + <right_val>0.4968987107276917</right_val></_></_> + <_> + <!-- tree 28 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 8 6 12 -1.</_> + <_>3 8 2 12 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0923240631818771</threshold> + <left_node>1</left_node> + <right_val>0.2031303942203522</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 2 6 2 -1.</_> + <_>7 2 3 1 2.</_> + <_>10 3 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.8991080578416586e-003</threshold> + <left_val>0.5618721842765808</left_val> + <right_val>0.4046572148799896</right_val></_></_> + <_> + <!-- tree 29 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 4 8 2 -1.</_> + <_>16 4 4 1 2.</_> + <_>12 5 4 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0105103403329849</threshold> + <left_node>1</left_node> + <right_val>0.4943264126777649</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 6 6 2 -1.</_> + <_>12 6 2 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.4531312566250563e-004</threshold> + <left_val>0.5613427758216858</left_val> + <right_val>0.3845331966876984</right_val></_></_> + <_> + <!-- tree 30 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 4 8 2 -1.</_> + <_>0 4 4 1 2.</_> + <_>4 5 4 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.0041000619530678e-003</threshold> + <left_node>1</left_node> + <right_val>0.7759842276573181</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 3 3 5 -1.</_> + <_>2 3 1 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.8110528625547886e-003</threshold> + <left_val>0.4624733030796051</left_val> + <right_val>0.6286277174949646</right_val></_></_> + <_> + <!-- tree 31 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>16 3 4 6 -1.</_> + <_>16 5 4 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0279185809195042</threshold> + <left_val>0.2409314066171646</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 6 4 3 -1.</_> + <_>8 7 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.1739399526268244e-003</threshold> + <left_val>0.5345504879951477</left_val> + <right_val>0.3507958054542542</right_val></_></_> + <_> + <!-- tree 32 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 14 1 3 -1.</_> + <_>8 15 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.0639587678015232e-003</threshold> + <left_val>0.6647101044654846</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 11 1 2 -1.</_> + <_>4 12 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.0017139185220003e-004</threshold> + <left_val>0.4998509883880615</left_val> + <right_val>0.3022165000438690</right_val></_></_> + <_> + <!-- tree 33 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 14 6 3 -1.</_> + <_>8 15 6 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.9214770291000605e-003</threshold> + <left_node>1</left_node> + <right_val>0.5919150710105896</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 15 7 3 -1.</_> + <_>7 16 7 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0138608301058412</threshold> + <left_val>0.6351767778396606</left_val> + <right_val>0.4993310868740082</right_val></_></_> + <_> + <!-- tree 34 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 12 2 8 -1.</_> + <_>9 16 2 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0230068508535624</threshold> + <left_node>1</left_node> + <right_val>0.1902336031198502</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 6 6 2 -1.</_> + <_>6 6 2 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.3857929734513164e-003</threshold> + <left_val>0.5253369212150574</left_val> + <right_val>0.3985860049724579</right_val></_></_> + <_> + <!-- tree 35 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 7 4 2 -1.</_> + <_>12 8 4 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.2637410545721650e-003</threshold> + <left_val>0.4666104018688202</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 3 13 10 -1.</_> + <_>5 8 13 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0146752102300525</threshold> + <left_val>0.3823164999485016</left_val> + <right_val>0.5326632857322693</right_val></_></_> + <_> + <!-- tree 36 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 7 4 2 -1.</_> + <_>4 8 4 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.9535070061683655e-003</threshold> + <left_val>0.7063655853271484</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 8 16 2 -1.</_> + <_>0 8 8 1 2.</_> + <_>8 9 8 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.7189770005643368e-003</threshold> + <left_val>0.3813462853431702</left_val> + <right_val>0.5246735215187073</right_val></_></_> + <_> + <!-- tree 37 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>11 8 2 5 -1.</_> + <_>11 8 1 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.2484089499339461e-004</threshold> + <left_node>1</left_node> + <right_val>0.4791638851165772</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 0 6 13 -1.</_> + <_>10 0 3 13 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.5248658433556557e-004</threshold> + <left_val>0.4491218030452728</left_val> + <right_val>0.5370901226997376</right_val></_></_> + <_> + <!-- tree 38 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 6 4 2 -1.</_> + <_>1 7 4 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.9034568518400192e-003</threshold> + <left_node>1</left_node> + <right_val>0.2076473981142044</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 3 2 1 -1.</_> + <_>5 3 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.4895649655954912e-005</threshold> + <left_val>0.4447635114192963</left_val> + <right_val>0.5667163133621216</right_val></_></_> + <_> + <!-- tree 39 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>11 8 2 5 -1.</_> + <_>11 8 1 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.7091601300053298e-004</threshold> + <left_val>0.5465071201324463</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 10 4 8 -1.</_> + <_>12 10 2 8 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.3084810022264719e-004</threshold> + <left_val>0.5493261814117432</left_val> + <right_val>0.4580708146095276</right_val></_></_> + <_> + <!-- tree 40 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 8 2 5 -1.</_> + <_>8 8 1 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.3893961487337947e-004</threshold> + <left_val>0.5501571893692017</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 10 4 8 -1.</_> + <_>6 10 2 8 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.3733746830839664e-005</threshold> + <left_val>0.5085790753364563</left_val> + <right_val>0.3305698037147522</right_val></_></_> + <_> + <!-- tree 41 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 7 9 12 -1.</_> + <_>9 7 3 12 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.8991485536098480e-003</threshold> + <left_val>0.4276469051837921</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>11 13 2 3 -1.</_> + <_>11 13 1 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0102533502504230</threshold> + <left_val>0.1123218014836311</left_val> + <right_val>0.5152723193168640</right_val></_></_> + <_> + <!-- tree 42 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 10 6 10 -1.</_> + <_>10 10 3 10 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0596374906599522</threshold> + <left_val>0.7386772036552429</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 11 4 8 -1.</_> + <_>8 11 2 4 2.</_> + <_>10 15 2 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0217071995139122</threshold> + <left_val>0.4996291995048523</left_val> + <right_val>0.1339413970708847</right_val></_></_> + <_> + <!-- tree 43 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>16 1 4 11 -1.</_> + <_>16 1 2 11 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.9107045680284500e-003</threshold> + <left_val>0.4679012000560761</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>18 2 2 4 -1.</_> + <_>18 2 1 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0109983002766967</threshold> + <left_val>0.6928656101226807</left_val> + <right_val>0.5012068152427673</right_val></_></_> + <_> + <!-- tree 44 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 6 6 2 -1.</_> + <_>5 6 3 1 2.</_> + <_>8 7 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.4608891736716032e-004</threshold> + <left_node>1</left_node> + <right_val>0.5833582282066345</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 4 1 3 -1.</_> + <_>5 5 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.9539171373471618e-004</threshold> + <left_val>0.3826391100883484</left_val> + <right_val>0.5566350817680359</right_val></_></_> + <_> + <!-- tree 45 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>11 1 4 14 -1.</_> + <_>11 1 2 14 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0500541292130947</threshold> + <left_node>1</left_node> + <right_val>0.3002721071243286</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 2 12 3 -1.</_> + <_>8 2 4 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.2330660186707973e-003</threshold> + <left_val>0.5908042788505554</left_val> + <right_val>0.5000870823860169</right_val></_></_> + <_> + <!-- tree 46 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 1 4 14 -1.</_> + <_>7 1 2 14 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.6863380335271358e-003</threshold> + <left_val>0.3975034952163696</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 3 6 2 -1.</_> + <_>9 3 2 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.0195849463343620e-003</threshold> + <left_val>0.3697685897350311</left_val> + <right_val>0.5756192803382874</right_val></_></_> + <_> + <!-- tree 47 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>2 0 18 4 -1.</_> + <_>8 0 6 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0202049203217030</threshold> + <left_val>0.6375268101692200</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 5 2 10 -1.</_> + <_>9 10 2 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.1340379025787115e-003</threshold> + <left_val>0.5363265872001648</left_val> + <right_val>0.4433170855045319</right_val></_></_> + <_> + <!-- tree 48 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 6 3 4 -1.</_> + <_>9 6 1 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.8348889425396919e-003</threshold> + <left_val>0.5828999280929565</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 5 9 11 -1.</_> + <_>8 5 3 11 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.9489468112587929e-003</threshold> + <left_val>0.2680670917034149</left_val> + <right_val>0.4642885923385620</right_val></_></_> + <_> + <!-- tree 49 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>10 6 3 5 -1.</_> + <_>11 6 1 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.3030120064504445e-004</threshold> + <left_val>0.5475320219993591</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 9 6 5 -1.</_> + <_>8 9 3 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.0581009127199650e-003</threshold> + <left_val>0.5320833921432495</left_val> + <right_val>0.4646492898464203</right_val></_></_> + <_> + <!-- tree 50 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 6 3 5 -1.</_> + <_>8 6 1 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.1950011402368546e-004</threshold> + <left_val>0.5232744812965393</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 10 6 3 -1.</_> + <_>9 10 3 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.8620947422459722e-004</threshold> + <left_val>0.4935086071491242</left_val> + <right_val>0.3103117942810059</right_val></_></_> + <_> + <!-- tree 51 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>10 0 3 7 -1.</_> + <_>11 0 1 7 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.4936267919838428e-003</threshold> + <left_val>0.2883046865463257</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 3 20 12 -1.</_> + <_>0 9 20 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0156829301267862</threshold> + <left_val>0.3640313148498535</left_val> + <right_val>0.5368754863739014</right_val></_></_> + <_> + <!-- tree 52 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 7 2 2 -1.</_> + <_>10 7 1 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.2649750355631113e-003</threshold> + <left_val>0.6468631029129028</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 9 4 1 -1.</_> + <_>7 9 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.8463930832222104e-004</threshold> + <left_val>0.5259659886360169</left_val> + <right_val>0.3831427991390228</right_val></_></_> + <_> + <!-- tree 53 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>13 13 3 2 -1.</_> + <_>13 14 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.4492390006780624e-003</threshold> + <left_node>1</left_node> + <right_val>0.2086818963289261</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>16 9 4 6 -1.</_> + <_>16 9 2 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0231183208525181</threshold> + <left_val>0.4978533089160919</left_val> + <right_val>0.5961257219314575</right_val></_></_> + <_> + <!-- tree 54 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 15 6 3 -1.</_> + <_>7 16 6 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.0835159812122583e-003</threshold> + <left_node>1</left_node> + <right_val>0.5746421813964844</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 16 7 3 -1.</_> + <_>6 17 7 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.1513150529935956e-003</threshold> + <left_val>0.3586845099925995</left_val> + <right_val>0.5363473892211914</right_val></_></_> + <_> + <!-- tree 55 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>11 14 9 6 -1.</_> + <_>11 16 9 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0361047089099884</threshold> + <left_node>1</left_node> + <right_val>0.2833136916160584</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>19 14 1 3 -1.</_> + <_>19 15 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.6256198654882610e-004</threshold> + <left_val>0.5477722287178040</left_val> + <right_val>0.4110532104969025</right_val></_></_> + <_> + <!-- tree 56 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 9 6 6 -1.</_> + <_>3 9 3 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.4635469783097506e-003</threshold> + <left_val>0.5990386009216309</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 19 9 1 -1.</_> + <_>3 19 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.8796829283237457e-003</threshold> + <left_val>0.5725253224372864</left_val> + <right_val>0.4149512052536011</right_val></_></_> + <_> + <!-- tree 57 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>11 14 9 6 -1.</_> + <_>11 16 9 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.1119500100612640e-003</threshold> + <left_node>1</left_node> + <right_val>0.5396351814270020</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 12 6 6 -1.</_> + <_>12 14 6 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.5932079665362835e-003</threshold> + <left_val>0.5379704236984253</left_val> + <right_val>0.3891302943229675</right_val></_></_> + <_> + <!-- tree 58 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 14 8 6 -1.</_> + <_>1 16 8 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.0014740340411663e-003</threshold> + <left_node>1</left_node> + <right_val>0.3714671134948731</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 1 3 2 -1.</_> + <_>9 1 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.0169539432972670e-004</threshold> + <left_val>0.5529567003250122</left_val> + <right_val>0.3755804896354675</right_val></_></_> + <_> + <!-- tree 59 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>18 2 2 4 -1.</_> + <_>18 2 1 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.6652329191565514e-003</threshold> + <left_node>1</left_node> + <right_val>0.5025773048400879</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>14 0 6 3 -1.</_> + <_>16 0 2 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.7315050829201937e-003</threshold> + <left_val>0.5850322246551514</left_val> + <right_val>0.4617573916912079</right_val></_></_> + <_> + <!-- tree 60 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 2 2 4 -1.</_> + <_>1 2 1 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.3301590224727988e-003</threshold> + <left_node>1</left_node> + <right_val>0.5937700867652893</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 0 6 3 -1.</_> + <_>2 0 2 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.2648240923881531e-003</threshold> + <left_val>0.5645368099212647</left_val> + <right_val>0.3937624990940094</right_val></_></_> + <_> + <!-- tree 61 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 0 3 2 -1.</_> + <_>10 0 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.3251499086618423e-003</threshold> + <left_val>0.5182105898857117</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 1 2 2 -1.</_> + <_>12 1 1 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.0753740575164557e-003</threshold> + <left_val>0.3007416129112244</left_val> + <right_val>0.5196403861045837</right_val></_></_> + <_> + <!-- tree 62 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 0 3 2 -1.</_> + <_>9 0 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.3622138006612659e-004</threshold> + <left_val>0.3697580099105835</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 1 2 2 -1.</_> + <_>7 1 1 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.0082479497650638e-005</threshold> + <left_val>0.4327593147754669</left_val> + <right_val>0.5715808868408203</right_val></_></_> + <_> + <!-- tree 63 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>10 8 2 3 -1.</_> + <_>10 9 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.8722730241715908e-003</threshold> + <left_val>0.3473713099956513</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>13 15 6 2 -1.</_> + <_>13 16 6 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.2879058532416821e-004</threshold> + <left_val>0.5438259243965149</left_val> + <right_val>0.4453906118869782</right_val></_></_> + <_> + <!-- tree 64 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 12 2 2 -1.</_> + <_>8 12 1 1 2.</_> + <_>9 13 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.3411579420790076e-003</threshold> + <left_node>1</left_node> + <right_val>0.6511713862419128</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 15 3 5 -1.</_> + <_>9 15 1 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.3681922405958176e-003</threshold> + <left_val>0.1443295031785965</left_val> + <right_val>0.4888199865818024</right_val></_></_> + <_> + <!-- tree 65 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 6 4 12 -1.</_> + <_>8 12 4 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.3305751215666533e-004</threshold> + <left_node>1</left_node> + <right_val>0.3951109051704407</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 6 7 8 -1.</_> + <_>7 10 7 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.0746510233730078e-003</threshold> + <left_val>0.3910265862941742</left_val> + <right_val>0.5349503755569458</right_val></_></_> + <_> + <!-- tree 66 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 11 8 2 -1.</_> + <_>0 12 8 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0186100509017706</threshold> + <left_val>0.1275743991136551</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 11 2 2 -1.</_> + <_>8 11 1 1 2.</_> + <_>9 12 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.3651419430971146e-003</threshold> + <left_val>0.5038288831710815</left_val> + <right_val>0.6951304078102112</right_val></_></_> + <_> + <!-- tree 67 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 7 12 1 -1.</_> + <_>11 7 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.3744421824812889e-003</threshold> + <left_val>0.5253443121910095</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 8 3 2 -1.</_> + <_>11 8 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.4163323044776917e-003</threshold> + <left_val>0.5011243820190430</left_val> + <right_val>0.7311332821846008</right_val></_></_> + <_> + <!-- tree 68 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 7 12 1 -1.</_> + <_>5 7 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.1413988694548607e-003</threshold> + <left_val>0.4953536093235016</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 5 8 2 -1.</_> + <_>6 5 4 1 2.</_> + <_>10 6 4 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.5847031287848949e-003</threshold> + <left_val>0.2535555958747864</left_val> + <right_val>0.6462442874908447</right_val></_></_> + <_> + <!-- tree 69 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 10 3 10 -1.</_> + <_>10 10 1 10 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0285652391612530</threshold> + <left_node>1</left_node> + <right_val>0.2330722063779831</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>16 0 2 4 -1.</_> + <_>16 0 1 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.3958800961263478e-004</threshold> + <left_val>0.4702244102954865</left_val> + <right_val>0.5544549226760864</right_val></_></_> + <_> + <!-- tree 70 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 10 3 10 -1.</_> + <_>9 10 1 10 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0314594581723213</threshold> + <left_node>1</left_node> + <right_val>0.0336896888911724</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 10 2 3 -1.</_> + <_>9 11 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.6011630222201347e-003</threshold> + <left_val>0.4787121117115021</left_val> + <right_val>0.6338351964950562</right_val></_></_> + <_> + <!-- tree 71 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 9 4 2 -1.</_> + <_>10 9 2 1 2.</_> + <_>8 10 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.1835669223219156e-004</threshold> + <left_val>0.5431486964225769</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 14 7 6 -1.</_> + <_>12 16 7 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.5303089320659637e-003</threshold> + <left_val>0.4105832874774933</left_val> + <right_val>0.5403990745544434</right_val></_></_> + <_> + <!-- tree 72 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 1 3 1 -1.</_> + <_>7 1 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.4129279879853129e-003</threshold> + <left_node>1</left_node> + <right_val>0.3105539977550507</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>2 0 2 4 -1.</_> + <_>3 0 1 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.5530709535814822e-004</threshold> + <left_val>0.4254471957683563</left_val> + <right_val>0.5447154045104981</right_val></_></_> + <_> + <!-- tree 73 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>11 11 2 2 -1.</_> + <_>12 11 1 1 2.</_> + <_>11 12 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.1966410460881889e-004</threshold> + <left_node>1</left_node> + <right_val>0.6118361949920654</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 12 6 6 -1.</_> + <_>12 14 6 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.0411392003297806e-003</threshold> + <left_val>0.5290042161941528</left_val> + <right_val>0.4224787056446075</right_val></_></_> + <_> + <!-- tree 74 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 0 6 10 -1.</_> + <_>1 0 3 5 2.</_> + <_>4 5 3 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.7617880888283253e-003</threshold> + <left_val>0.4315345883369446</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 0 2 9 -1.</_> + <_>3 3 2 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.9374631121754646e-003</threshold> + <left_val>0.6629263162612915</left_val> + <right_val>0.3028964996337891</right_val></_></_> + <_> + <!-- tree 75 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>14 13 3 2 -1.</_> + <_>14 14 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.6497720498591661e-003</threshold> + <left_node>1</left_node> + <right_val>0.5491852760314941</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>15 2 3 2 -1.</_> + <_>15 3 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.8834417723119259e-003</threshold> + <left_val>0.3188554048538208</left_val> + <right_val>0.5184289216995239</right_val></_></_> + <_> + <!-- tree 76 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>2 13 5 2 -1.</_> + <_>2 14 5 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.7459187489002943e-004</threshold> + <left_node>1</left_node> + <right_val>0.3328830897808075</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 4 12 10 -1.</_> + <_>3 4 6 5 2.</_> + <_>9 9 6 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0153087796643376</threshold> + <left_val>0.3923608064651489</left_val> + <right_val>0.5235139131546021</right_val></_></_> + <_> + <!-- tree 77 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 1 14 6 -1.</_> + <_>5 3 14 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0322924517095089</threshold> + <left_node>1</left_node> + <right_val>0.5977646708488464</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>15 3 3 2 -1.</_> + <_>15 4 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.3842519517056644e-004</threshold> + <left_val>0.4541687965393066</left_val> + <right_val>0.5369428992271423</right_val></_></_> + <_> + <!-- tree 78 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 11 2 2 -1.</_> + <_>7 11 1 1 2.</_> + <_>8 12 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.5429529594257474e-003</threshold> + <left_node>1</left_node> + <right_val>0.6318141222000122</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>2 14 6 6 -1.</_> + <_>2 16 6 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.4733028840273619e-003</threshold> + <left_val>0.3490633070468903</left_val> + <right_val>0.4759024977684021</right_val></_></_> + <_> + <!-- tree 79 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 13 8 3 -1.</_> + <_>6 14 8 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.0994939841330051e-003</threshold> + <left_node>1</left_node> + <right_val>0.5887197852134705</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 19 18 1 -1.</_> + <_>7 19 6 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.7541108690202236e-003</threshold> + <left_val>0.5961331725120544</left_val> + <right_val>0.4841983020305634</right_val></_></_> + <_> + <!-- tree 80 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 12 1 6 -1.</_> + <_>8 15 1 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0102331303060055</threshold> + <left_val>0.1705404072999954</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 0 14 15 -1.</_> + <_>0 5 14 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.2255450934171677</threshold> + <left_val>0.4779379963874817</left_val> + <right_val>0.0978796631097794</right_val></_></_> + <_> + <!-- tree 81 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 0 16 8 -1.</_> + <_>3 4 16 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0296665597707033</threshold> + <left_node>1</left_node> + <right_val>0.5822224020957947</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 1 8 12 -1.</_> + <_>6 7 8 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.8518449980765581e-003</threshold> + <left_val>0.5459626913070679</left_val> + <right_val>0.4610066115856171</right_val></_></_> + <_> + <!-- tree 82 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 3 3 3 -1.</_> + <_>6 3 1 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.7465328872203827e-004</threshold> + <left_node>1</left_node> + <right_val>0.3670322895050049</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 1 3 4 -1.</_> + <_>6 1 1 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.4044740055396687e-005</threshold> + <left_val>0.4302386045455933</left_val> + <right_val>0.5691710710525513</right_val></_></_> + <_> + <!-- tree 83 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>15 14 4 6 -1.</_> + <_>17 14 2 3 2.</_> + <_>15 17 2 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0175794307142496</threshold> + <left_val>0.6917321085929871</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 11 6 8 -1.</_> + <_>15 11 3 4 2.</_> + <_>12 15 3 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0523816794157028</threshold> + <left_val>0.7110040187835693</left_val> + <right_val>0.5060154795646668</right_val></_></_> + <_> + <!-- tree 84 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 7 2 4 -1.</_> + <_>9 7 1 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0112421102821827</threshold> + <left_val>0.8769189119338989</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 11 3 1 -1.</_> + <_>7 11 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.6728400737047195e-003</threshold> + <left_val>0.6519191861152649</left_val> + <right_val>0.4546068906784058</right_val></_></_> + <_> + <!-- tree 85 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 3 2 14 -1.</_> + <_>12 3 1 14 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.5082760732620955e-003</threshold> + <left_val>0.5329865813255310</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 11 6 2 -1.</_> + <_>15 11 3 1 2.</_> + <_>12 12 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.1679710634052753e-003</threshold> + <left_val>0.5220459103584290</left_val> + <right_val>0.2953518927097321</right_val></_></_> + <_> + <!-- tree 86 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 2 5 2 -1.</_> + <_>0 3 5 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-9.7009900491684675e-004</threshold> + <left_node>1</left_node> + <right_val>0.5048633217811585</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 0 15 1 -1.</_> + <_>5 0 5 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0109570100903511</threshold> + <left_val>0.5837358236312866</left_val> + <right_val>0.3020085990428925</right_val></_></_> + <_> + <!-- tree 87 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 11 6 2 -1.</_> + <_>15 11 3 1 2.</_> + <_>12 12 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.3272513002157211e-003</threshold> + <left_val>0.3158063888549805</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 5 2 2 -1.</_> + <_>10 5 1 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.9798380637657829e-005</threshold> + <left_val>0.4386389851570129</left_val> + <right_val>0.5443211197853088</right_val></_></_> + <_> + <!-- tree 88 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 7 2 2 -1.</_> + <_>10 7 1 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.8244039276614785e-004</threshold> + <left_node>1</left_node> + <right_val>0.5625395774841309</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 0 2 10 -1.</_> + <_>9 0 1 5 2.</_> + <_>10 5 1 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.1364117795601487e-004</threshold> + <left_val>0.5281198024749756</left_val> + <right_val>0.3401407897472382</right_val></_></_> + <_> + <!-- tree 89 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>18 14 2 2 -1.</_> + <_>18 15 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.8008040497079492e-003</threshold> + <left_node>1</left_node> + <right_val>0.3471659123897553</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>13 11 4 9 -1.</_> + <_>13 14 4 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.9944779388606548e-003</threshold> + <left_val>0.4481697082519531</left_val> + <right_val>0.5385770201683044</right_val></_></_> + <_> + <!-- tree 90 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 13 2 2 -1.</_> + <_>8 13 1 1 2.</_> + <_>9 14 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.5625398342963308e-005</threshold> + <left_val>0.4492512941360474</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 8 4 3 -1.</_> + <_>7 9 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.3189922841265798e-004</threshold> + <left_val>0.4167312085628510</left_val> + <right_val>0.6021102070808411</right_val></_></_> + <_> + <!-- tree 91 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 9 4 2 -1.</_> + <_>8 10 4 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.9980219551362097e-004</threshold> + <left_val>0.4148428142070770</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>13 12 4 2 -1.</_> + <_>13 13 4 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.9060940505587496e-005</threshold> + <left_val>0.5592089891433716</left_val> + <right_val>0.4073210954666138</right_val></_></_> + <_> + <!-- tree 92 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 14 2 2 -1.</_> + <_>6 14 1 1 2.</_> + <_>7 15 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.9742690064013004e-004</threshold> + <left_val>0.6088914275169373</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 14 2 2 -1.</_> + <_>0 15 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.4831830048933625e-004</threshold> + <left_val>0.5298305153846741</left_val> + <right_val>0.3761950135231018</right_val></_></_> + <_> + <!-- tree 93 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 13 6 3 -1.</_> + <_>7 14 6 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.9441029764711857e-003</threshold> + <left_node>1</left_node> + <right_val>0.4716084897518158</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 9 10 6 -1.</_> + <_>7 11 10 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.1374121010303497</threshold> + <left_val>0.5101336836814880</left_val> + <right_val>0.0467468015849590</right_val></_></_> + <_> + <!-- tree 94 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>2 9 12 4 -1.</_> + <_>6 9 4 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0884141772985458</threshold> + <left_val>0.1181868985295296</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 9 6 11 -1.</_> + <_>10 9 3 11 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0706102773547173</threshold> + <left_val>0.5119063258171082</left_val> + <right_val>0.7778441905975342</right_val></_></_> + <_> + <!-- tree 95 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 7 2 3 -1.</_> + <_>9 8 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.7188978902995586e-003</threshold> + <left_val>0.1874134987592697</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 14 4 3 -1.</_> + <_>9 15 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0151153998449445</threshold> + <left_val>0.4980027973651886</left_val> + <right_val>0.7005817890167236</right_val></_></_> + <_> + <!-- tree 96 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>2 3 3 17 -1.</_> + <_>3 3 1 17 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.0671879863366485e-003</threshold> + <left_val>0.4482238888740540</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 11 6 3 -1.</_> + <_>0 12 6 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.0487911580130458e-004</threshold> + <left_val>0.6265752911567688</left_val> + <right_val>0.4402655065059662</right_val></_></_></trees> + <stage_threshold>47.7634506225585940</stage_threshold> + <parent>16</parent> + <next>-1</next></_> + <_> + <!-- stage 18 --> + <trees> + <_> + <!-- tree 0 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 3 11 9 -1.</_> + <_>4 6 11 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0986907333135605</threshold> + <left_node>1</left_node> + <right_val>0.3999474942684174</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 2 6 11 -1.</_> + <_>3 2 3 11 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0623734183609486</threshold> + <left_val>0.5247784852981567</left_val> + <right_val>0.8193575739860535</right_val></_></_> + <_> + <!-- tree 1 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>13 0 4 5 -1.</_> + <_>13 0 2 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.9496519817039371e-003</threshold> + <left_val>0.3529816865921021</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 7 6 4 -1.</_> + <_>12 7 3 2 2.</_> + <_>9 9 3 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.9139147894456983e-004</threshold> + <left_val>0.5852727890014648</left_val> + <right_val>0.3245978057384491</right_val></_></_> + <_> + <!-- tree 2 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 7 8 2 -1.</_> + <_>9 7 4 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.5150408297777176e-004</threshold> + <left_val>0.3892816901206970</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 8 15 1 -1.</_> + <_>6 8 5 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.1721949558705091e-003</threshold> + <left_val>0.4335052073001862</left_val> + <right_val>0.6520624160766602</right_val></_></_> + <_> + <!-- tree 3 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 12 12 2 -1.</_> + <_>8 12 4 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.4480642797425389e-004</threshold> + <left_node>1</left_node> + <right_val>0.4041135013103485</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>13 0 4 10 -1.</_> + <_>15 0 2 5 2.</_> + <_>13 5 2 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.6264840271323919e-003</threshold> + <left_val>0.5624982118606567</left_val> + <right_val>0.3967525064945221</right_val></_></_> + <_> + <!-- tree 4 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 9 2 2 -1.</_> + <_>9 10 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.9712688885629177e-004</threshold> + <left_val>0.3856112062931061</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 9 6 2 -1.</_> + <_>6 9 3 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.5984949208796024e-003</threshold> + <left_val>0.5997889041900635</left_val> + <right_val>0.4241614043712616</right_val></_></_> + <_> + <!-- tree 5 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 17 4 3 -1.</_> + <_>8 18 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.3080618381500244e-003</threshold> + <left_node>1</left_node> + <right_val>0.6660168766975403</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 3 9 2 -1.</_> + <_>11 3 3 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.6319877775385976e-004</threshold> + <left_val>0.4481379091739655</left_val> + <right_val>0.5583487749099731</right_val></_></_> + <_> + <!-- tree 6 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 3 9 2 -1.</_> + <_>6 3 3 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.0776469288393855e-004</threshold> + <left_val>0.3535459041595459</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 0 9 14 -1.</_> + <_>8 0 3 14 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.6223160568624735e-003</threshold> + <left_val>0.3409807085990906</left_val> + <right_val>0.5420687794685364</right_val></_></_> + <_> + <!-- tree 7 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 3 7 10 -1.</_> + <_>7 8 7 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0620614103972912</threshold> + <left_val>0.1934083998203278</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 8 13 3 -1.</_> + <_>4 9 13 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.4387189922854304e-004</threshold> + <left_val>0.4083626866340637</left_val> + <right_val>0.5490221977233887</right_val></_></_> + <_> + <!-- tree 8 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 12 14 4 -1.</_> + <_>3 12 7 2 2.</_> + <_>10 14 7 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0262399092316628</threshold> + <left_node>1</left_node> + <right_val>0.2285708039999008</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 12 4 2 -1.</_> + <_>8 13 4 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.1940297968685627e-004</threshold> + <left_val>0.4648667871952057</left_val> + <right_val>0.6017355918884277</right_val></_></_> + <_> + <!-- tree 9 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 10 9 8 -1.</_> + <_>6 14 9 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.3833119485061616e-004</threshold> + <left_node>1</left_node> + <right_val>0.3598038852214813</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 12 2 8 -1.</_> + <_>9 16 2 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.5869759954512119e-003</threshold> + <left_val>0.4259651005268097</left_val> + <right_val>0.5476434826850891</right_val></_></_> + <_> + <!-- tree 10 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 12 3 3 -1.</_> + <_>8 13 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.7263417877256870e-003</threshold> + <left_val>0.6507238149642944</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 5 4 10 -1.</_> + <_>7 5 2 10 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0110061103478074</threshold> + <left_val>0.5149409770965576</left_val> + <right_val>0.3362984955310822</right_val></_></_> + <_> + <!-- tree 11 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>14 15 3 3 -1.</_> + <_>14 16 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.1445819921791553e-003</threshold> + <left_node>1</left_node> + <right_val>0.2672930061817169</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 6 13 3 -1.</_> + <_>4 7 13 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.7233798541128635e-003</threshold> + <left_val>0.5652182102203369</left_val> + <right_val>0.4298144876956940</right_val></_></_> + <_> + <!-- tree 12 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 15 3 3 -1.</_> + <_>3 16 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.8437406122684479e-003</threshold> + <left_node>1</left_node> + <right_val>0.1151885986328125</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 9 4 2 -1.</_> + <_>3 9 2 1 2.</_> + <_>5 10 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.5124640412977897e-005</threshold> + <left_val>0.4373598098754883</left_val> + <right_val>0.5612128973007202</right_val></_></_> + <_> + <!-- tree 13 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 11 20 4 -1.</_> + <_>10 11 10 2 2.</_> + <_>0 13 10 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0399088710546494</threshold> + <left_val>0.5204648971557617</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 15 4 3 -1.</_> + <_>8 16 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.3903679363429546e-003</threshold> + <left_val>0.4813467860221863</left_val> + <right_val>0.6361209154129028</right_val></_></_> + <_> + <!-- tree 14 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 11 20 4 -1.</_> + <_>0 11 10 2 2.</_> + <_>10 13 10 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0399088710546494</threshold> + <left_val>0.1506870985031128</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 15 4 3 -1.</_> + <_>8 16 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.3903679363429546e-003</threshold> + <left_val>0.4581694900989533</left_val> + <right_val>0.6200240850448608</right_val></_></_> + <_> + <!-- tree 15 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>10 13 1 6 -1.</_> + <_>10 16 1 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.7005190066993237e-003</threshold> + <left_node>1</left_node> + <right_val>0.3432235121726990</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>2 1 18 2 -1.</_> + <_>11 1 9 1 2.</_> + <_>2 2 9 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0126237897202373</threshold> + <left_val>0.3088226914405823</left_val> + <right_val>0.5226737856864929</right_val></_></_> + <_> + <!-- tree 16 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 14 3 3 -1.</_> + <_>8 15 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0118066100403667</threshold> + <left_node>1</left_node> + <right_val>0.7187939286231995</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 1 6 1 -1.</_> + <_>6 1 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.4257229417562485e-003</threshold> + <left_val>0.3120814859867096</left_val> + <right_val>0.5065844058990479</right_val></_></_> + <_> + <!-- tree 17 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>11 13 1 3 -1.</_> + <_>11 14 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.9385299896821380e-004</threshold> + <left_val>0.4754584133625031</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>13 5 2 12 -1.</_> + <_>13 11 2 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0343881882727146</threshold> + <left_val>0.5261657834053040</left_val> + <right_val>0.3350174129009247</right_val></_></_> + <_> + <!-- tree 18 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 14 18 6 -1.</_> + <_>1 16 18 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0750099867582321</threshold> + <left_val>0.1713480949401856</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 13 1 3 -1.</_> + <_>8 14 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.9022492021322250e-004</threshold> + <left_val>0.4725801944732666</left_val> + <right_val>0.5956469178199768</right_val></_></_> + <_> + <!-- tree 19 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 13 6 3 -1.</_> + <_>7 14 6 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.5525289177894592e-003</threshold> + <left_val>0.6558222770690918</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 10 3 2 -1.</_> + <_>9 11 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.3135520566720515e-004</threshold> + <left_val>0.4835400879383087</left_val> + <right_val>0.5586913824081421</right_val></_></_> + <_> + <!-- tree 20 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 1 3 3 -1.</_> + <_>6 1 1 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.7948658466339111e-003</threshold> + <left_node>1</left_node> + <right_val>0.2645705938339233</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 5 6 5 -1.</_> + <_>8 5 3 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.0124691072851419e-003</threshold> + <left_val>0.3657945096492767</left_val> + <right_val>0.5124772191047669</right_val></_></_> + <_> + <!-- tree 21 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 5 6 14 -1.</_> + <_>7 12 6 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.1178547963500023</threshold> + <left_val>0.2385654002428055</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 16 6 2 -1.</_> + <_>9 16 2 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.5575019642710686e-003</threshold> + <left_val>0.5490474104881287</left_val> + <right_val>0.4274747967720032</right_val></_></_> + <_> + <!-- tree 22 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 2 2 12 -1.</_> + <_>1 2 1 12 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0155737595632672</threshold> + <left_val>0.6938900947570801</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 0 5 3 -1.</_> + <_>1 1 5 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.1854790393263102e-003</threshold> + <left_val>0.3645988106727600</left_val> + <right_val>0.5092526078224182</right_val></_></_> + <_> + <!-- tree 23 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 4 3 3 -1.</_> + <_>12 5 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.9272339306771755e-003</threshold> + <left_val>0.4685808122158051</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 6 3 3 -1.</_> + <_>12 7 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.4663668163120747e-003</threshold> + <left_val>0.4973410069942474</left_val> + <right_val>0.7726097106933594</right_val></_></_> + <_> + <!-- tree 24 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 4 3 3 -1.</_> + <_>5 5 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.6140360906720161e-003</threshold> + <left_val>0.6877465844154358</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 6 3 3 -1.</_> + <_>5 7 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.1512572206556797e-003</threshold> + <left_val>0.4788525104522705</left_val> + <right_val>0.6921657919883728</right_val></_></_> + <_> + <!-- tree 25 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 12 4 8 -1.</_> + <_>10 12 2 4 2.</_> + <_>8 16 2 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.7711640577763319e-003</threshold> + <left_val>0.5481839776039124</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>2 17 18 2 -1.</_> + <_>11 17 9 1 2.</_> + <_>2 18 9 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0128361098468304</threshold> + <left_val>0.3800162971019745</left_val> + <right_val>0.5204492807388306</right_val></_></_> + <_> + <!-- tree 26 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 3 2 2 -1.</_> + <_>9 4 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.4380050599575043e-003</threshold> + <left_val>0.2582435011863709</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 5 4 6 -1.</_> + <_>8 7 4 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.1713329479098320e-003</threshold> + <left_val>0.4961163103580475</left_val> + <right_val>0.3215202987194061</right_val></_></_> + <_> + <!-- tree 27 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 0 8 6 -1.</_> + <_>9 2 8 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.2800728483125567e-004</threshold> + <left_node>1</left_node> + <right_val>0.5460423827171326</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 0 18 4 -1.</_> + <_>7 0 6 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-9.7982389852404594e-003</threshold> + <left_val>0.6046543717384338</left_val> + <right_val>0.4939922094345093</right_val></_></_> + <_> + <!-- tree 28 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 0 4 8 -1.</_> + <_>2 0 2 8 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.3543828912079334e-003</threshold> + <left_node>1</left_node> + <right_val>0.5291094183921814</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 4 6 9 -1.</_> + <_>2 4 2 9 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0146650401875377</threshold> + <left_val>0.5446122884750366</left_val> + <right_val>0.3567362129688263</right_val></_></_> + <_> + <!-- tree 29 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 4 18 2 -1.</_> + <_>7 4 6 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0302445106208324</threshold> + <left_val>0.5518329143524170</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 16 12 4 -1.</_> + <_>14 16 6 2 2.</_> + <_>8 18 6 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0566602088510990</threshold> + <left_val>0.6930978894233704</left_val> + <right_val>0.5093387961387634</right_val></_></_> + <_> + <!-- tree 30 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 0 18 2 -1.</_> + <_>0 0 9 1 2.</_> + <_>9 1 9 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.6967479176819324e-003</threshold> + <left_val>0.3201526105403900</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 0 3 18 -1.</_> + <_>4 0 1 18 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0308067705482244</threshold> + <left_val>0.4989246129989624</left_val> + <right_val>0.2277054041624069</right_val></_></_> + <_> + <!-- tree 31 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>14 9 4 7 -1.</_> + <_>14 9 2 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.2748769260942936e-003</threshold> + <left_val>0.4810931086540222</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>15 14 2 2 -1.</_> + <_>15 15 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.0436900667846203e-003</threshold> + <left_val>0.5283867120742798</left_val> + <right_val>0.3255924880504608</right_val></_></_> + <_> + <!-- tree 32 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>2 9 4 7 -1.</_> + <_>4 9 2 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.6277956143021584e-003</threshold> + <left_val>0.6266536116600037</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 14 2 2 -1.</_> + <_>3 15 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.5113382879644632e-004</threshold> + <left_val>0.5097137093544006</left_val> + <right_val>0.3191910088062286</right_val></_></_> + <_> + <!-- tree 33 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>11 0 6 6 -1.</_> + <_>11 2 6 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.8188261725008488e-004</threshold> + <left_val>0.4549585878849030</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>14 0 2 6 -1.</_> + <_>15 0 1 3 2.</_> + <_>14 3 1 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0145949097350240</threshold> + <left_val>0.2645038962364197</left_val> + <right_val>0.5153868198394775</right_val></_></_> + <_> + <!-- tree 34 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 11 2 2 -1.</_> + <_>7 11 1 1 2.</_> + <_>8 12 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.2304580304771662e-003</threshold> + <left_val>0.6197584867477417</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 10 2 2 -1.</_> + <_>8 10 1 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.1867299801670015e-004</threshold> + <left_val>0.5469198822975159</left_val> + <right_val>0.4206855893135071</right_val></_></_> + <_> + <!-- tree 35 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 14 2 6 -1.</_> + <_>9 17 2 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.0909959673881531e-003</threshold> + <left_val>0.4140760004520416</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 18 4 2 -1.</_> + <_>12 19 4 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.5210378700867295e-004</threshold> + <left_val>0.5476608872413635</left_val> + <right_val>0.4155021011829376</right_val></_></_> + <_> + <!-- tree 36 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 17 4 3 -1.</_> + <_>8 18 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.2563779540359974e-003</threshold> + <left_val>0.7160469293594360</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>2 18 8 2 -1.</_> + <_>2 19 8 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.4701850013807416e-003</threshold> + <left_val>0.5240808129310608</left_val> + <right_val>0.3729662895202637</right_val></_></_> + <_> + <!-- tree 37 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>2 9 16 3 -1.</_> + <_>2 10 16 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.1472719779703766e-004</threshold> + <left_val>0.4033798873424530</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 9 2 2 -1.</_> + <_>9 10 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.0506469774991274e-003</threshold> + <left_val>0.5263985991477966</left_val> + <right_val>0.3560093045234680</right_val></_></_> + <_> + <!-- tree 38 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 14 2 4 -1.</_> + <_>5 14 1 2 2.</_> + <_>6 16 1 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.6269949739798903e-004</threshold> + <left_val>0.4569799900054932</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 9 4 2 -1.</_> + <_>8 9 2 1 2.</_> + <_>10 10 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.6365550477057695e-003</threshold> + <left_val>0.3042570948600769</left_val> + <right_val>0.5868253707885742</right_val></_></_> + <_> + <!-- tree 39 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 5 2 5 -1.</_> + <_>9 5 1 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.4893293678760529e-003</threshold> + <left_node>1</left_node> + <right_val>0.4914157092571259</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 9 3 2 -1.</_> + <_>10 9 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.8107408694922924e-003</threshold> + <left_val>0.4918529987335205</left_val> + <right_val>0.6266962885856628</right_val></_></_> + <_> + <!-- tree 40 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 9 3 2 -1.</_> + <_>9 9 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.5583951547741890e-004</threshold> + <left_node>1</left_node> + <right_val>0.5633236169815064</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 8 3 6 -1.</_> + <_>9 8 1 6 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.2017690353095531e-003</threshold> + <left_val>0.5553916096687317</left_val> + <right_val>0.3827646076679230</right_val></_></_> + <_> + <!-- tree 41 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 12 4 8 -1.</_> + <_>10 12 2 4 2.</_> + <_>8 16 2 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.7908938936889172e-003</threshold> + <left_val>0.5498697757720947</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>2 17 16 2 -1.</_> + <_>10 17 8 1 2.</_> + <_>2 18 8 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.8228569533675909e-003</threshold> + <left_val>0.4382283091545105</left_val> + <right_val>0.5424032807350159</right_val></_></_> + <_> + <!-- tree 42 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 12 3 8 -1.</_> + <_>9 12 1 8 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.2495508939027786e-003</threshold> + <left_val>0.2888121902942658</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 10 1 3 -1.</_> + <_>3 11 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.8744522286579013e-004</threshold> + <left_val>0.3472655117511749</left_val> + <right_val>0.5076370835304260</right_val></_></_> + <_> + <!-- tree 43 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 14 10 6 -1.</_> + <_>14 14 5 3 2.</_> + <_>9 17 5 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.5174440816044807e-003</threshold> + <left_val>0.4661205112934113</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>14 13 3 6 -1.</_> + <_>14 15 3 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0101513797417283</threshold> + <left_val>0.3744775056838989</left_val> + <right_val>0.5294001102447510</right_val></_></_> + <_> + <!-- tree 44 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 19 18 1 -1.</_> + <_>7 19 6 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.1399952024221420e-003</threshold> + <left_node>1</left_node> + <right_val>0.4660485088825226</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>2 10 15 2 -1.</_> + <_>7 10 5 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.7078551724553108e-003</threshold> + <left_val>0.4175061881542206</left_val> + <right_val>0.6916306018829346</right_val></_></_> + <_> + <!-- tree 45 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 17 16 3 -1.</_> + <_>4 18 16 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0419810414314270</threshold> + <left_node>1</left_node> + <right_val>0.2018215060234070</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 6 4 9 -1.</_> + <_>8 9 4 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0142729999497533</threshold> + <left_val>0.7511197924613953</left_val> + <right_val>0.5032083988189697</right_val></_></_> + <_> + <!-- tree 46 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 16 2 4 -1.</_> + <_>9 16 1 2 2.</_> + <_>10 18 1 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.0869521908462048e-003</threshold> + <left_node>1</left_node> + <right_val>0.2504513859748840</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 5 10 8 -1.</_> + <_>5 9 10 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.7606799956411123e-003</threshold> + <left_val>0.3301401138305664</left_val> + <right_val>0.5218337178230286</right_val></_></_> + <_> + <!-- tree 47 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>13 1 4 2 -1.</_> + <_>13 1 2 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.2550549581646919e-004</threshold> + <left_val>0.4614442884922028</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>14 0 3 6 -1.</_> + <_>14 2 3 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.9503209516406059e-003</threshold> + <left_val>0.4619950056076050</left_val> + <right_val>0.5247030258178711</right_val></_></_> + <_> + <!-- tree 48 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 7 2 2 -1.</_> + <_>6 7 1 1 2.</_> + <_>7 8 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.1312420247122645e-003</threshold> + <left_val>0.6314368247985840</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 1 6 1 -1.</_> + <_>9 1 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.6983180539682508e-003</threshold> + <left_val>0.3401306867599487</left_val> + <right_val>0.5055527091026306</right_val></_></_> + <_> + <!-- tree 49 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 11 3 3 -1.</_> + <_>9 12 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0114578204229474</threshold> + <left_node>1</left_node> + <right_val>0.4939996004104614</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 9 3 3 -1.</_> + <_>13 9 1 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.4962565451860428e-003</threshold> + <left_val>0.2965450882911682</left_val> + <right_val>0.5194367766380310</right_val></_></_> + <_> + <!-- tree 50 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 11 3 3 -1.</_> + <_>8 12 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0119190895929933</threshold> + <left_node>1</left_node> + <right_val>0.7886998057365418</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 9 3 3 -1.</_> + <_>6 9 1 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.4416420646011829e-003</threshold> + <left_val>0.5106986761093140</left_val> + <right_val>0.2967146039009094</right_val></_></_> + <_> + <!-- tree 51 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>10 11 1 3 -1.</_> + <_>10 12 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.7857811013236642e-004</threshold> + <left_val>0.5714371204376221</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 9 6 4 -1.</_> + <_>10 9 3 2 2.</_> + <_>7 11 3 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.0312711130827665e-003</threshold> + <left_val>0.4481200873851776</left_val> + <right_val>0.5384911894798279</right_val></_></_> + <_> + <!-- tree 52 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 7 2 2 -1.</_> + <_>4 7 1 1 2.</_> + <_>5 8 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.5262430533766747e-003</threshold> + <left_val>0.6193568706512451</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 7 3 1 -1.</_> + <_>6 7 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.2860880494117737e-003</threshold> + <left_val>0.4339885115623474</left_val> + <right_val>0.7697299122810364</right_val></_></_> + <_> + <!-- tree 53 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>18 3 2 3 -1.</_> + <_>18 4 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.5010920837521553e-003</threshold> + <left_node>1</left_node> + <right_val>0.3171389102935791</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>13 1 4 2 -1.</_> + <_>13 1 2 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0125876702368259</threshold> + <left_val>0.5246698856353760</left_val> + <right_val>0.4241208136081696</right_val></_></_> + <_> + <!-- tree 54 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 1 4 2 -1.</_> + <_>5 1 2 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.6207490009255707e-004</threshold> + <left_val>0.4231899976730347</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 0 5 2 -1.</_> + <_>3 1 5 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.4701730075757951e-005</threshold> + <left_val>0.4174138903617859</left_val> + <right_val>0.5919603705406189</right_val></_></_> + <_> + <!-- tree 55 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>14 7 6 4 -1.</_> + <_>17 7 3 2 2.</_> + <_>14 9 3 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.8084698179736733e-004</threshold> + <left_val>0.4277389049530029</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 8 16 2 -1.</_> + <_>4 9 16 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.8851212058216333e-004</threshold> + <left_val>0.3720161020755768</left_val> + <right_val>0.5226818919181824</right_val></_></_> + <_> + <!-- tree 56 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>2 11 5 6 -1.</_> + <_>2 13 5 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.3369069676846266e-003</threshold> + <left_val>0.5478066802024841</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 16 2 4 -1.</_> + <_>5 16 1 2 2.</_> + <_>6 18 1 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.6688359901309013e-003</threshold> + <left_val>0.3628678917884827</left_val> + <right_val>0.6150004863739014</right_val></_></_> + <_> + <!-- tree 57 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>15 6 2 12 -1.</_> + <_>16 6 1 6 2.</_> + <_>15 12 1 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.0844469438306987e-004</threshold> + <left_val>0.4747075140476227</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>13 3 6 16 -1.</_> + <_>15 3 2 16 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.4617560449987650e-003</threshold> + <left_val>0.4580138027667999</left_val> + <right_val>0.5585681796073914</right_val></_></_> + <_> + <!-- tree 58 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 5 12 12 -1.</_> + <_>4 5 6 6 2.</_> + <_>10 11 6 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0189613103866577</threshold> + <left_val>0.5298801064491272</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 1 10 13 -1.</_> + <_>10 1 5 13 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.1734731048345566</threshold> + <left_val>0.3698385059833527</left_val> + <right_val>0.8498619794845581</right_val></_></_> + <_> + <!-- tree 59 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>11 5 2 2 -1.</_> + <_>12 5 1 1 2.</_> + <_>11 6 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.0020549709443003e-004</threshold> + <left_node>1</left_node> + <right_val>0.5565661787986755</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>13 5 1 3 -1.</_> + <_>13 6 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.0967060225084424e-003</threshold> + <left_val>0.4795713126659393</left_val> + <right_val>0.6286259889602661</right_val></_></_> + <_> + <!-- tree 60 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 4 2 4 -1.</_> + <_>7 4 1 2 2.</_> + <_>8 6 1 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.5107099898159504e-004</threshold> + <left_val>0.4052405953407288</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 5 6 4 -1.</_> + <_>10 5 3 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.4463501069694757e-003</threshold> + <left_val>0.6173015236854553</left_val> + <right_val>0.4414263963699341</right_val></_></_> + <_> + <!-- tree 61 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 4 4 6 -1.</_> + <_>14 4 2 3 2.</_> + <_>12 7 2 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.5176620632410049e-003</threshold> + <left_node>1</left_node> + <right_val>0.3570570945739746</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 11 7 6 -1.</_> + <_>12 13 7 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0358121097087860</threshold> + <left_val>0.3151328861713409</left_val> + <right_val>0.5252702832221985</right_val></_></_> + <_> + <!-- tree 62 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 6 6 6 -1.</_> + <_>7 6 2 6 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0211554002016783</threshold> + <left_val>0.6124721169471741</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 8 2 2 -1.</_> + <_>9 9 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.9890940580517054e-004</threshold> + <left_val>0.5169975757598877</left_val> + <right_val>0.3596271872520447</right_val></_></_> + <_> + <!-- tree 63 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>15 6 2 2 -1.</_> + <_>16 6 1 1 2.</_> + <_>15 7 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.5613760333508253e-003</threshold> + <left_node>1</left_node> + <right_val>0.4914987981319428</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>14 7 4 4 -1.</_> + <_>16 7 2 2 2.</_> + <_>14 9 2 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.7120860330760479e-004</threshold> + <left_val>0.4546211063861847</left_val> + <right_val>0.5395811796188355</right_val></_></_> + <_> + <!-- tree 64 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 5 6 2 -1.</_> + <_>7 5 2 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0215970296412706</threshold> + <left_val>0.1903133988380432</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 19 18 1 -1.</_> + <_>7 19 6 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0249472297728062</threshold> + <left_val>0.6974077224731445</left_val> + <right_val>0.4967716038227081</right_val></_></_> + <_> + <!-- tree 65 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 3 3 3 -1.</_> + <_>12 4 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.8725979607552290e-003</threshold> + <left_val>0.4748947918415070</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>16 0 2 3 -1.</_> + <_>16 1 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.3912719488143921e-003</threshold> + <left_val>0.5180178284645081</left_val> + <right_val>0.2924321889877319</right_val></_></_> + <_> + <!-- tree 66 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 3 3 3 -1.</_> + <_>5 4 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-9.1552399098873138e-003</threshold> + <left_val>0.7665870189666748</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>2 0 2 3 -1.</_> + <_>2 1 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.1715660113841295e-003</threshold> + <left_val>0.5215551257133484</left_val> + <right_val>0.3365719020366669</right_val></_></_> + <_> + <!-- tree 67 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>15 6 2 2 -1.</_> + <_>16 6 1 1 2.</_> + <_>15 7 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.2330369791015983e-003</threshold> + <left_node>1</left_node> + <right_val>0.6260957717895508</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 13 1 6 -1.</_> + <_>10 16 1 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.0785901364870369e-004</threshold> + <left_val>0.4533509910106659</left_val> + <right_val>0.5386489033699036</right_val></_></_> + <_> + <!-- tree 68 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 7 10 2 -1.</_> + <_>0 7 5 1 2.</_> + <_>5 8 5 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.6437609125860035e-004</threshold> + <left_val>0.4103496074676514</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 10 6 2 -1.</_> + <_>3 11 6 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.1600199650274590e-004</threshold> + <left_val>0.5830391049385071</left_val> + <right_val>0.4304105937480927</right_val></_></_> + <_> + <!-- tree 69 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 18 4 2 -1.</_> + <_>12 19 4 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0127187203615904</threshold> + <left_val>0.2132582962512970</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 18 2 2 -1.</_> + <_>13 18 1 1 2.</_> + <_>12 19 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.9431880041956902e-005</threshold> + <left_val>0.4872891008853912</left_val> + <right_val>0.5458915233612061</right_val></_></_> + <_> + <!-- tree 70 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 19 2 1 -1.</_> + <_>7 19 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.3913689549081028e-004</threshold> + <left_val>0.3974364995956421</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 4 2 16 -1.</_> + <_>0 4 1 8 2.</_> + <_>1 12 1 8 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0180263407528400</threshold> + <left_val>0.7568550705909729</left_val> + <right_val>0.5045611858367920</right_val></_></_> + <_> + <!-- tree 71 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>16 1 4 9 -1.</_> + <_>16 4 4 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.9179181009531021e-003</threshold> + <left_node>1</left_node> + <right_val>0.3966299891471863</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 2 1 2 -1.</_> + <_>10 3 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.1839679791592062e-004</threshold> + <left_val>0.4198082983493805</left_val> + <right_val>0.5435804128646851</right_val></_></_> + <_> + <!-- tree 72 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 14 4 6 -1.</_> + <_>4 14 2 3 2.</_> + <_>6 17 2 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.9474181830883026e-003</threshold> + <left_val>0.6369457840919495</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 15 1 4 -1.</_> + <_>4 17 1 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.0050919273635373e-005</threshold> + <left_val>0.5269566774368286</left_val> + <right_val>0.3812243044376373</right_val></_></_> + <_> + <!-- tree 73 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 2 20 4 -1.</_> + <_>10 2 10 2 2.</_> + <_>0 4 10 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.1423643752932549e-003</threshold> + <left_node>1</left_node> + <right_val>0.4156762957572937</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>14 5 2 8 -1.</_> + <_>14 9 2 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.1305440168362111e-004</threshold> + <left_val>0.3523533046245575</left_val> + <right_val>0.5349454283714294</right_val></_></_> + <_> + <!-- tree 74 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 12 4 5 -1.</_> + <_>7 12 2 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.0855850016232580e-004</threshold> + <left_node>1</left_node> + <right_val>0.4403322041034699</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 13 9 6 -1.</_> + <_>0 15 9 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.3130389852449298e-003</threshold> + <left_val>0.6058161258697510</left_val> + <right_val>0.4468218982219696</right_val></_></_> + <_> + <!-- tree 75 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 14 11 3 -1.</_> + <_>9 15 11 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.9134768992662430e-003</threshold> + <left_node>1</left_node> + <right_val>0.4825705885887146</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 14 7 3 -1.</_> + <_>7 15 7 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.9645769391208887e-003</threshold> + <left_val>0.4835998117923737</left_val> + <right_val>0.6039277911186218</right_val></_></_> + <_> + <!-- tree 76 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 6 2 2 -1.</_> + <_>3 6 1 1 2.</_> + <_>4 7 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.7772549763321877e-003</threshold> + <left_node>1</left_node> + <right_val>0.6871827244758606</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 7 2 7 -1.</_> + <_>7 7 1 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.7136349864304066e-003</threshold> + <left_val>0.2842220962047577</left_val> + <right_val>0.5145428180694580</right_val></_></_> + <_> + <!-- tree 77 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>14 5 1 3 -1.</_> + <_>14 6 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.1027478184551001e-004</threshold> + <left_node>1</left_node> + <right_val>0.6024426221847534</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>13 4 4 3 -1.</_> + <_>13 5 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.7460630042478442e-003</threshold> + <left_val>0.4756610095500946</left_val> + <right_val>0.5721154212951660</right_val></_></_> + <_> + <!-- tree 78 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>2 7 4 4 -1.</_> + <_>2 7 2 2 2.</_> + <_>4 9 2 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.8068278809078038e-004</threshold> + <left_node>1</left_node> + <right_val>0.4931069016456604</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>2 9 13 6 -1.</_> + <_>2 12 13 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.8228890150785446e-003</threshold> + <left_val>0.3311698138713837</left_val> + <right_val>0.6227598190307617</right_val></_></_> + <_> + <!-- tree 79 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>10 1 3 4 -1.</_> + <_>11 1 1 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.3000478073954582e-003</threshold> + <left_node>1</left_node> + <right_val>0.5232092738151550</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 8 5 2 -1.</_> + <_>9 9 5 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.4951299059903249e-005</threshold> + <left_val>0.3995231986045837</left_val> + <right_val>0.5314797759056091</right_val></_></_> + <_> + <!-- tree 80 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 14 11 3 -1.</_> + <_>0 15 11 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.2752458937466145e-003</threshold> + <left_val>0.4481619894504547</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 11 2 8 -1.</_> + <_>8 15 2 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.8162579983472824e-003</threshold> + <left_val>0.3907971978187561</left_val> + <right_val>0.6671640872955322</right_val></_></_> + <_> + <!-- tree 81 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 11 10 6 -1.</_> + <_>5 14 10 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.4112279750406742e-003</threshold> + <left_val>0.5357010960578919</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 13 15 5 -1.</_> + <_>10 13 5 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.3062034100294113e-003</threshold> + <left_val>0.4770965874195099</left_val> + <right_val>0.5570099949836731</right_val></_></_> + <_> + <!-- tree 82 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 10 1 10 -1.</_> + <_>8 15 1 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.2164839319884777e-003</threshold> + <left_val>0.4947124123573303</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 14 6 2 -1.</_> + <_>6 14 2 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.9868631176650524e-003</threshold> + <left_val>0.5241307020187378</left_val> + <right_val>0.2512654960155487</right_val></_></_> + <_> + <!-- tree 83 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 14 7 3 -1.</_> + <_>7 15 7 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.6664260551333427e-003</threshold> + <left_node>1</left_node> + <right_val>0.4619553983211517</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 16 9 3 -1.</_> + <_>7 17 9 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0105812298133969</threshold> + <left_val>0.6301718950271606</left_val> + <right_val>0.4973031878471375</right_val></_></_> + <_> + <!-- tree 84 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 7 3 3 -1.</_> + <_>8 8 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.3366491124033928e-003</threshold> + <left_node>1</left_node> + <right_val>0.2870970070362091</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 5 1 6 -1.</_> + <_>3 8 1 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.9318940252996981e-004</threshold> + <left_val>0.4252805113792419</left_val> + <right_val>0.5579246878623962</right_val></_></_> + <_> + <!-- tree 85 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 5 11 2 -1.</_> + <_>6 6 11 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.1375334411859512e-003</threshold> + <left_val>0.5747315883636475</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 0 3 2 -1.</_> + <_>10 0 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.4809150490909815e-003</threshold> + <left_val>0.5203374028205872</left_val> + <right_val>0.3903566896915436</right_val></_></_> + <_> + <!-- tree 86 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 5 1 3 -1.</_> + <_>5 6 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.8749779388308525e-004</threshold> + <left_node>1</left_node> + <right_val>0.5534321069717407</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 7 3 2 -1.</_> + <_>9 7 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.2194919660687447e-004</threshold> + <left_val>0.5338044166564941</left_val> + <right_val>0.3925840854644775</right_val></_></_> + <_> + <!-- tree 87 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 2 10 6 -1.</_> + <_>10 2 5 3 2.</_> + <_>5 5 5 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.9790111631155014e-003</threshold> + <left_val>0.4144316017627716</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 4 6 4 -1.</_> + <_>8 4 3 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.1439629597589374e-003</threshold> + <left_val>0.4701372981071472</left_val> + <right_val>0.5281736254692078</right_val></_></_> + <_> + <!-- tree 88 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 16 3 4 -1.</_> + <_>9 16 1 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.5542130507528782e-003</threshold> + <left_node>1</left_node> + <right_val>0.2527256011962891</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 13 2 6 -1.</_> + <_>9 13 1 3 2.</_> + <_>10 16 1 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.0288399644196033e-003</threshold> + <left_val>0.5605146288871765</left_val> + <right_val>0.4297856092453003</right_val></_></_> + <_> + <!-- tree 89 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 8 3 1 -1.</_> + <_>10 8 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.7234670231118798e-003</threshold> + <left_node>1</left_node> + <right_val>0.4839682877063751</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>2 5 18 15 -1.</_> + <_>2 10 18 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.5758669972419739</threshold> + <left_val>0.5110502839088440</left_val> + <right_val>0.0804893299937248</right_val></_></_></trees> + <stage_threshold>44.2512817382812500</stage_threshold> + <parent>17</parent> + <next>-1</next></_> + <_> + <!-- stage 19 --> + <trees> + <_> + <!-- tree 0 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 3 6 2 -1.</_> + <_>4 3 3 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.6640521399676800e-003</threshold> + <left_val>0.3828920125961304</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 6 6 2 -1.</_> + <_>9 6 2 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.9905522763729095e-003</threshold> + <left_val>0.4858429133892059</left_val> + <right_val>0.7354959249496460</right_val></_></_> + <_> + <!-- tree 1 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 17 4 3 -1.</_> + <_>8 18 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.7154200039803982e-003</threshold> + <left_node>1</left_node> + <right_val>0.6723223924636841</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 13 2 3 -1.</_> + <_>10 14 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.1257929727435112e-003</threshold> + <left_val>0.4429577887058258</left_val> + <right_val>0.6070777773857117</right_val></_></_> + <_> + <!-- tree 2 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 10 20 4 -1.</_> + <_>0 12 20 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-9.1789010912179947e-004</threshold> + <left_node>1</left_node> + <right_val>0.3076345026493073</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 7 6 4 -1.</_> + <_>5 7 3 2 2.</_> + <_>8 9 3 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.0492859873920679e-003</threshold> + <left_val>0.5593643784523010</left_val> + <right_val>0.3651022911071777</right_val></_></_> + <_> + <!-- tree 3 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>11 12 1 2 -1.</_> + <_>11 13 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.5453929740469903e-005</threshold> + <left_val>0.4277968108654022</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 10 2 3 -1.</_> + <_>10 11 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.9015709878876805e-004</threshold> + <left_val>0.4583545029163361</left_val> + <right_val>0.5284683108329773</right_val></_></_> + <_> + <!-- tree 4 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 5 2 2 -1.</_> + <_>9 6 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.6071660502348095e-004</threshold> + <left_node>1</left_node> + <right_val>0.3798192143440247</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 4 1 10 -1.</_> + <_>4 9 1 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.2961107576265931e-004</threshold> + <left_val>0.3850437104701996</left_val> + <right_val>0.5939688086509705</right_val></_></_> + <_> + <!-- tree 5 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>11 18 4 2 -1.</_> + <_>11 18 2 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.6682569296099246e-004</threshold> + <left_val>0.4123024940490723</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 18 3 2 -1.</_> + <_>12 19 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.3492540165316314e-004</threshold> + <left_val>0.5760599970817566</left_val> + <right_val>0.4237645864486694</right_val></_></_> + <_> + <!-- tree 6 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 6 16 6 -1.</_> + <_>0 6 8 3 2.</_> + <_>8 9 8 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0108416797593236</threshold> + <left_val>0.3929921090602875</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 6 4 12 -1.</_> + <_>7 12 4 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0120778298005462</threshold> + <left_val>0.5761923193931580</left_val> + <right_val>0.2780444920063019</right_val></_></_> + <_> + <!-- tree 7 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>11 18 4 2 -1.</_> + <_>11 18 2 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.2128869313746691e-003</threshold> + <left_val>0.4794507026672363</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 18 3 2 -1.</_> + <_>12 19 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0152661902830005</threshold> + <left_val>0.0740558803081512</left_val> + <right_val>0.5153577923774719</right_val></_></_> + <_> + <!-- tree 8 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 12 1 2 -1.</_> + <_>8 13 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.7929533543065190e-005</threshold> + <left_node>1</left_node> + <right_val>0.5858737826347351</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 13 1 3 -1.</_> + <_>8 14 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.7633590323384851e-004</threshold> + <left_val>0.3567610979080200</left_val> + <right_val>0.5598962903022766</right_val></_></_> + <_> + <!-- tree 9 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>11 18 4 2 -1.</_> + <_>11 18 2 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.1311381654813886e-004</threshold> + <left_node>1</left_node> + <right_val>0.5346850752830505</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>14 12 4 6 -1.</_> + <_>14 12 2 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.2630451023578644e-003</threshold> + <left_val>0.4782536923885346</left_val> + <right_val>0.5456753969192505</right_val></_></_> + <_> + <!-- tree 10 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 0 3 4 -1.</_> + <_>7 0 1 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.9503918960690498e-003</threshold> + <left_val>0.2831811904907227</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 0 2 8 -1.</_> + <_>4 0 1 4 2.</_> + <_>5 4 1 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.9864578866399825e-004</threshold> + <left_val>0.5485215783119202</left_val> + <right_val>0.4159697890281677</right_val></_></_> + <_> + <!-- tree 11 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>11 17 9 3 -1.</_> + <_>14 17 3 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0114325201138854</threshold> + <left_val>0.5639101266860962</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>16 2 4 5 -1.</_> + <_>16 2 2 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.3339172154664993e-003</threshold> + <left_val>0.4596984088420868</left_val> + <right_val>0.5931242704391480</right_val></_></_> + <_> + <!-- tree 12 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 2 5 9 -1.</_> + <_>0 5 5 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.3193257451057434e-003</threshold> + <left_node>1</left_node> + <right_val>0.3230620026588440</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 2 3 2 -1.</_> + <_>8 2 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.2479918920435011e-004</threshold> + <left_val>0.3795293867588043</left_val> + <right_val>0.5408611297607422</right_val></_></_> + <_> + <!-- tree 13 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>11 17 9 3 -1.</_> + <_>14 17 3 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.1118943020701408</threshold> + <left_val>0.1132297962903976</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>16 2 4 5 -1.</_> + <_>16 2 2 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.5553781352937222e-003</threshold> + <left_val>0.6339370012283325</left_val> + <right_val>0.4838770925998688</right_val></_></_> + <_> + <!-- tree 14 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 17 9 3 -1.</_> + <_>3 17 3 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.0337029173970222e-003</threshold> + <left_val>0.5665255188941956</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 2 4 5 -1.</_> + <_>2 2 2 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0148336803540587</threshold> + <left_val>0.6751418113708496</left_val> + <right_val>0.4140945076942444</right_val></_></_> + <_> + <!-- tree 15 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 11 10 9 -1.</_> + <_>5 14 10 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.7506724521517754e-003</threshold> + <left_node>1</left_node> + <right_val>0.3561258912086487</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 6 3 3 -1.</_> + <_>9 7 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.6645010327920318e-003</threshold> + <left_val>0.5347279906272888</left_val> + <right_val>0.3649779856204987</right_val></_></_> + <_> + <!-- tree 16 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 17 5 3 -1.</_> + <_>3 18 5 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.4900820404291153e-003</threshold> + <left_node>1</left_node> + <right_val>0.2754656076431274</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 5 4 7 -1.</_> + <_>9 5 2 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.1133110383525491e-003</threshold> + <left_val>0.4225992858409882</left_val> + <right_val>0.5629178881645203</right_val></_></_> + <_> + <!-- tree 17 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 8 2 5 -1.</_> + <_>9 8 1 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.4940755516290665e-003</threshold> + <left_val>0.4906036853790283</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>2 2 18 2 -1.</_> + <_>2 3 18 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.5396620146930218e-003</threshold> + <left_val>0.4007051885128021</left_val> + <right_val>0.5380709171295166</right_val></_></_> + <_> + <!-- tree 18 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>2 8 15 6 -1.</_> + <_>7 8 5 6 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.1343495994806290</threshold> + <left_node>1</left_node> + <right_val>0.2214671969413757</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 8 2 5 -1.</_> + <_>10 8 1 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-9.4940755516290665e-003</threshold> + <left_val>0.7353156208992004</left_val> + <right_val>0.5005033016204834</right_val></_></_> + <_> + <!-- tree 19 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 10 4 6 -1.</_> + <_>12 12 4 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0200117900967598</threshold> + <left_node>1</left_node> + <right_val>0.3327906131744385</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>14 3 6 2 -1.</_> + <_>14 4 6 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.8875009845942259e-003</threshold> + <left_val>0.3915289044380188</left_val> + <right_val>0.5401849746704102</right_val></_></_> + <_> + <!-- tree 20 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 5 2 3 -1.</_> + <_>5 6 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.1842782199382782e-003</threshold> + <left_node>1</left_node> + <right_val>0.7176604866981506</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 6 3 3 -1.</_> + <_>4 7 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.6976969782263041e-003</threshold> + <left_val>0.4526978135108948</left_val> + <right_val>0.6076912879943848</right_val></_></_> + <_> + <!-- tree 21 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>14 12 3 3 -1.</_> + <_>14 13 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.9219978973269463e-003</threshold> + <left_node>1</left_node> + <right_val>0.2569833993911743</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 12 11 3 -1.</_> + <_>6 13 11 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0118031995370984</threshold> + <left_val>0.4999637901782990</left_val> + <right_val>0.5958228111267090</right_val></_></_> + <_> + <!-- tree 22 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 2 3 6 -1.</_> + <_>1 4 3 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-9.7703449428081512e-003</threshold> + <left_val>0.3459093868732452</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 0 4 7 -1.</_> + <_>3 0 2 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.1174899302423000e-003</threshold> + <left_val>0.4515126943588257</left_val> + <right_val>0.5829715728759766</right_val></_></_> + <_> + <!-- tree 23 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 8 3 4 -1.</_> + <_>10 8 1 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.4801411032676697e-003</threshold> + <left_val>0.4807392060756683</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 9 2 2 -1.</_> + <_>10 10 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.6078789960592985e-003</threshold> + <left_val>0.3462216854095459</left_val> + <right_val>0.5201594829559326</right_val></_></_> + <_> + <!-- tree 24 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 8 3 4 -1.</_> + <_>9 8 1 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.7252747938036919e-003</threshold> + <left_val>0.6599853038787842</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 4 10 10 -1.</_> + <_>4 9 10 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.2325618714094162e-003</threshold> + <left_val>0.2821828126907349</left_val> + <right_val>0.5125284790992737</right_val></_></_> + <_> + <!-- tree 25 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 10 3 2 -1.</_> + <_>10 10 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.9571950957179070e-004</threshold> + <left_val>0.4883818924427033</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 10 3 2 -1.</_> + <_>9 11 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.5021569561213255e-004</threshold> + <left_val>0.4829918146133423</left_val> + <right_val>0.5428717136383057</right_val></_></_> + <_> + <!-- tree 26 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 10 3 2 -1.</_> + <_>9 10 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.8489659093320370e-004</threshold> + <left_val>0.4434598982334137</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>2 4 14 12 -1.</_> + <_>2 4 7 6 2.</_> + <_>9 10 7 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0961926504969597</threshold> + <left_val>0.2256636023521423</left_val> + <right_val>0.5956227779388428</right_val></_></_> + <_> + <!-- tree 27 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>10 12 1 6 -1.</_> + <_>10 15 1 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.1053519556298852e-003</threshold> + <left_val>0.4527224004268646</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 3 8 16 -1.</_> + <_>11 3 4 8 2.</_> + <_>7 11 4 8 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.1021504029631615</threshold> + <left_val>0.2844349145889282</left_val> + <right_val>0.5186452865600586</right_val></_></_> + <_> + <!-- tree 28 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 6 8 10 -1.</_> + <_>5 6 4 5 2.</_> + <_>9 11 4 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.0147889629006386e-003</threshold> + <left_node>1</left_node> + <right_val>0.3808999061584473</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 2 8 8 -1.</_> + <_>6 2 4 4 2.</_> + <_>10 6 4 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.6131648384034634e-003</threshold> + <left_val>0.5718699097633362</left_val> + <right_val>0.4262563884258270</right_val></_></_> + <_> + <!-- tree 29 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>10 5 4 2 -1.</_> + <_>12 5 2 1 2.</_> + <_>10 6 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.5197630273178220e-003</threshold> + <left_node>1</left_node> + <right_val>0.5942718982696533</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 4 3 3 -1.</_> + <_>12 5 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0141972796991467</threshold> + <left_val>0.7731103897094727</left_val> + <right_val>0.4997653961181641</right_val></_></_> + <_> + <!-- tree 30 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 19 12 1 -1.</_> + <_>8 19 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0138188796117902</threshold> + <left_val>0.6681138277053833</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 2 3 1 -1.</_> + <_>9 2 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.0701329018920660e-004</threshold> + <left_val>0.3305608034133911</left_val> + <right_val>0.4749974906444550</right_val></_></_> + <_> + <!-- tree 31 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>13 17 4 3 -1.</_> + <_>13 18 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-9.3537531793117523e-003</threshold> + <left_val>0.2860932946205139</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 14 6 3 -1.</_> + <_>7 15 6 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-9.4771059229969978e-003</threshold> + <left_val>0.6188883185386658</left_val> + <right_val>0.4842100143432617</right_val></_></_> + <_> + <!-- tree 32 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 14 2 3 -1.</_> + <_>9 15 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.6923650400713086e-003</threshold> + <left_node>1</left_node> + <right_val>0.6070249080657959</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 15 6 3 -1.</_> + <_>7 16 6 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.8652542065829039e-004</threshold> + <left_val>0.3782689869403839</left_val> + <right_val>0.5368196964263916</right_val></_></_> + <_> + <!-- tree 33 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>10 18 3 2 -1.</_> + <_>11 18 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.5826620403677225e-003</threshold> + <left_val>0.3690209984779358</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>14 12 2 3 -1.</_> + <_>14 13 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.7307639829814434e-003</threshold> + <left_val>0.3857114911079407</left_val> + <right_val>0.5318108797073364</right_val></_></_> + <_> + <!-- tree 34 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 10 4 6 -1.</_> + <_>4 12 4 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0218715704977512</threshold> + <left_node>1</left_node> + <right_val>0.2327008992433548</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 13 3 2 -1.</_> + <_>4 14 3 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.5010299648565706e-005</threshold> + <left_val>0.5560722947120667</left_val> + <right_val>0.4301410019397736</right_val></_></_> + <_> + <!-- tree 35 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 16 2 3 -1.</_> + <_>9 17 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.3583700209856033e-003</threshold> + <left_node>1</left_node> + <right_val>0.6767637729644775</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 18 3 2 -1.</_> + <_>11 18 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.0057549960911274e-003</threshold> + <left_val>0.5194904208183289</left_val> + <right_val>0.3612853884696960</right_val></_></_> + <_> + <!-- tree 36 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 18 3 2 -1.</_> + <_>8 18 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.9030070398002863e-003</threshold> + <left_val>0.3237845003604889</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 10 4 2 -1.</_> + <_>1 11 4 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.8506693243980408e-003</threshold> + <left_val>0.1194851994514465</left_val> + <right_val>0.4991723895072937</right_val></_></_> + <_> + <!-- tree 37 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 4 6 3 -1.</_> + <_>12 5 6 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.7093670796602964e-003</threshold> + <left_node>1</left_node> + <right_val>0.4854960143566132</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>14 4 1 3 -1.</_> + <_>14 5 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.4138079714030027e-003</threshold> + <left_val>0.4872322976589203</left_val> + <right_val>0.5903577804565430</right_val></_></_> + <_> + <!-- tree 38 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>2 4 6 3 -1.</_> + <_>2 5 6 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.0300198644399643e-003</threshold> + <left_node>1</left_node> + <right_val>0.6547315716743469</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 4 1 3 -1.</_> + <_>5 5 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-9.7925681620836258e-004</threshold> + <left_val>0.5849273204803467</left_val> + <right_val>0.4554230868816376</right_val></_></_> + <_> + <!-- tree 39 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>14 12 3 3 -1.</_> + <_>14 13 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.3984439428895712e-003</threshold> + <left_node>1</left_node> + <right_val>0.4064626097679138</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>15 12 2 3 -1.</_> + <_>15 13 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.3372107474133372e-004</threshold> + <left_val>0.5399543046951294</left_val> + <right_val>0.4152809977531433</right_val></_></_> + <_> + <!-- tree 40 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 16 4 3 -1.</_> + <_>3 17 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0105510596185923</threshold> + <left_node>1</left_node> + <right_val>0.1796680986881256</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 0 4 2 -1.</_> + <_>8 1 4 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.8344102550763637e-005</threshold> + <left_val>0.4251863062381744</left_val> + <right_val>0.5413522720336914</right_val></_></_> + <_> + <!-- tree 41 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 0 20 1 -1.</_> + <_>0 0 10 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0410223081707954</threshold> + <left_node>1</left_node> + <right_val>0.5228124856948853</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 7 3 4 -1.</_> + <_>10 7 1 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.5065628625452518e-003</threshold> + <left_val>0.4853743016719818</left_val> + <right_val>0.6093444228172302</right_val></_></_> + <_> + <!-- tree 42 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 0 20 1 -1.</_> + <_>10 0 10 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0410223081707954</threshold> + <left_node>1</left_node> + <right_val>0.2205024063587189</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 7 3 4 -1.</_> + <_>9 7 1 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.3961377125233412e-004</threshold> + <left_val>0.5692731738090515</left_val> + <right_val>0.4468756914138794</right_val></_></_> + <_> + <!-- tree 43 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 6 19 3 -1.</_> + <_>1 7 19 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0686960369348526</threshold> + <left_val>0.1483314037322998</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 7 4 2 -1.</_> + <_>12 8 4 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.8447940237820148e-003</threshold> + <left_val>0.6211283802986145</left_val> + <right_val>0.4966601133346558</right_val></_></_> + <_> + <!-- tree 44 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 8 3 3 -1.</_> + <_>7 9 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.0959919355809689e-003</threshold> + <left_val>0.2294671982526779</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 7 3 3 -1.</_> + <_>8 7 1 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.2068301700055599e-003</threshold> + <left_val>0.6407091021537781</left_val> + <right_val>0.4748562872409821</right_val></_></_> + <_> + <!-- tree 45 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>2 9 16 3 -1.</_> + <_>2 10 16 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.1332789957523346e-004</threshold> + <left_node>1</left_node> + <right_val>0.5354936122894287</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 4 2 12 -1.</_> + <_>9 8 2 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.1175677999854088</threshold> + <left_val>0.5136978030204773</left_val> + <right_val>0.0105957398191094</right_val></_></_> + <_> + <!-- tree 46 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 3 2 5 -1.</_> + <_>8 3 1 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.9354289987822995e-005</threshold> + <left_val>0.3711803853511810</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 7 2 3 -1.</_> + <_>9 8 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.3173691742122173e-003</threshold> + <left_val>0.1712073981761932</left_val> + <right_val>0.5061758160591126</right_val></_></_> + <_> + <!-- tree 47 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 14 4 3 -1.</_> + <_>9 15 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0149414995685220</threshold> + <left_node>1</left_node> + <right_val>0.6729118824005127</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 8 6 4 -1.</_> + <_>10 8 3 2 2.</_> + <_>7 10 3 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.0789399277418852e-003</threshold> + <left_val>0.4410645961761475</left_val> + <right_val>0.5444027781486511</right_val></_></_> + <_> + <!-- tree 48 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 7 2 2 -1.</_> + <_>10 7 1 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.0736219640821218e-004</threshold> + <left_val>0.5568910837173462</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 5 6 6 -1.</_> + <_>7 5 2 6 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.1247111037373543e-003</threshold> + <left_val>0.5023869276046753</left_val> + <right_val>0.3562405109405518</right_val></_></_> + <_> + <!-- tree 49 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 1 3 6 -1.</_> + <_>10 1 1 6 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.8919378574937582e-004</threshold> + <left_node>1</left_node> + <right_val>0.5456786155700684</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 5 12 2 -1.</_> + <_>8 5 4 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0101795801892877</threshold> + <left_val>0.5545138716697693</left_val> + <right_val>0.4622310996055603</right_val></_></_> + <_> + <!-- tree 50 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 2 6 4 -1.</_> + <_>6 2 2 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.7506109327077866e-003</threshold> + <left_node>1</left_node> + <right_val>0.4942536056041718</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 7 8 2 -1.</_> + <_>4 8 8 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0106013296172023</threshold> + <left_val>0.2961233854293823</left_val> + <right_val>0.5964338779449463</right_val></_></_> + <_> + <!-- tree 51 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 6 14 6 -1.</_> + <_>10 6 7 3 2.</_> + <_>3 9 7 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.1466780714690685e-003</threshold> + <left_val>0.5495228767395020</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 6 14 3 -1.</_> + <_>3 6 7 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0763211473822594</threshold> + <left_val>0.5173959136009216</left_val> + <right_val>0.2940216958522797</right_val></_></_> + <_> + <!-- tree 52 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 5 2 2 -1.</_> + <_>0 6 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.5027689514681697e-003</threshold> + <left_val>0.3106299936771393</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 13 4 3 -1.</_> + <_>8 14 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0122666703537107</threshold> + <left_val>0.4651150107383728</left_val> + <right_val>0.6846613883972168</right_val></_></_> + <_> + <!-- tree 53 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>13 0 3 20 -1.</_> + <_>14 0 1 20 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0311185792088509</threshold> + <left_node>1</left_node> + <right_val>0.5226057171821594</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 8 10 3 -1.</_> + <_>10 9 10 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0289055891335011</threshold> + <left_val>0.5182244181632996</left_val> + <right_val>0.2705428004264832</right_val></_></_> + <_> + <!-- tree 54 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 0 3 20 -1.</_> + <_>5 0 1 20 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0475983805954456</threshold> + <left_node>1</left_node> + <right_val>0.1109512001276016</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 8 10 3 -1.</_> + <_>0 9 10 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0308085493743420</threshold> + <left_val>0.4938625097274780</left_val> + <right_val>0.1404110938310623</right_val></_></_> + <_> + <!-- tree 55 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 5 3 4 -1.</_> + <_>13 5 1 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.1277810446918011e-004</threshold> + <left_node>1</left_node> + <right_val>0.4392356872558594</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 7 12 4 -1.</_> + <_>10 7 4 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0789699628949165</threshold> + <left_val>0.5216552019119263</left_val> + <right_val>0.2294113934040070</right_val></_></_> + <_> + <!-- tree 56 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 14 6 6 -1.</_> + <_>1 14 3 3 2.</_> + <_>4 17 3 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0102579500526190</threshold> + <left_val>0.6176652908325195</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 17 6 2 -1.</_> + <_>1 18 6 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.2604889925569296e-003</threshold> + <left_val>0.5236222743988037</left_val> + <right_val>0.3328965902328491</right_val></_></_> + <_> + <!-- tree 57 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>14 8 6 12 -1.</_> + <_>17 8 3 6 2.</_> + <_>14 14 3 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0334904603660107</threshold> + <left_node>1</left_node> + <right_val>0.4866186976432800</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>18 5 2 2 -1.</_> + <_>18 6 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.9202767442911863e-004</threshold> + <left_val>0.4116407036781311</left_val> + <right_val>0.5395640134811401</right_val></_></_> + <_> + <!-- tree 58 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 16 4 2 -1.</_> + <_>3 16 2 1 2.</_> + <_>5 17 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.0320750738610514e-005</threshold> + <left_node>1</left_node> + <right_val>0.5610736012458801</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>2 16 6 2 -1.</_> + <_>4 16 2 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.4369680583477020e-004</threshold> + <left_val>0.5621389150619507</left_val> + <right_val>0.3461203873157501</right_val></_></_> + <_> + <!-- tree 59 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>14 8 6 12 -1.</_> + <_>17 8 3 6 2.</_> + <_>14 14 3 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0334904603660107</threshold> + <left_node>1</left_node> + <right_val>0.4896762073040009</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>18 5 2 2 -1.</_> + <_>18 6 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.9202767442911863e-004</threshold> + <left_val>0.4305404126644135</left_val> + <right_val>0.5340713858604431</right_val></_></_> + <_> + <!-- tree 60 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 16 9 2 -1.</_> + <_>8 16 3 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.0550889894366264e-003</threshold> + <left_val>0.5544999837875366</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 14 6 6 -1.</_> + <_>3 14 3 3 2.</_> + <_>6 17 3 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.4353571720421314e-003</threshold> + <left_val>0.6038540005683899</left_val> + <right_val>0.3746592998504639</right_val></_></_> + <_> + <!-- tree 61 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>14 8 6 12 -1.</_> + <_>17 8 3 6 2.</_> + <_>14 14 3 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0841704234480858</threshold> + <left_node>1</left_node> + <right_val>0.5007348060607910</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>11 7 2 12 -1.</_> + <_>11 11 2 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.7419027909636497e-003</threshold> + <left_val>0.5298097133636475</left_val> + <right_val>0.4716145098209381</right_val></_></_> + <_> + <!-- tree 62 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 8 6 12 -1.</_> + <_>0 8 3 6 2.</_> + <_>3 14 3 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0102781504392624</threshold> + <left_node>1</left_node> + <right_val>0.6269375085830689</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 7 2 12 -1.</_> + <_>7 11 2 4 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.8800862170755863e-003</threshold> + <left_val>0.5154827833175659</left_val> + <right_val>0.3813040852546692</right_val></_></_> + <_> + <!-- tree 63 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>14 12 1 2 -1.</_> + <_>14 13 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.9679190346505493e-006</threshold> + <left_node>1</left_node> + <right_val>0.4440239965915680</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 13 8 1 -1.</_> + <_>12 13 4 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.2419527461752295e-004</threshold> + <left_val>0.4697534143924713</left_val> + <right_val>0.5485504269599915</right_val></_></_> + <_> + <!-- tree 64 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 3 16 6 -1.</_> + <_>0 6 16 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.5268318392336369e-003</threshold> + <left_val>0.5513604879379273</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 4 8 2 -1.</_> + <_>1 4 4 1 2.</_> + <_>5 5 4 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.6128671430051327e-004</threshold> + <left_val>0.3618639111518860</left_val> + <right_val>0.5838456749916077</right_val></_></_> + <_> + <!-- tree 65 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>14 12 1 2 -1.</_> + <_>14 13 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.4810510221868753e-003</threshold> + <left_node>1</left_node> + <right_val>0.2523222863674164</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>15 12 2 3 -1.</_> + <_>15 13 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.0480589699000120e-003</threshold> + <left_val>0.4117257893085480</left_val> + <right_val>0.5392996072769165</right_val></_></_> + <_> + <!-- tree 66 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 16 3 3 -1.</_> + <_>8 17 3 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.1287907883524895e-003</threshold> + <left_val>0.6726329922676086</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 12 1 2 -1.</_> + <_>5 13 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.1682329932227731e-004</threshold> + <left_val>0.5041192770004273</left_val> + <right_val>0.3607729077339172</right_val></_></_> + <_> + <!-- tree 67 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>13 4 3 15 -1.</_> + <_>14 4 1 15 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0399094782769680</threshold> + <left_val>0.1563739031553268</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>17 3 2 6 -1.</_> + <_>18 3 1 3 2.</_> + <_>17 6 1 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.5859459526836872e-003</threshold> + <left_val>0.4891980886459351</left_val> + <right_val>0.5779845118522644</right_val></_></_> + <_> + <!-- tree 68 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 4 3 15 -1.</_> + <_>5 4 1 15 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0226902291178703</threshold> + <left_val>0.2186879068613052</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 3 2 6 -1.</_> + <_>1 3 1 3 2.</_> + <_>2 6 1 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.0916070789098740e-003</threshold> + <left_val>0.4771577119827271</left_val> + <right_val>0.6099231243133545</right_val></_></_> + <_> + <!-- tree 69 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 15 12 4 -1.</_> + <_>7 17 12 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0247154198586941</threshold> + <left_val>0.3463996946811676</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 0 19 3 -1.</_> + <_>1 1 19 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0134194502606988</threshold> + <left_val>0.3630692958831787</left_val> + <right_val>0.5252196192741394</right_val></_></_> + <_> + <!-- tree 70 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 17 10 2 -1.</_> + <_>3 17 5 1 2.</_> + <_>8 18 5 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.0629472136497498e-003</threshold> + <left_val>0.6666321754455566</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>2 5 10 15 -1.</_> + <_>2 10 10 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.0921030081808567e-003</threshold> + <left_val>0.3399547040462494</left_val> + <right_val>0.5035697817802429</right_val></_></_> + <_> + <!-- tree 71 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>13 8 3 4 -1.</_> + <_>13 10 3 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0259618591517210</threshold> + <left_val>0.5036802887916565</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>19 13 1 2 -1.</_> + <_>19 14 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.7908669542521238e-004</threshold> + <left_val>0.5418530702590942</left_val> + <right_val>0.4318976998329163</right_val></_></_> + <_> + <!-- tree 72 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 8 3 4 -1.</_> + <_>4 10 3 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.1546850223094225e-003</threshold> + <left_val>0.7221025228500366</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 13 1 2 -1.</_> + <_>0 14 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.1397759662941098e-003</threshold> + <left_val>0.3320972919464111</left_val> + <right_val>0.5024433732032776</right_val></_></_> + <_> + <!-- tree 73 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 7 2 12 -1.</_> + <_>12 13 2 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0478402115404606</threshold> + <left_val>0.1938765048980713</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>14 7 2 2 -1.</_> + <_>15 7 1 1 2.</_> + <_>14 8 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.1577088995836675e-004</threshold> + <left_val>0.4802188873291016</left_val> + <right_val>0.5730714797973633</right_val></_></_> + <_> + <!-- tree 74 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 3 8 2 -1.</_> + <_>5 4 8 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.4247039477340877e-004</threshold> + <left_val>0.4262515008449554</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 2 2 6 -1.</_> + <_>0 4 2 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.4479350065812469e-003</threshold> + <left_val>0.5719171166419983</left_val> + <right_val>0.4064153134822846</right_val></_></_> + <_> + <!-- tree 75 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>18 2 2 12 -1.</_> + <_>19 2 1 6 2.</_> + <_>18 8 1 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0157015100121498</threshold> + <left_val>0.4995726048946381</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>18 1 1 2 -1.</_> + <_>18 2 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.7805729769170284e-004</threshold> + <left_val>0.5289286971092224</left_val> + <right_val>0.4581728875637054</right_val></_></_> + <_> + <!-- tree 76 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 2 2 12 -1.</_> + <_>0 2 1 6 2.</_> + <_>1 8 1 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.9010509606450796e-003</threshold> + <left_val>0.6012148261070252</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 1 1 2 -1.</_> + <_>1 2 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.0830519497394562e-004</threshold> + <left_val>0.5057976841926575</left_val> + <right_val>0.3599432110786438</right_val></_></_> + <_> + <!-- tree 77 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>16 4 4 14 -1.</_> + <_>18 4 2 7 2.</_> + <_>16 11 2 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0515300296247005</threshold> + <left_node>1</left_node> + <right_val>0.4991796910762787</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 14 1 6 -1.</_> + <_>10 17 1 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.7163449956569821e-004</threshold> + <left_val>0.4675469994544983</left_val> + <right_val>0.5374773144721985</right_val></_></_> + <_> + <!-- tree 78 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 4 4 14 -1.</_> + <_>0 4 2 7 2.</_> + <_>2 11 2 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0236142799258232</threshold> + <left_node>1</left_node> + <right_val>0.6586478948593140</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 14 1 6 -1.</_> + <_>9 17 1 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.6427798699587584e-004</threshold> + <left_val>0.3853296041488648</left_val> + <right_val>0.5196040272712708</right_val></_></_> + <_> + <!-- tree 79 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 14 4 3 -1.</_> + <_>9 15 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.6903959959745407e-003</threshold> + <left_node>1</left_node> + <right_val>0.6004235744476318</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 7 12 2 -1.</_> + <_>8 7 4 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.8789530992507935e-003</threshold> + <left_val>0.3293227851390839</left_val> + <right_val>0.5245236754417419</right_val></_></_> + <_> + <!-- tree 80 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 8 4 3 -1.</_> + <_>0 9 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.8537332117557526e-003</threshold> + <left_val>0.2565914094448090</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 7 2 2 -1.</_> + <_>4 7 1 1 2.</_> + <_>5 8 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.9893810693174601e-004</threshold> + <left_val>0.4615494012832642</left_val> + <right_val>0.5942432284355164</right_val></_></_> + <_> + <!-- tree 81 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>13 7 2 1 -1.</_> + <_>13 7 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.3354700058698654e-004</threshold> + <left_val>0.5487375855445862</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>11 4 4 5 -1.</_> + <_>11 4 2 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.0165109997615218e-003</threshold> + <left_val>0.4578359127044678</left_val> + <right_val>0.5426927804946899</right_val></_></_> + <_> + <!-- tree 82 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 8 3 3 -1.</_> + <_>5 8 1 3 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>9.1216771397739649e-004</threshold> + <left_node>1</left_node> + <right_val>0.3939461112022400</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>0 3 8 1 -1.</_> + <_>4 3 4 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.0080259526148438e-003</threshold> + <left_val>0.4049789905548096</left_val> + <right_val>0.5520703792572022</right_val></_></_> + <_> + <!-- tree 83 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>13 7 2 1 -1.</_> + <_>13 7 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.3102490629535168e-004</threshold> + <left_node>1</left_node> + <right_val>0.4879088997840881</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>14 7 3 2 -1.</_> + <_>15 7 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.5228749988600612e-004</threshold> + <left_val>0.4844943881034851</left_val> + <right_val>0.5512825846672058</right_val></_></_> + <_> + <!-- tree 84 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 7 2 1 -1.</_> + <_>6 7 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.2130969844292849e-004</threshold> + <left_node>1</left_node> + <right_val>0.4367971122264862</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>3 7 3 2 -1.</_> + <_>4 7 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.5112989785848185e-005</threshold> + <left_val>0.6425955295562744</left_val> + <right_val>0.4881826937198639</right_val></_></_> + <_> + <!-- tree 85 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>18 5 2 2 -1.</_> + <_>18 6 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.0125829400494695e-004</threshold> + <left_node>1</left_node> + <right_val>0.5372099280357361</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 14 2 2 -1.</_> + <_>13 14 1 1 2.</_> + <_>12 15 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.5766851184889674e-004</threshold> + <left_val>0.5834553241729736</left_val> + <right_val>0.4869078099727631</right_val></_></_> + <_> + <!-- tree 86 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>0 5 2 2 -1.</_> + <_>0 6 2 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.2220421386882663e-004</threshold> + <left_node>1</left_node> + <right_val>0.3824636936187744</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 14 2 2 -1.</_> + <_>6 14 1 1 2.</_> + <_>7 15 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.4663359615951777e-003</threshold> + <left_val>0.4813488125801086</left_val> + <right_val>0.6966739296913147</right_val></_></_> + <_> + <!-- tree 87 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 12 6 5 -1.</_> + <_>9 12 2 5 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0495477095246315</threshold> + <left_val>0.0539276599884033</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 17 5 2 -1.</_> + <_>12 18 5 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.3017569435760379e-003</threshold> + <left_val>0.5337455868721008</left_val> + <right_val>0.4160748124122620</right_val></_></_> + <_> + <!-- tree 88 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 11 6 3 -1.</_> + <_>4 11 3 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.4914530590176582e-003</threshold> + <left_val>0.5997437238693237</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 9 6 3 -1.</_> + <_>4 9 3 3 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.6592369647696614e-003</threshold> + <left_val>0.3727185130119324</left_val> + <right_val>0.5115634202957153</right_val></_></_> + <_> + <!-- tree 89 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 7 2 12 -1.</_> + <_>12 13 2 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.4695458859205246e-003</threshold> + <left_val>0.5252035260200501</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>8 7 5 3 -1.</_> + <_>8 8 5 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.9810269847512245e-003</threshold> + <left_val>0.5256717801094055</left_val> + <right_val>0.3934406042098999</right_val></_></_> + <_> + <!-- tree 90 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 7 2 12 -1.</_> + <_>6 13 2 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0385369807481766</threshold> + <left_val>0.2061924934387207</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 2 9 18 -1.</_> + <_>4 2 3 18 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.2827565073966980</threshold> + <left_val>0.0618832111358643</left_val> + <right_val>0.4925057888031006</right_val></_></_> + <_> + <!-- tree 91 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 17 5 2 -1.</_> + <_>12 18 5 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-9.0301828458905220e-003</threshold> + <left_val>0.3157590031623840</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 7 12 2 -1.</_> + <_>4 7 6 2 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0438662692904472</threshold> + <left_val>0.2033682018518448</left_val> + <right_val>0.5164769887924194</right_val></_></_> + <_> + <!-- tree 92 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>6 7 6 1 -1.</_> + <_>8 7 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.5701069757342339e-003</threshold> + <left_val>0.6611183285713196</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>7 3 3 2 -1.</_> + <_>8 3 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.3362410720437765e-003</threshold> + <left_val>0.2807789146900177</left_val> + <right_val>0.4962876141071320</right_val></_></_> + <_> + <!-- tree 93 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 4 3 1 -1.</_> + <_>10 4 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>5.3960331715643406e-003</threshold> + <left_val>0.5146387815475464</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>11 11 3 1 -1.</_> + <_>12 11 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.6297608856111765e-003</threshold> + <left_val>0.6284487843513489</left_val> + <right_val>0.4955588877201080</right_val></_></_> + <_> + <!-- tree 94 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>8 4 3 1 -1.</_> + <_>9 4 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-3.8577478844672441e-003</threshold> + <left_val>0.1486748009920120</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 11 3 1 -1.</_> + <_>7 11 1 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.3963800156489015e-003</threshold> + <left_val>0.4701338112354279</left_val> + <right_val>0.6320971846580505</right_val></_></_> + <_> + <!-- tree 95 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>12 13 6 6 -1.</_> + <_>12 15 6 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-8.8699469342827797e-003</threshold> + <left_node>1</left_node> + <right_val>0.5286818146705627</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>14 13 1 6 -1.</_> + <_>14 15 1 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-7.0626288652420044e-004</threshold> + <left_val>0.4648370146751404</left_val> + <right_val>0.5333210229873657</right_val></_></_> + <_> + <!-- tree 96 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>2 13 6 6 -1.</_> + <_>2 15 6 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.2645810171961784e-003</threshold> + <left_val>0.5084878206253052</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>1 5 18 1 -1.</_> + <_>7 5 6 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0615721009671688</threshold> + <left_val>0.3629625141620636</left_val> + <right_val>0.8757156729698181</right_val></_></_> + <_> + <!-- tree 97 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>4 7 12 2 -1.</_> + <_>10 7 6 1 2.</_> + <_>4 8 6 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.5381980016827583e-003</threshold> + <left_node>1</left_node> + <right_val>0.4856696128845215</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 1 8 10 -1.</_> + <_>10 1 4 5 2.</_> + <_>6 6 4 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.0877899155020714e-003</threshold> + <left_val>0.4584116041660309</left_val> + <right_val>0.5420240759849548</right_val></_></_> + <_> + <!-- tree 98 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>3 13 4 3 -1.</_> + <_>3 14 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.4308601431548595e-003</threshold> + <left_node>1</left_node> + <right_val>0.2707302868366242</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 13 4 3 -1.</_> + <_>6 14 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>7.0455260574817657e-003</threshold> + <left_val>0.5057486891746521</left_val> + <right_val>0.7026523947715759</right_val></_></_> + <_> + <!-- tree 99 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 14 4 3 -1.</_> + <_>9 15 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.3246440105140209e-003</threshold> + <left_node>1</left_node> + <right_val>0.4827278852462769</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 9 2 3 -1.</_> + <_>12 10 2 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.0276601288933307e-005</threshold> + <left_val>0.4247249066829681</left_val> + <right_val>0.5508763194084168</right_val></_></_> + <_> + <!-- tree 100 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 14 4 3 -1.</_> + <_>7 15 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0180845595896244</threshold> + <left_node>1</left_node> + <right_val>0.8104801177978516</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>9 0 2 1 -1.</_> + <_>10 0 1 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.4693520329892635e-004</threshold> + <left_val>0.5154619216918945</left_val> + <right_val>0.3514379858970642</right_val></_></_> + <_> + <!-- tree 101 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 0 10 5 -1.</_> + <_>5 0 5 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0269310399889946</threshold> + <left_node>1</left_node> + <right_val>0.4886888861656189</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 6 8 7 -1.</_> + <_>6 6 4 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-4.2346641421318054e-003</threshold> + <left_val>0.4622378051280975</left_val> + <right_val>0.5382478237152100</right_val></_></_> + <_> + <!-- tree 102 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 0 10 5 -1.</_> + <_>10 0 5 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0269471108913422</threshold> + <left_node>1</left_node> + <right_val>0.6366596221923828</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>6 6 8 7 -1.</_> + <_>10 6 4 7 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>4.6446882188320160e-003</threshold> + <left_val>0.5368506908416748</left_val> + <right_val>0.3765429854393005</right_val></_></_> + <_> + <!-- tree 103 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 9 10 8 -1.</_> + <_>10 9 5 4 2.</_> + <_>5 13 5 4 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-6.9577661342918873e-003</threshold> + <left_val>0.4234687089920044</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>10 0 4 10 -1.</_> + <_>12 0 2 5 2.</_> + <_>10 5 2 5 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>8.7609712500125170e-004</threshold> + <left_val>0.4672406017780304</left_val> + <right_val>0.5350683927536011</right_val></_></_> + <_> + <!-- tree 104 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>1 4 8 3 -1.</_> + <_>1 5 8 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>1.6103329835459590e-003</threshold> + <left_node>1</left_node> + <right_val>0.5732762813568115</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 4 8 3 -1.</_> + <_>4 5 8 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-1.2848590267822146e-003</threshold> + <left_val>0.5481799244880676</left_val> + <right_val>0.3784593045711517</right_val></_></_> + <_> + <!-- tree 105 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>9 7 4 3 -1.</_> + <_>9 8 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>0.0102435396984220</threshold> + <left_val>0.5155907273292542</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>12 8 3 12 -1.</_> + <_>12 14 3 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>2.6889349101111293e-004</threshold> + <left_val>0.5353189706802368</left_val> + <right_val>0.4387153983116150</right_val></_></_> + <_> + <!-- tree 106 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>7 7 4 3 -1.</_> + <_>7 8 4 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>3.7903659977018833e-003</threshold> + <left_val>0.5032002925872803</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>5 8 3 12 -1.</_> + <_>5 14 3 6 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0293696802109480</threshold> + <left_val>0.5873538851737976</left_val> + <right_val>0.2215445041656494</right_val></_></_> + <_> + <!-- tree 107 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>10 0 7 6 -1.</_> + <_>10 2 7 2 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>6.0743088833987713e-003</threshold> + <left_node>1</left_node> + <right_val>0.5417029857635498</right_val></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>2 1 18 1 -1.</_> + <_>8 1 6 1 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-0.0127107203006744</threshold> + <left_val>0.6056511998176575</left_val> + <right_val>0.4985181987285614</right_val></_></_> + <_> + <!-- tree 108 --> + <_> + <!-- root node --> + <feature> + <rects> + <_>5 0 3 8 -1.</_> + <_>6 0 1 8 3.</_></rects> + <tilted>0</tilted></feature> + <threshold>-5.9445449151098728e-003</threshold> + <left_val>0.3352069854736328</left_val> + <right_node>1</right_node></_> + <_> + <!-- node 1 --> + <feature> + <rects> + <_>4 7 4 2 -1.</_> + <_>4 8 4 1 2.</_></rects> + <tilted>0</tilted></feature> + <threshold>-2.8927479870617390e-003</threshold> + <left_val>0.6929240822792053</left_val> + <right_val>0.4778220057487488</right_val></_></_></trees> + <stage_threshold>53.7555694580078130</stage_threshold> + <parent>18</parent> + <next>-1</next></_></stages></haarcascade_frontalface_alt2> +</opencv_storage> diff --git a/wagtail/wagtailimages/utils/feature_detection.py b/wagtail/wagtailimages/utils/feature_detection.py new file mode 100644 index 000000000..6381fabf7 --- /dev/null +++ b/wagtail/wagtailimages/utils/feature_detection.py @@ -0,0 +1,84 @@ +import os + +try: + import cv + + opencv_available = True +except ImportError: + try: + import cv2.cv as cv + + opencv_available = True + except ImportError: + opencv_available = False + + +from wagtail.wagtailimages.utils.focal_point import FocalPoint, combine_focal_points + + +class FeatureDetector(object): + def __init__(self, image_size, image_mode, image_data): + self.image_size = image_size + self.image_mode = image_mode + self.image_data = image_data + + def opencv_grey_image(self): + image = cv.CreateImageHeader(self.image_size, cv.IPL_DEPTH_8U, 3) + cv.SetData(image, self.image_data) + + gray_image = cv.CreateImage(self.image_size, 8, 1) + convert_mode = getattr(cv, 'CV_%s2GRAY' % self.image_mode) + cv.CvtColor(image, gray_image, convert_mode) + + return gray_image + + def detect_features(self): + if opencv_available: + image = self.opencv_grey_image() + rows = self.image_size[0] + cols = self.image_size[1] + + eig_image = cv.CreateMat(rows, cols, cv.CV_32FC1) + temp_image = cv.CreateMat(rows, cols, cv.CV_32FC1) + points = cv.GoodFeaturesToTrack(image, eig_image, temp_image, 20, 0.04, 1.0, useHarris=False) + + if points: + return [FocalPoint(x, y, 1) for x, y in points] + + return [] + + def detect_faces(self): + if opencv_available: + cascade_filename = os.path.join(os.path.dirname(__file__), 'face_detection', 'haarcascade_frontalface_alt2.xml') + cascade = cv.Load(cascade_filename) + image = self.opencv_grey_image() + + cv.EqualizeHist(image, image) + + min_size = (40, 40) + haar_scale = 1.1 + min_neighbors = 3 + haar_flags = 0 + + faces = cv.HaarDetectObjects( + image, cascade, cv.CreateMemStorage(0), + haar_scale, min_neighbors, haar_flags, min_size + ) + + if faces: + return [FocalPoint.from_square(face[0][0], face[0][1], face[0][2], face[0][3]) for face in faces] + + return [] + + def get_focal_point(self): + # Face detection + faces = self.detect_faces() + + if faces: + return combine_focal_points(faces) + + # Feature detection + features = self.detect_features() + + if features: + return combine_focal_points(features) diff --git a/wagtail/wagtailimages/utils/focal_point.py b/wagtail/wagtailimages/utils/focal_point.py new file mode 100644 index 000000000..55593db66 --- /dev/null +++ b/wagtail/wagtailimages/utils/focal_point.py @@ -0,0 +1,98 @@ +# https://github.com/thumbor/thumbor/blob/8a50bfba9443e8d2a1a691ab20eeb525815be597/thumbor/point.py + +# thumbor imaging service +# https://github.com/globocom/thumbor/wiki + +# Licensed under the MIT license: +# http://www.opensource.org/licenses/mit-license +# Copyright (c) 2011 globo.com timehome@corp.globo.com + + +class FocalPoint(object): + ALIGNMENT_PERCENTAGES = { + 'left': 0.0, + 'center': 0.5, + 'right': 1.0, + 'top': 0.0, + 'middle': 0.5, + 'bottom': 1.0 + } + + def to_dict(self): + return { + 'x': self.x, + 'y': self.y, + 'z': self.weight, + 'height': self.height, + 'width': self.width, + 'origin': self.origin + } + + @classmethod + def from_dict(cls, values): + return cls( + x=float(values['x']), + y=float(values['y']), + weight=float(values['z']), + width=float(values.get('width', 1)), + height=float(values.get('height', 1)), + origin=values.get('origin', 'alignment') + ) + + def __init__(self, x, y, height=1, width=1, weight=1.0, origin="alignment"): + self.x = x + self.y = y + self.height = height + self.width = width + self.weight = weight + self.origin = origin + + @classmethod + def from_square(cls, x, y, width, height, origin='detection'): + center_x = x + (width / 2) + center_y = y + (height / 2) + return cls(center_x, center_y, height=height, width=width, weight=width * height, origin=origin) + + @classmethod + def from_alignment(cls, halign, valign, width, height): + x = width * cls.ALIGNMENT_PERCENTAGES[halign] + y = height * cls.ALIGNMENT_PERCENTAGES[valign] + + return cls(x, y) + + def __repr__(self): + return 'FocalPoint(x: %d, y: %d, width: %d, height: %d, weight: %d, origin: %s)' % ( + self.x, self.y, self.width, self.height, self.weight, self.origin + ) + + def get_key(self): + return "%(x)d-%(y)d-%(width)dx%(height)d" % self.to_dict() + + +def combine_focal_points(focal_points): + # https://github.com/thumbor/thumbor/blob/fc75f2d617942e3548986fe8403ad717fc9978ba/thumbor/transformer.py#L255-L269 + if not focal_points: + return + + total_weight = 0.0 + total_x = 0.0 + total_y = 0.0 + + for focal_point in focal_points: + total_weight += focal_point.weight + + total_x += focal_point.x * focal_point.weight + total_y += focal_point.y * focal_point.weight + + x = total_x / total_weight + y = total_y / total_weight + + min_x = min([point.x - point.width / 2 for point in focal_points]) + min_y = min([point.y - point.height / 2 for point in focal_points]) + max_x = max([point.x + point.width / 2 for point in focal_points]) + max_y = max([point.y + point.height / 2 for point in focal_points]) + + width = max_x - min_x + height = max_y - min_y + + return FocalPoint(x, y, width=width, height=height, weight=total_weight) diff --git a/wagtail/wagtailimages/utils.py b/wagtail/wagtailimages/utils/validators.py similarity index 50% rename from wagtail/wagtailimages/utils.py rename to wagtail/wagtailimages/utils/validators.py index 2f0c0e676..13604a88e 100644 --- a/wagtail/wagtailimages/utils.py +++ b/wagtail/wagtailimages/utils/validators.py @@ -3,7 +3,7 @@ import os from PIL import Image from django.core.exceptions import ValidationError -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import ugettext_lazy as _ def validate_image_format(f): @@ -14,15 +14,23 @@ def validate_image_format(f): extension = 'jpeg' if extension not in ['gif', 'jpeg', 'png']: - raise ValidationError(_("Not a valid image. Please use a gif, jpeg or png file with the correct file extension.")) + raise ValidationError(_("Not a valid image. Please use a gif, jpeg or png file with the correct file extension (*.gif, *.jpg or *.png).")) if not f.closed: # Open image file file_position = f.tell() f.seek(0) - image = Image.open(f) + + try: + image = Image.open(f) + except IOError: + # Uploaded file is not even an image file (or corrupted) + raise ValidationError(_("Not a valid image. Please use a gif, jpeg or png file with the correct file extension (*.gif, *.jpg or *.png).")) + f.seek(file_position) # Check that the internal format matches the extension + # It is possible to upload PSD files if their extension is set to jpg, png or gif. This should catch them out if image.format.upper() != extension.upper(): - raise ValidationError(_("Not a valid %s image. Please use a gif, jpeg or png file with the correct file extension.") % (extension.upper())) + raise ValidationError(_("Not a valid %s image. Please use a gif, jpeg or png file with the correct file extension (*.gif, *.jpg or *.png).") % (extension.upper())) + diff --git a/wagtail/wagtailimages/views/frontend.py b/wagtail/wagtailimages/views/frontend.py new file mode 100644 index 000000000..74ec8456f --- /dev/null +++ b/wagtail/wagtailimages/views/frontend.py @@ -0,0 +1,20 @@ +from django.shortcuts import get_object_or_404 +from django.http import HttpResponse +from django.core.exceptions import PermissionDenied +from django.views.decorators.cache import cache_page + +from wagtail.wagtailimages.models import get_image_model, Filter +from wagtail.wagtailimages.utils.crypto import verify_signature + + +@cache_page(60 * 60 * 24 * 60) # Cache for 60 days +def serve(request, signature, image_id, filter_spec): + image = get_object_or_404(get_image_model(), id=image_id) + + if not verify_signature(signature.encode(), image_id, filter_spec): + raise PermissionDenied + + try: + return Filter(spec=filter_spec).process_image(image.file.file, HttpResponse(content_type='image/jpeg'), focal_point=image.focal_point) + except Filter.InvalidFilterSpecError: + return HttpResponse("Invalid filter spec: " + filter_spec, content_type='text/plain', status=400) diff --git a/wagtail/wagtailimages/views/images.py b/wagtail/wagtailimages/views/images.py index 64f27dbda..27ad96a47 100644 --- a/wagtail/wagtailimages/views/images.py +++ b/wagtail/wagtailimages/views/images.py @@ -1,3 +1,5 @@ +import json + from django.shortcuts import render, redirect, get_object_or_404 from django.contrib import messages from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger @@ -5,11 +7,15 @@ from django.contrib.auth.decorators import permission_required from django.core.exceptions import PermissionDenied from django.utils.translation import ugettext as _ from django.views.decorators.vary import vary_on_headers +from django.core.urlresolvers import reverse, NoReverseMatch +from django.http import HttpResponse +from wagtail.wagtailcore.models import Site from wagtail.wagtailadmin.forms import SearchForm -from wagtail.wagtailimages.models import get_image_model -from wagtail.wagtailimages.forms import get_image_form +from wagtail.wagtailimages.models import get_image_model, Filter +from wagtail.wagtailimages.forms import get_image_form, URLGeneratorForm +from wagtail.wagtailimages.utils.crypto import generate_signature @permission_required('wagtailimages.add_image') @@ -32,7 +38,6 @@ def index(request): if form.is_valid(): query_string = form.cleaned_data['q'] - is_searching = True if not request.user.has_perm('wagtailimages.change_image'): # restrict to the user's own images images = Image.search(query_string, filters={'uploaded_by_user_id': request.user.id}) @@ -98,12 +103,79 @@ def edit(request, image_id): else: form = ImageForm(instance=image) + # Check if we should enable the frontend url generator + try: + reverse('wagtailimages_serve', args=('foo', '1', 'bar')) + url_generator_enabled = True + except NoReverseMatch: + url_generator_enabled = False + return render(request, "wagtailimages/images/edit.html", { 'image': image, 'form': form, + 'url_generator_enabled': url_generator_enabled, }) +@permission_required('wagtailadmin.access_admin') # more specific permission tests are applied within the view +def url_generator(request, image_id): + image = get_object_or_404(get_image_model(), id=image_id) + + if not image.is_editable_by_user(request.user): + raise PermissionDenied + + form = URLGeneratorForm(initial={ + 'filter_method': 'original', + 'width': image.width, + 'height': image.height, + }) + + return render(request, "wagtailimages/images/url_generator.html", { + 'image': image, + 'form': form, + }) + + +def json_response(document, status=200): + return HttpResponse(json.dumps(document), content_type='application/json', status=status) + + +@permission_required('wagtailadmin.access_admin') +def generate_url(request, image_id, filter_spec): + # Get the image + Image = get_image_model() + try: + image = Image.objects.get(id=image_id) + except Image.DoesNotExist: + return json_response({ + 'error': "Cannot find image." + }, status=404) + + # Check if this user has edit permission on this image + if not image.is_editable_by_user(request.user): + return json_response({ + 'error': "You do not have permission to generate a URL for this image." + }, status=403) + + # Parse the filter spec to make sure its valid + if not Filter(spec=filter_spec).is_valid(): + return json_response({ + 'error': "Invalid filter spec." + }, status=400) + + # Generate url + signature = generate_signature(image_id, filter_spec) + url = reverse('wagtailimages_serve', args=(signature, image_id, filter_spec)) + + # Get site root url + try: + site_root_url = Site.objects.get(is_default_site=True).root_url + except Site.DoesNotExist: + site_root_url = Site.objects.first().root_url + + return json_response({'url': site_root_url + url, 'local_url': url}, status=200) + + @permission_required('wagtailadmin.access_admin') # more specific permission tests are applied within the view def delete(request, image_id): image = get_object_or_404(get_image_model(), id=image_id) @@ -141,3 +213,24 @@ def add(request): return render(request, "wagtailimages/images/add.html", { 'form': form, }) + + +@permission_required('wagtailadmin.access_admin') +def usage(request, image_id): + image = get_object_or_404(get_image_model(), id=image_id) + + # Pagination + p = request.GET.get('p', 1) + paginator = Paginator(image.get_usage(), 20) + + try: + used_by = paginator.page(p) + except PageNotAnInteger: + used_by = paginator.page(1) + except EmptyPage: + used_by = paginator.page(paginator.num_pages) + + return render(request, "wagtailimages/images/usage.html", { + 'image': image, + 'used_by': used_by + }) diff --git a/wagtail/wagtailimages/views/multiple.py b/wagtail/wagtailimages/views/multiple.py new file mode 100644 index 000000000..5bc76fa7c --- /dev/null +++ b/wagtail/wagtailimages/views/multiple.py @@ -0,0 +1,113 @@ +import json + +from django.shortcuts import render, get_object_or_404 +from django.contrib.auth.decorators import permission_required +from django.views.decorators.http import require_POST +from django.core.exceptions import PermissionDenied, ValidationError +from django.views.decorators.vary import vary_on_headers +from django.http import HttpResponse, HttpResponseBadRequest +from django.template import RequestContext +from django.template.loader import render_to_string +from django.utils.translation import ugettext as _ + +from wagtail.wagtailimages.models import get_image_model +from wagtail.wagtailimages.forms import get_image_form_for_multi +from wagtail.wagtailimages.utils.validators import validate_image_format + + +def json_response(document): + return HttpResponse(json.dumps(document), content_type='application/json') + + +@permission_required('wagtailimages.add_image') +@vary_on_headers('X-Requested-With') +def add(request): + Image = get_image_model() + ImageForm = get_image_form_for_multi() + + if request.method == 'POST': + if not request.is_ajax(): + return HttpResponseBadRequest("Cannot POST to this view without AJAX") + + if not request.FILES: + return HttpResponseBadRequest("Must upload a file") + + # Check that the uploaded file is valid + try: + validate_image_format(request.FILES['files[]']) + except ValidationError as e: + return json_response({ + 'success': False, + 'error_message': '\n'.join(e.messages), + }) + + # Save it + image = Image(uploaded_by_user=request.user, title=request.FILES['files[]'].name, file=request.FILES['files[]']) + image.save() + + # Success! Send back an edit form for this image to the user + form = ImageForm(instance=image, prefix='image-%d' % image.id) + + return json_response({ + 'success': True, + 'image_id': int(image.id), + 'form': render_to_string('wagtailimages/multiple/edit_form.html', { + 'image': image, + 'form': form, + }, context_instance=RequestContext(request)), + }) + + + return render(request, 'wagtailimages/multiple/add.html', {}) + + +@require_POST +@permission_required('wagtailadmin.access_admin') # more specific permission tests are applied within the view +def edit(request, image_id, callback=None): + Image = get_image_model() + ImageForm = get_image_form_for_multi() + + image = get_object_or_404(Image, id=image_id) + + if not request.is_ajax(): + return HttpResponseBadRequest("Cannot POST to this view without AJAX") + + if not image.is_editable_by_user(request.user): + raise PermissionDenied + + form = ImageForm(request.POST, request.FILES, instance=image, prefix='image-'+image_id) + + if form.is_valid(): + form.save() + return json_response({ + 'success': True, + 'image_id': int(image_id), + }) + else: + return json_response({ + 'success': False, + 'image_id': int(image_id), + 'form': render_to_string('wagtailimages/multiple/edit_form.html', { + 'image': image, + 'form': form, + }, context_instance=RequestContext(request)), + }) + + +@require_POST +@permission_required('wagtailadmin.access_admin') # more specific permission tests are applied within the view +def delete(request, image_id): + image = get_object_or_404(get_image_model(), id=image_id) + + if not request.is_ajax(): + return HttpResponseBadRequest("Cannot POST to this view without AJAX") + + if not image.is_editable_by_user(request.user): + raise PermissionDenied + + image.delete() + + return json_response({ + 'success': True, + 'image_id': int(image_id), + }) diff --git a/wagtail/wagtailimages/wagtail_hooks.py b/wagtail/wagtailimages/wagtail_hooks.py index 90ba83d37..b4f2bac19 100644 --- a/wagtail/wagtailimages/wagtail_hooks.py +++ b/wagtail/wagtailimages/wagtail_hooks.py @@ -1,24 +1,64 @@ from django.conf import settings from django.conf.urls import include, url from django.core import urlresolvers +from django.core.exceptions import ImproperlyConfigured from django.utils.html import format_html, format_html_join from django.utils.translation import ugettext_lazy as _ from wagtail.wagtailcore import hooks from wagtail.wagtailadmin.menu import MenuItem -from wagtail.wagtailimages import urls +from wagtail.wagtailimages import admin_urls @hooks.register('register_admin_urls') def register_admin_urls(): return [ - url(r'^images/', include(urls)), + url(r'^images/', include(admin_urls)), ] +# Check for the presence of a pre-Wagtail-0.3-style urlconf, and fail loudly if one is found. +# Prior to Wagtail 0.3, the standard Wagtail urls.py contained an entry for +# wagtail.wagtailimages.urls rooted at '/admin/images/' or equivalent. As of Wagtail 0.5, +# the wagtailimages admin views are defined by wagtail.wagtailimages.admin_urls, and +# wagtail.wagtailimages.urls is used for front-end views instead - which means that those URLs +# will clash with the admin. +# This check can only be performed after the ROOT_URLCONF module has been fully imported. Since +# importing a urlconf module generally involves recursively importing a whole load of other things +# including models.py and wagtail_hooks.py, there is no obvious place to put this code at the +# module level without causing a circular import. We therefore put it in construct_main_menu, which +# is run frequently enough to ensure that the error message will not be missed. Yes, it's hacky :-( + +OLD_STYLE_URLCONF_CHECK_PASSED = False +def check_old_style_urlconf(): + global OLD_STYLE_URLCONF_CHECK_PASSED + + # A faulty urls.py will place wagtail.wagtailimages.urls at the same path that + # wagtail.wagtailimages.admin_urls is loaded to, resulting in the wagtailimages_serve path + # being equal to wagtailimages_index followed by three arbitrary args + try: + wagtailimages_serve_path = urlresolvers.reverse('wagtailimages_serve', args = ['123', '456', '789']) + except urlresolvers.NoReverseMatch: + # wagtailimages_serve is not defined at all, so there's no collision + OLD_STYLE_URLCONF_CHECK_PASSED = True + return + + wagtailimages_index_path = urlresolvers.reverse('wagtailimages_index') + if wagtailimages_serve_path == wagtailimages_index_path + '123/456/789/': + raise ImproperlyConfigured("""Your urls.py contains an entry for %s that needs to be removed. + See http://wagtail.readthedocs.org/en/latest/releases/0.5.html#urlconf-entries-for-admin-images-admin-embeds-etc-need-to-be-removed""" + % wagtailimages_index_path + ) + else: + OLD_STYLE_URLCONF_CHECK_PASSED = True + + @hooks.register('construct_main_menu') def construct_main_menu(request, menu_items): + if not OLD_STYLE_URLCONF_CHECK_PASSED: + check_old_style_urlconf() + if request.user.has_perm('wagtailimages.add_image'): menu_items.append( MenuItem(_('Images'), urlresolvers.reverse('wagtailimages_index'), classnames='icon icon-image', order=300) diff --git a/wagtail/wagtailredirects/locale/bg/LC_MESSAGES/django.mo b/wagtail/wagtailredirects/locale/bg/LC_MESSAGES/django.mo index 03eef3c99..17da54257 100644 Binary files a/wagtail/wagtailredirects/locale/bg/LC_MESSAGES/django.mo and b/wagtail/wagtailredirects/locale/bg/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailredirects/locale/bg/LC_MESSAGES/django.po b/wagtail/wagtailredirects/locale/bg/LC_MESSAGES/django.po index ffbced366..11ee5d379 100644 --- a/wagtail/wagtailredirects/locale/bg/LC_MESSAGES/django.po +++ b/wagtail/wagtailredirects/locale/bg/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:47+0000\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" "PO-Revision-Date: 2014-03-14 21:12+0000\n" "Last-Translator: serafeim <serafeim@torchbox.com>\n" "Language-Team: Bulgarian (http://www.transifex.com/projects/p/wagtail/" @@ -69,7 +69,7 @@ msgstr "Пренасочването '{0}' добавено." msgid "The redirect could not be created due to errors." msgstr "Пренасочването не можеше да бъде създадено поради грешки." -#: wagtail_hooks.py:22 templates/wagtailredirects/index.html:3 +#: wagtail_hooks.py:23 templates/wagtailredirects/index.html:3 #: templates/wagtailredirects/index.html:17 msgid "Redirects" msgstr "Пренасочвания" diff --git a/wagtail/wagtailredirects/locale/ca/LC_MESSAGES/django.mo b/wagtail/wagtailredirects/locale/ca/LC_MESSAGES/django.mo index 549a98df8..a9543f66d 100644 Binary files a/wagtail/wagtailredirects/locale/ca/LC_MESSAGES/django.mo and b/wagtail/wagtailredirects/locale/ca/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailredirects/locale/ca/LC_MESSAGES/django.po b/wagtail/wagtailredirects/locale/ca/LC_MESSAGES/django.po index 26c3931d2..53882f99c 100644 --- a/wagtail/wagtailredirects/locale/ca/LC_MESSAGES/django.po +++ b/wagtail/wagtailredirects/locale/ca/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:47+0000\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" "PO-Revision-Date: 2014-03-14 21:59+0000\n" "Last-Translator: Lloople <d.lloople@gmail.com>\n" "Language-Team: Catalan (http://www.transifex.com/projects/p/wagtail/language/" @@ -69,7 +69,7 @@ msgstr "Redireccionament '{0}' afegit." msgid "The redirect could not be created due to errors." msgstr "No s'ha pogut crear el redireccionament." -#: wagtail_hooks.py:22 templates/wagtailredirects/index.html:3 +#: wagtail_hooks.py:23 templates/wagtailredirects/index.html:3 #: templates/wagtailredirects/index.html:17 msgid "Redirects" msgstr "Redireccions" diff --git a/wagtail/wagtailredirects/locale/de/LC_MESSAGES/django.mo b/wagtail/wagtailredirects/locale/de/LC_MESSAGES/django.mo index a14456d56..a698340c8 100644 Binary files a/wagtail/wagtailredirects/locale/de/LC_MESSAGES/django.mo and b/wagtail/wagtailredirects/locale/de/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailredirects/locale/de/LC_MESSAGES/django.po b/wagtail/wagtailredirects/locale/de/LC_MESSAGES/django.po index 3b1171921..b0937da4b 100644 --- a/wagtail/wagtailredirects/locale/de/LC_MESSAGES/django.po +++ b/wagtail/wagtailredirects/locale/de/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:47+0000\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" "PO-Revision-Date: 2014-03-24 19:01+0000\n" "Last-Translator: pcraston <patrick@craston.com>\n" "Language-Team: German (http://www.transifex.com/projects/p/wagtail/language/" @@ -71,7 +71,7 @@ msgstr "Weiterleitung '{0}' hinzugefügt." msgid "The redirect could not be created due to errors." msgstr "Aufgrund von Fehlern konnte die Weiterleitung nicht erstellt werden." -#: wagtail_hooks.py:22 templates/wagtailredirects/index.html:3 +#: wagtail_hooks.py:23 templates/wagtailredirects/index.html:3 #: templates/wagtailredirects/index.html:17 msgid "Redirects" msgstr "Weiterleitungen" diff --git a/wagtail/wagtailredirects/locale/el/LC_MESSAGES/django.mo b/wagtail/wagtailredirects/locale/el/LC_MESSAGES/django.mo index 317a7bba8..a7530f4bf 100644 Binary files a/wagtail/wagtailredirects/locale/el/LC_MESSAGES/django.mo and b/wagtail/wagtailredirects/locale/el/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailredirects/locale/el/LC_MESSAGES/django.po b/wagtail/wagtailredirects/locale/el/LC_MESSAGES/django.po index 1aa6bf7b6..a20fde9f9 100644 --- a/wagtail/wagtailredirects/locale/el/LC_MESSAGES/django.po +++ b/wagtail/wagtailredirects/locale/el/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:47+0000\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" "PO-Revision-Date: 2014-03-14 21:16+0000\n" "Last-Translator: serafeim <serafeim@torchbox.com>\n" "Language-Team: Greek (http://www.transifex.com/projects/p/wagtail/language/" @@ -69,7 +69,7 @@ msgstr "Η ανακατεύθυνση '{0}' προστέθηκε." msgid "The redirect could not be created due to errors." msgstr "Δεν ήταν δυνατή η δημιουργία της ανακατεύθυνσης." -#: wagtail_hooks.py:22 templates/wagtailredirects/index.html:3 +#: wagtail_hooks.py:23 templates/wagtailredirects/index.html:3 #: templates/wagtailredirects/index.html:17 msgid "Redirects" msgstr "Ανακατευθύνει" diff --git a/wagtail/wagtailredirects/locale/en/LC_MESSAGES/django.mo b/wagtail/wagtailredirects/locale/en/LC_MESSAGES/django.mo index 4b726f7d6..44e531ab0 100644 Binary files a/wagtail/wagtailredirects/locale/en/LC_MESSAGES/django.mo and b/wagtail/wagtailredirects/locale/en/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailredirects/locale/en/LC_MESSAGES/django.po b/wagtail/wagtailredirects/locale/en/LC_MESSAGES/django.po index b7e87b086..6a3b4fc05 100644 --- a/wagtail/wagtailredirects/locale/en/LC_MESSAGES/django.po +++ b/wagtail/wagtailredirects/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:47+0000\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -63,7 +63,7 @@ msgstr "" msgid "The redirect could not be created due to errors." msgstr "" -#: wagtail_hooks.py:22 templates/wagtailredirects/index.html:3 +#: wagtail_hooks.py:23 templates/wagtailredirects/index.html:3 #: templates/wagtailredirects/index.html:17 msgid "Redirects" msgstr "" diff --git a/wagtail/wagtailredirects/locale/es/LC_MESSAGES/django.mo b/wagtail/wagtailredirects/locale/es/LC_MESSAGES/django.mo index 52afcb92c..ef1d3a7bf 100644 Binary files a/wagtail/wagtailredirects/locale/es/LC_MESSAGES/django.mo and b/wagtail/wagtailredirects/locale/es/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailredirects/locale/es/LC_MESSAGES/django.po b/wagtail/wagtailredirects/locale/es/LC_MESSAGES/django.po index 0f9cec052..5eae66a50 100644 --- a/wagtail/wagtailredirects/locale/es/LC_MESSAGES/django.po +++ b/wagtail/wagtailredirects/locale/es/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:47+0000\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" "PO-Revision-Date: 2014-03-23 10:21+0000\n" "Last-Translator: fooflare <amos.oviedo@gmail.com>\n" "Language-Team: Spanish (http://www.transifex.com/projects/p/wagtail/language/" @@ -70,7 +70,7 @@ msgstr "Redirección '{0}' añadida." msgid "The redirect could not be created due to errors." msgstr "La redirección no puede ser creada debido a errores." -#: wagtail_hooks.py:22 templates/wagtailredirects/index.html:3 +#: wagtail_hooks.py:23 templates/wagtailredirects/index.html:3 #: templates/wagtailredirects/index.html:17 msgid "Redirects" msgstr "Redirecciona" diff --git a/wagtail/wagtailredirects/locale/eu/LC_MESSAGES/django.mo b/wagtail/wagtailredirects/locale/eu/LC_MESSAGES/django.mo index f5afff9e4..059c50fbc 100644 Binary files a/wagtail/wagtailredirects/locale/eu/LC_MESSAGES/django.mo and b/wagtail/wagtailredirects/locale/eu/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailredirects/locale/eu/LC_MESSAGES/django.po b/wagtail/wagtailredirects/locale/eu/LC_MESSAGES/django.po index d7bbbe401..f2336f56b 100644 --- a/wagtail/wagtailredirects/locale/eu/LC_MESSAGES/django.po +++ b/wagtail/wagtailredirects/locale/eu/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:47+0000\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" "PO-Revision-Date: 2014-03-14 21:12+0000\n" "Last-Translator: serafeim <serafeim@torchbox.com>\n" "Language-Team: Basque (http://www.transifex.com/projects/p/wagtail/language/" @@ -64,7 +64,7 @@ msgstr "" msgid "The redirect could not be created due to errors." msgstr "" -#: wagtail_hooks.py:22 templates/wagtailredirects/index.html:3 +#: wagtail_hooks.py:23 templates/wagtailredirects/index.html:3 #: templates/wagtailredirects/index.html:17 msgid "Redirects" msgstr "" diff --git a/wagtail/wagtailredirects/locale/fr/LC_MESSAGES/django.mo b/wagtail/wagtailredirects/locale/fr/LC_MESSAGES/django.mo index 182b4cef7..5cc019daf 100644 Binary files a/wagtail/wagtailredirects/locale/fr/LC_MESSAGES/django.mo and b/wagtail/wagtailredirects/locale/fr/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailredirects/locale/fr/LC_MESSAGES/django.po b/wagtail/wagtailredirects/locale/fr/LC_MESSAGES/django.po index 047a9c754..a88294e24 100644 --- a/wagtail/wagtailredirects/locale/fr/LC_MESSAGES/django.po +++ b/wagtail/wagtailredirects/locale/fr/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:47+0000\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" "PO-Revision-Date: 2014-03-18 23:07+0000\n" "Last-Translator: nahuel\n" "Language-Team: French (http://www.transifex.com/projects/p/wagtail/language/" @@ -69,7 +69,7 @@ msgstr "Redirection '{0} ajoutée." msgid "The redirect could not be created due to errors." msgstr "La redirection ne peut être créé du fait d'erreurs." -#: wagtail_hooks.py:22 templates/wagtailredirects/index.html:3 +#: wagtail_hooks.py:23 templates/wagtailredirects/index.html:3 #: templates/wagtailredirects/index.html:17 msgid "Redirects" msgstr "Redirections" diff --git a/wagtail/wagtailredirects/locale/gl/LC_MESSAGES/django.mo b/wagtail/wagtailredirects/locale/gl/LC_MESSAGES/django.mo index 93e89b3fd..0417c9ae8 100644 Binary files a/wagtail/wagtailredirects/locale/gl/LC_MESSAGES/django.mo and b/wagtail/wagtailredirects/locale/gl/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailredirects/locale/gl/LC_MESSAGES/django.po b/wagtail/wagtailredirects/locale/gl/LC_MESSAGES/django.po index 40788394e..a0a877ef8 100644 --- a/wagtail/wagtailredirects/locale/gl/LC_MESSAGES/django.po +++ b/wagtail/wagtailredirects/locale/gl/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:47+0000\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" "PO-Revision-Date: 2014-03-23 10:32+0000\n" "Last-Translator: fooflare <amos.oviedo@gmail.com>\n" "Language-Team: Galician (http://www.transifex.com/projects/p/wagtail/" @@ -70,7 +70,7 @@ msgstr "Redirección '{0}' engadida." msgid "The redirect could not be created due to errors." msgstr "A redirección non pede ser creada debido a erros." -#: wagtail_hooks.py:22 templates/wagtailredirects/index.html:3 +#: wagtail_hooks.py:23 templates/wagtailredirects/index.html:3 #: templates/wagtailredirects/index.html:17 msgid "Redirects" msgstr "Redirecciona" diff --git a/wagtail/wagtailredirects/locale/mn/LC_MESSAGES/django.mo b/wagtail/wagtailredirects/locale/mn/LC_MESSAGES/django.mo index 4d78adf19..a610b6cd7 100644 Binary files a/wagtail/wagtailredirects/locale/mn/LC_MESSAGES/django.mo and b/wagtail/wagtailredirects/locale/mn/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailredirects/locale/mn/LC_MESSAGES/django.po b/wagtail/wagtailredirects/locale/mn/LC_MESSAGES/django.po index 32dc9b4fb..8fe2a3670 100644 --- a/wagtail/wagtailredirects/locale/mn/LC_MESSAGES/django.po +++ b/wagtail/wagtailredirects/locale/mn/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:47+0000\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" "PO-Revision-Date: 2014-03-14 21:12+0000\n" "Last-Translator: serafeim <serafeim@torchbox.com>\n" "Language-Team: Mongolian (http://www.transifex.com/projects/p/wagtail/" @@ -64,7 +64,7 @@ msgstr "" msgid "The redirect could not be created due to errors." msgstr "" -#: wagtail_hooks.py:22 templates/wagtailredirects/index.html:3 +#: wagtail_hooks.py:23 templates/wagtailredirects/index.html:3 #: templates/wagtailredirects/index.html:17 msgid "Redirects" msgstr "" diff --git a/wagtail/wagtailredirects/locale/pl/LC_MESSAGES/django.mo b/wagtail/wagtailredirects/locale/pl/LC_MESSAGES/django.mo index 58c18567f..c499702f0 100644 Binary files a/wagtail/wagtailredirects/locale/pl/LC_MESSAGES/django.mo and b/wagtail/wagtailredirects/locale/pl/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailredirects/locale/pl/LC_MESSAGES/django.po b/wagtail/wagtailredirects/locale/pl/LC_MESSAGES/django.po index 7903d29c7..5a89ebb3f 100644 --- a/wagtail/wagtailredirects/locale/pl/LC_MESSAGES/django.po +++ b/wagtail/wagtailredirects/locale/pl/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:47+0000\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" "PO-Revision-Date: 2014-03-14 22:16+0000\n" "Last-Translator: utek <mail@utek.pl>\n" "Language-Team: Polish (http://www.transifex.com/projects/p/wagtail/language/" @@ -70,7 +70,7 @@ msgstr "Dodano przekierowanie '{0}'." msgid "The redirect could not be created due to errors." msgstr "Przekierowanie nie mogło zostać stworzone z powodu błędów." -#: wagtail_hooks.py:22 templates/wagtailredirects/index.html:3 +#: wagtail_hooks.py:23 templates/wagtailredirects/index.html:3 #: templates/wagtailredirects/index.html:17 msgid "Redirects" msgstr "Przekierowania" diff --git a/wagtail/wagtailredirects/locale/ro/LC_MESSAGES/django.mo b/wagtail/wagtailredirects/locale/ro/LC_MESSAGES/django.mo index e77d11cf3..aa780a3b0 100644 Binary files a/wagtail/wagtailredirects/locale/ro/LC_MESSAGES/django.mo and b/wagtail/wagtailredirects/locale/ro/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailredirects/locale/ro/LC_MESSAGES/django.po b/wagtail/wagtailredirects/locale/ro/LC_MESSAGES/django.po index b6ec29d81..f248a3e8f 100644 --- a/wagtail/wagtailredirects/locale/ro/LC_MESSAGES/django.po +++ b/wagtail/wagtailredirects/locale/ro/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:47+0000\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" "PO-Revision-Date: 2014-03-18 13:21+0000\n" "Last-Translator: zerolab\n" "Language-Team: Romanian (http://www.transifex.com/projects/p/wagtail/" @@ -69,7 +69,7 @@ msgstr "Redirecționarea '{0}' a fost adăugată." msgid "The redirect could not be created due to errors." msgstr "Redirecționarea nu a fost creată din cauza erorilor." -#: wagtail_hooks.py:22 templates/wagtailredirects/index.html:3 +#: wagtail_hooks.py:23 templates/wagtailredirects/index.html:3 #: templates/wagtailredirects/index.html:17 msgid "Redirects" msgstr "Redirecționări" diff --git a/wagtail/wagtailredirects/locale/zh/LC_MESSAGES/django.mo b/wagtail/wagtailredirects/locale/zh/LC_MESSAGES/django.mo index 2bd56a1c4..1f4c36355 100644 Binary files a/wagtail/wagtailredirects/locale/zh/LC_MESSAGES/django.mo and b/wagtail/wagtailredirects/locale/zh/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailredirects/locale/zh/LC_MESSAGES/django.po b/wagtail/wagtailredirects/locale/zh/LC_MESSAGES/django.po index d996eb145..7b7787add 100644 --- a/wagtail/wagtailredirects/locale/zh/LC_MESSAGES/django.po +++ b/wagtail/wagtailredirects/locale/zh/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:47+0000\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" "PO-Revision-Date: 2014-03-14 21:12+0000\n" "Last-Translator: serafeim <serafeim@torchbox.com>\n" "Language-Team: Chinese (http://www.transifex.com/projects/p/wagtail/language/" @@ -65,7 +65,7 @@ msgstr "转向 '{0}' 已添加" msgid "The redirect could not be created due to errors." msgstr "由于多个错误,转向设置无法创建。" -#: wagtail_hooks.py:22 templates/wagtailredirects/index.html:3 +#: wagtail_hooks.py:23 templates/wagtailredirects/index.html:3 #: templates/wagtailredirects/index.html:17 msgid "Redirects" msgstr "转向" diff --git a/wagtail/wagtailredirects/locale/zh_TW/LC_MESSAGES/django.mo b/wagtail/wagtailredirects/locale/zh_TW/LC_MESSAGES/django.mo index b5f8e50b3..22ccda07a 100644 Binary files a/wagtail/wagtailredirects/locale/zh_TW/LC_MESSAGES/django.mo and b/wagtail/wagtailredirects/locale/zh_TW/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailredirects/locale/zh_TW/LC_MESSAGES/django.po b/wagtail/wagtailredirects/locale/zh_TW/LC_MESSAGES/django.po index 0e909ea5c..9c8175de3 100644 --- a/wagtail/wagtailredirects/locale/zh_TW/LC_MESSAGES/django.po +++ b/wagtail/wagtailredirects/locale/zh_TW/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:47+0000\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" "PO-Revision-Date: 2014-03-14 21:12+0000\n" "Last-Translator: wdv4758h <wdv4758h@gmail.com>\n" "Language-Team: \n" @@ -66,7 +66,7 @@ msgstr "重導向 '{0}' 已加入" msgid "The redirect could not be created due to errors." msgstr "重導向因有錯誤而無法建立。" -#: wagtail_hooks.py:22 templates/wagtailredirects/index.html:3 +#: wagtail_hooks.py:23 templates/wagtailredirects/index.html:3 #: templates/wagtailredirects/index.html:17 msgid "Redirects" msgstr "重導向" diff --git a/wagtail/wagtailredirects/migrations/0001_initial.py b/wagtail/wagtailredirects/south_migrations/0001_initial.py similarity index 100% rename from wagtail/wagtailredirects/migrations/0001_initial.py rename to wagtail/wagtailredirects/south_migrations/0001_initial.py diff --git a/wagtail/wagtailredirects/south_migrations/__init__.py b/wagtail/wagtailredirects/south_migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/wagtail/wagtailsearch/indexed.py b/wagtail/wagtailsearch/indexed.py index 2e506d690..e775ff5c7 100644 --- a/wagtail/wagtailsearch/indexed.py +++ b/wagtail/wagtailsearch/indexed.py @@ -4,6 +4,8 @@ from six import string_types from django.db import models +from wagtail.utils.deprecation import RemovedInWagtail06Warning + class Indexed(object): @classmethod @@ -77,7 +79,7 @@ class Indexed(object): # Display deprecation warning if indexed_fields has been used if indexed_fields: warnings.warn("'indexed_fields' setting is now deprecated." - "Use 'search_fields' instead.", DeprecationWarning) + "Use 'search_fields' instead.", RemovedInWagtail06Warning) # Convert them into search fields for field_name, _config in indexed_fields.items(): diff --git a/wagtail/wagtailsearch/locale/bg/LC_MESSAGES/django.mo b/wagtail/wagtailsearch/locale/bg/LC_MESSAGES/django.mo index 8ec314309..8631753d8 100644 Binary files a/wagtail/wagtailsearch/locale/bg/LC_MESSAGES/django.mo and b/wagtail/wagtailsearch/locale/bg/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailsearch/locale/bg/LC_MESSAGES/django.po b/wagtail/wagtailsearch/locale/bg/LC_MESSAGES/django.po index 3bddd3064..c63ffe52b 100644 --- a/wagtail/wagtailsearch/locale/bg/LC_MESSAGES/django.po +++ b/wagtail/wagtailsearch/locale/bg/LC_MESSAGES/django.po @@ -1,22 +1,21 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: -# LyuboslavPetrov <petrov.lyuboslav@gmail.com>, 2014 +# Lyuboslav Petrov <petrov.lyuboslav@gmail.com>, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:54+0000\n" -"PO-Revision-Date: 2014-03-14 21:12+0000\n" -"Last-Translator: serafeim <serafeim@torchbox.com>\n" -"Language-Team: Bulgarian (http://www.transifex.com/projects/p/wagtail/" -"language/bg/)\n" -"Language: bg\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Bulgarian (http://www.transifex.com/projects/p/wagtail/language/bg/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: bg\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: forms.py:9 @@ -28,16 +27,13 @@ msgid "" "Enter the full search string to match. An \n" " exact match is required for your Editors Picks to be \n" " displayed, wildcards are NOT allowed." -msgstr "" -"Въведете целият стринг. Точно \n" -" съвпадение е нужно за вашите \"Избрано от Редактора\" \n" -" да бъдат показани, като wildcards НЕ са позволени." +msgstr "Въведете целият стринг. Точно \n съвпадение е нужно за вашите \"Избрано от Редактора\" \n да бъдат показани, като wildcards НЕ са позволени." #: forms.py:36 msgid "Please specify at least one recommendation for this search term." msgstr "" -#: wagtail_hooks.py:22 templates/wagtailsearch/editorspicks/list.html:9 +#: wagtail_hooks.py:23 templates/wagtailsearch/editorspicks/list.html:9 msgid "Editors picks" msgstr "Избрано от Редактора" @@ -46,34 +42,21 @@ msgstr "Избрано от Редактора" msgid "Add editor's pick" msgstr "Добави \"Избрано от Редактора\"" -#: templates/wagtailsearch/editorspicks/add.html:9 +#: templates/wagtailsearch/editorspicks/add.html:10 msgid "" "\n" -" <p>Editors picks are a means of recommending specific pages that " -"might not organically come high up in search results. E.g recommending your " -"primary donation page to a user searching with a less common term like " -"\"<em>giving</em>\".</p>\n" -" " +" <p>Editors picks are a means of recommending specific pages that might not organically come high up in search results. E.g recommending your primary donation page to a user searching with a less common term like \"<em>giving</em>\".</p>\n" +" " msgstr "" -"\n" -" <p>\"Избор на Редактора\" са средство за препоръчване на специфични " -"страници, които не биха могли да дойдат по нормален начин високо в " -"резултатите от търсенето. Например, препоръка към основната ви страница за " -"дарения на потребителско търсене с по-малко общ термин като \"<em> даде </em>" -"\". </p>\n" -" " -#: templates/wagtailsearch/editorspicks/add.html:12 +#: templates/wagtailsearch/editorspicks/add.html:13 msgid "" "\n" -" <p>The \"Search term(s)/phrase\" field below must contain the full " -"and exact search for which you wish to provide recommended results, " -"<em>including</em> any misspellings/user error. To help, you can choose from " -"search terms that have been popular with users of your site.</p>\n" -" " +" <p>The \"Search term(s)/phrase\" field below must contain the full and exact search for which you wish to provide recommended results, <em>including</em> any misspellings/user error. To help, you can choose from search terms that have been popular with users of your site.</p>\n" +" " msgstr "" -#: templates/wagtailsearch/editorspicks/add.html:25 +#: templates/wagtailsearch/editorspicks/add.html:27 #: templates/wagtailsearch/editorspicks/edit.html:19 msgid "Save" msgstr "Запази" @@ -90,10 +73,9 @@ msgid "Delete" msgstr "Изтрий" #: templates/wagtailsearch/editorspicks/confirm_delete.html:9 -msgid "Are you sure you want to delete all editors picks for this search term?" -msgstr "" -"Сигурен ли сте, че искате да изтриете всички \"Избрано от Редактора\" за " -"тази ключова дума?" +msgid "" +"Are you sure you want to delete all editors picks for this search term?" +msgstr "Сигурен ли сте, че искате да изтриете всички \"Избрано от Редактора\" за тази ключова дума?" #: templates/wagtailsearch/editorspicks/confirm_delete.html:12 msgid "Yes, delete" @@ -147,14 +129,8 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "" -"\n" -" Има едно съвпадение\n" -" " -msgstr[1] "" -"\n" -" Има %(counter)s съвпадения\n" -" " +msgstr[0] "\n Има едно съвпадение\n " +msgstr[1] "\n Има %(counter)s съвпадения\n " #: templates/wagtailsearch/editorspicks/results.html:18 #, python-format @@ -164,8 +140,8 @@ msgstr "" #: templates/wagtailsearch/editorspicks/results.html:21 #, python-format msgid "" -"No editor's picks have been created. Why not <a href=" -"\"%(wagtailsearch_editorspicks_add_url)s\">add one</a>?" +"No editor's picks have been created. Why not <a " +"href=\"%(wagtailsearch_editorspicks_add_url)s\">add one</a>?" msgstr "" #: templates/wagtailsearch/editorspicks/includes/editorspicks_form.html:4 diff --git a/wagtail/wagtailsearch/locale/ca/LC_MESSAGES/django.mo b/wagtail/wagtailsearch/locale/ca/LC_MESSAGES/django.mo index 92054ca93..9eeb16af9 100644 Binary files a/wagtail/wagtailsearch/locale/ca/LC_MESSAGES/django.mo and b/wagtail/wagtailsearch/locale/ca/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailsearch/locale/ca/LC_MESSAGES/django.po b/wagtail/wagtailsearch/locale/ca/LC_MESSAGES/django.po index 291cb8fe4..62deec3d6 100644 --- a/wagtail/wagtailsearch/locale/ca/LC_MESSAGES/django.po +++ b/wagtail/wagtailsearch/locale/ca/LC_MESSAGES/django.po @@ -1,22 +1,21 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: -# Lloople <d.lloople@gmail.com>, 2014 +# David Llop <d.lloople@gmail.com>, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:54+0000\n" -"PO-Revision-Date: 2014-03-14 21:59+0000\n" -"Last-Translator: Lloople <d.lloople@gmail.com>\n" -"Language-Team: Catalan (http://www.transifex.com/projects/p/wagtail/language/" -"ca/)\n" -"Language: ca\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Catalan (http://www.transifex.com/projects/p/wagtail/language/ca/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ca\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: forms.py:9 @@ -28,17 +27,13 @@ msgid "" "Enter the full search string to match. An \n" " exact match is required for your Editors Picks to be \n" " displayed, wildcards are NOT allowed." -msgstr "" -"Escriu el text a cercar. Una\n" -"coincidència exacta és requerida per les teves seleccions dels editors per " -"ser\n" -"mostrades, les wildcars NO estan permeses." +msgstr "Escriu el text a cercar. Una\ncoincidència exacta és requerida per les teves seleccions dels editors per ser\nmostrades, les wildcars NO estan permeses." #: forms.py:36 msgid "Please specify at least one recommendation for this search term." msgstr "" -#: wagtail_hooks.py:22 templates/wagtailsearch/editorspicks/list.html:9 +#: wagtail_hooks.py:23 templates/wagtailsearch/editorspicks/list.html:9 msgid "Editors picks" msgstr "Selecció dels editors" @@ -47,38 +42,21 @@ msgstr "Selecció dels editors" msgid "Add editor's pick" msgstr "afegeix selecció dels editors" -#: templates/wagtailsearch/editorspicks/add.html:9 +#: templates/wagtailsearch/editorspicks/add.html:10 msgid "" "\n" -" <p>Editors picks are a means of recommending specific pages that " -"might not organically come high up in search results. E.g recommending your " -"primary donation page to a user searching with a less common term like " -"\"<em>giving</em>\".</p>\n" -" " +" <p>Editors picks are a means of recommending specific pages that might not organically come high up in search results. E.g recommending your primary donation page to a user searching with a less common term like \"<em>giving</em>\".</p>\n" +" " msgstr "" -"\n" -"<p>Les seleccions dels editors són una mena de recomanacions de pàgines " -"específiques que no puguin aparèixer orgànicament als resultats de cerca. " -"Per exemple, recomanant la teva pàgina principal de donacions en un termini " -"de cerca comú com \"<em>donar</em>\".</p>" -#: templates/wagtailsearch/editorspicks/add.html:12 +#: templates/wagtailsearch/editorspicks/add.html:13 msgid "" "\n" -" <p>The \"Search term(s)/phrase\" field below must contain the full " -"and exact search for which you wish to provide recommended results, " -"<em>including</em> any misspellings/user error. To help, you can choose from " -"search terms that have been popular with users of your site.</p>\n" -" " +" <p>The \"Search term(s)/phrase\" field below must contain the full and exact search for which you wish to provide recommended results, <em>including</em> any misspellings/user error. To help, you can choose from search terms that have been popular with users of your site.</p>\n" +" " msgstr "" -"\n" -"<p>El camp \"Cerca paraula(es)/frases\" de sota ha de contenir la cerca " -"completa i exacta per al que vols proveïr resultats recomanats, " -"<em>inclöent</em> qualsevol error dels usuaris. Per ajugar, pots escollir " -"des dels terminis de cerca que s'han fet populars a través dels usuaris del " -"teu lloc.</p>" -#: templates/wagtailsearch/editorspicks/add.html:25 +#: templates/wagtailsearch/editorspicks/add.html:27 #: templates/wagtailsearch/editorspicks/edit.html:19 msgid "Save" msgstr "Desa" @@ -95,10 +73,9 @@ msgid "Delete" msgstr "Esborra" #: templates/wagtailsearch/editorspicks/confirm_delete.html:9 -msgid "Are you sure you want to delete all editors picks for this search term?" -msgstr "" -"Estàs segur que vols esborrar totes les seleccions dels editors per aquest " -"terme de cerca?" +msgid "" +"Are you sure you want to delete all editors picks for this search term?" +msgstr "Estàs segur que vols esborrar totes les seleccions dels editors per aquest terme de cerca?" #: templates/wagtailsearch/editorspicks/confirm_delete.html:12 msgid "Yes, delete" @@ -152,27 +129,20 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "" -"\n" -"Hi ha una coincidència" -msgstr[1] "" -"\n" -"Hi han %(counter)s coincidències" +msgstr[0] "\nHi ha una coincidència" +msgstr[1] "\nHi han %(counter)s coincidències" #: templates/wagtailsearch/editorspicks/results.html:18 #, python-format msgid "Sorry, no editor's picks match \"<em>%(query_string)s</em>\"" -msgstr "" -"Ho sentim, cap selecció d'editor coincideix amb \"<em>%(query_string)s</em>\"" +msgstr "Ho sentim, cap selecció d'editor coincideix amb \"<em>%(query_string)s</em>\"" #: templates/wagtailsearch/editorspicks/results.html:21 #, python-format msgid "" -"No editor's picks have been created. Why not <a href=" -"\"%(wagtailsearch_editorspicks_add_url)s\">add one</a>?" -msgstr "" -"Encara no s'ha creat cap selecció d'editor. Per què no <a href=" -"\"%(wagtailsearch_editorspicks_add_url)s\">afegeixes una</a>?" +"No editor's picks have been created. Why not <a " +"href=\"%(wagtailsearch_editorspicks_add_url)s\">add one</a>?" +msgstr "Encara no s'ha creat cap selecció d'editor. Per què no <a href=\"%(wagtailsearch_editorspicks_add_url)s\">afegeixes una</a>?" #: templates/wagtailsearch/editorspicks/includes/editorspicks_form.html:4 msgid "Move up" diff --git a/wagtail/wagtailsearch/locale/de/LC_MESSAGES/django.mo b/wagtail/wagtailsearch/locale/de/LC_MESSAGES/django.mo index c0f850a02..51d4574f3 100644 Binary files a/wagtail/wagtailsearch/locale/de/LC_MESSAGES/django.mo and b/wagtail/wagtailsearch/locale/de/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailsearch/locale/de/LC_MESSAGES/django.po b/wagtail/wagtailsearch/locale/de/LC_MESSAGES/django.po index 767b6555f..a5bb2346f 100644 --- a/wagtail/wagtailsearch/locale/de/LC_MESSAGES/django.po +++ b/wagtail/wagtailsearch/locale/de/LC_MESSAGES/django.po @@ -1,23 +1,22 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: -# jspielmann <j@spielmannsolutions.com>, 2014 +# Johannes Spielmann <j@spielmannsolutions.com>, 2014 # pcraston <patrick@craston.com>, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:54+0000\n" -"PO-Revision-Date: 2014-03-24 19:02+0000\n" -"Last-Translator: pcraston <patrick@craston.com>\n" -"Language-Team: German (http://www.transifex.com/projects/p/wagtail/language/" -"de/)\n" -"Language: de\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: German (http://www.transifex.com/projects/p/wagtail/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: forms.py:9 @@ -29,16 +28,13 @@ msgid "" "Enter the full search string to match. An \n" " exact match is required for your Editors Picks to be \n" " displayed, wildcards are NOT allowed." -msgstr "" -"Geben Sie den vollständigen Suchbegriff ein! Um Ihre Redaktionsempfehlungen " -"anzuzeigen wird eine genaue Übereinstimmung benötigt. Wildcards sind NICHT " -"erlaubt." +msgstr "Geben Sie den vollständigen Suchbegriff ein! Um Ihre Redaktionsempfehlungen anzuzeigen wird eine genaue Übereinstimmung benötigt. Wildcards sind NICHT erlaubt." #: forms.py:36 msgid "Please specify at least one recommendation for this search term." msgstr "" -#: wagtail_hooks.py:22 templates/wagtailsearch/editorspicks/list.html:9 +#: wagtail_hooks.py:23 templates/wagtailsearch/editorspicks/list.html:9 msgid "Editors picks" msgstr "Redaktionsempfehlungen" @@ -47,39 +43,21 @@ msgstr "Redaktionsempfehlungen" msgid "Add editor's pick" msgstr "Redaktionsempfehlung hinzufügen" -#: templates/wagtailsearch/editorspicks/add.html:9 +#: templates/wagtailsearch/editorspicks/add.html:10 msgid "" "\n" -" <p>Editors picks are a means of recommending specific pages that " -"might not organically come high up in search results. E.g recommending your " -"primary donation page to a user searching with a less common term like " -"\"<em>giving</em>\".</p>\n" -" " +" <p>Editors picks are a means of recommending specific pages that might not organically come high up in search results. E.g recommending your primary donation page to a user searching with a less common term like \"<em>giving</em>\".</p>\n" +" " msgstr "" -"\n" -" <p>Redaktionsempfehlungen sind eine Möglichkeit, bestimmte Seiten zu " -"empfehlen die von sich aus nicht sehr weit oben in den Suchergebnissen " -"auftauchen würden. So könnte zum Beispiel Ihre Spendenseite auftauchen wenn " -"nach dem Suchbegriff \"<em>unterstützen</em>\" gesucht wird.</p>\n" -" " -#: templates/wagtailsearch/editorspicks/add.html:12 +#: templates/wagtailsearch/editorspicks/add.html:13 msgid "" "\n" -" <p>The \"Search term(s)/phrase\" field below must contain the full " -"and exact search for which you wish to provide recommended results, " -"<em>including</em> any misspellings/user error. To help, you can choose from " -"search terms that have been popular with users of your site.</p>\n" -" " +" <p>The \"Search term(s)/phrase\" field below must contain the full and exact search for which you wish to provide recommended results, <em>including</em> any misspellings/user error. To help, you can choose from search terms that have been popular with users of your site.</p>\n" +" " msgstr "" -"\n" -" <p>Im Eingabefeld \"Suchbegriffe/Phrasen\" müssen Sie den " -"vollständigen und genauen Suchbegriff, inklusive eventueller " -"Rechtschreibfehler, eingeben, für den Sie Seiten empfehlen möchten. Zur " -"Unterstützung können Sie aus häufig verwendeten Suchbegriffen wählen.</p>\n" -" " -#: templates/wagtailsearch/editorspicks/add.html:25 +#: templates/wagtailsearch/editorspicks/add.html:27 #: templates/wagtailsearch/editorspicks/edit.html:19 msgid "Save" msgstr "Speichern" @@ -96,10 +74,9 @@ msgid "Delete" msgstr "Löschen" #: templates/wagtailsearch/editorspicks/confirm_delete.html:9 -msgid "Are you sure you want to delete all editors picks for this search term?" -msgstr "" -"Sind Sie sicher, dass Sie alle Redaktionsempfehlungen für diesen Suchbegriff " -"löschen wollen?" +msgid "" +"Are you sure you want to delete all editors picks for this search term?" +msgstr "Sind Sie sicher, dass Sie alle Redaktionsempfehlungen für diesen Suchbegriff löschen wollen?" #: templates/wagtailsearch/editorspicks/confirm_delete.html:12 msgid "Yes, delete" @@ -153,30 +130,20 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "" -"\n" -" Es gibt ein Ergebnis\n" -" " -msgstr[1] "" -"\n" -" Es gibt %(counter)s Ergebnisse\n" -" " +msgstr[0] "\n Es gibt ein Ergebnis\n " +msgstr[1] "\n Es gibt %(counter)s Ergebnisse\n " #: templates/wagtailsearch/editorspicks/results.html:18 #, python-format msgid "Sorry, no editor's picks match \"<em>%(query_string)s</em>\"" -msgstr "" -"Es wurde leider keine Redaktionsempfehlung zum Suchbegriff \"<em>" -"%(query_string)s</em>\" gefunden" +msgstr "Es wurde leider keine Redaktionsempfehlung zum Suchbegriff \"<em>%(query_string)s</em>\" gefunden" #: templates/wagtailsearch/editorspicks/results.html:21 #, python-format msgid "" -"No editor's picks have been created. Why not <a href=" -"\"%(wagtailsearch_editorspicks_add_url)s\">add one</a>?" -msgstr "" -"Sie haben noch keine Redaktionsempfehlungen erstellt. <a href=" -"\"%(wagtailsearch_editorspicks_add_url)s\">Erstellen Sie doch jetzt eine!</a>" +"No editor's picks have been created. Why not <a " +"href=\"%(wagtailsearch_editorspicks_add_url)s\">add one</a>?" +msgstr "Sie haben noch keine Redaktionsempfehlungen erstellt. <a href=\"%(wagtailsearch_editorspicks_add_url)s\">Erstellen Sie doch jetzt eine!</a>" #: templates/wagtailsearch/editorspicks/includes/editorspicks_form.html:4 msgid "Move up" diff --git a/wagtail/wagtailsearch/locale/el/LC_MESSAGES/django.mo b/wagtail/wagtailsearch/locale/el/LC_MESSAGES/django.mo index 9eec235e1..ac1517148 100644 Binary files a/wagtail/wagtailsearch/locale/el/LC_MESSAGES/django.mo and b/wagtail/wagtailsearch/locale/el/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailsearch/locale/el/LC_MESSAGES/django.po b/wagtail/wagtailsearch/locale/el/LC_MESSAGES/django.po index f8a010959..023235064 100644 --- a/wagtail/wagtailsearch/locale/el/LC_MESSAGES/django.po +++ b/wagtail/wagtailsearch/locale/el/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # serafeim <serafeim@torchbox.com>, 2014 # serafeim <serafeim@torchbox.com>, 2014 @@ -9,15 +9,14 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:54+0000\n" -"PO-Revision-Date: 2014-03-14 21:15+0000\n" -"Last-Translator: serafeim <serafeim@torchbox.com>\n" -"Language-Team: Greek (http://www.transifex.com/projects/p/wagtail/language/" -"el/)\n" -"Language: el\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Greek (http://www.transifex.com/projects/p/wagtail/language/el/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: el\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: forms.py:9 @@ -29,17 +28,13 @@ msgid "" "Enter the full search string to match. An \n" " exact match is required for your Editors Picks to be \n" " displayed, wildcards are NOT allowed." -msgstr "" -"Συμπληρώσατε το πλήρες κείμενο προς αναζήτησης.\n" -"Για να εμφανιστεί η επιλογή των συντακτών σας\n" -"απαιτείται ακριβές ταίριασμα, δεν επιτρέπονται\n" -"αστεράκια." +msgstr "Συμπληρώσατε το πλήρες κείμενο προς αναζήτησης.\nΓια να εμφανιστεί η επιλογή των συντακτών σας\nαπαιτείται ακριβές ταίριασμα, δεν επιτρέπονται\nαστεράκια." #: forms.py:36 msgid "Please specify at least one recommendation for this search term." msgstr "" -#: wagtail_hooks.py:22 templates/wagtailsearch/editorspicks/list.html:9 +#: wagtail_hooks.py:23 templates/wagtailsearch/editorspicks/list.html:9 msgid "Editors picks" msgstr "Επιλογές συντακτών" @@ -48,39 +43,21 @@ msgstr "Επιλογές συντακτών" msgid "Add editor's pick" msgstr "Προσθήκη επιλογής συντακτών" -#: templates/wagtailsearch/editorspicks/add.html:9 +#: templates/wagtailsearch/editorspicks/add.html:10 msgid "" "\n" -" <p>Editors picks are a means of recommending specific pages that " -"might not organically come high up in search results. E.g recommending your " -"primary donation page to a user searching with a less common term like " -"\"<em>giving</em>\".</p>\n" -" " +" <p>Editors picks are a means of recommending specific pages that might not organically come high up in search results. E.g recommending your primary donation page to a user searching with a less common term like \"<em>giving</em>\".</p>\n" +" " msgstr "" -"\n" -"<p>Οι επιλογές συντακτών είναι ένας τρόπος πρότασης συγκεκριμένων σελίδων οι " -"οποίες κανονικά δε θα βρίσκονται ψηλά στα αποτελέσματα της αναζήτησης. Για " -"παράδειγμα, μπορείτε να προτείνετε τη σελίδα δωρεων σας σε μια αναζήτηση " -"ενός λιγότερο συνηθισμένου όρου όπως \"<em>δίνω</em>\".</p>" -#: templates/wagtailsearch/editorspicks/add.html:12 +#: templates/wagtailsearch/editorspicks/add.html:13 msgid "" "\n" -" <p>The \"Search term(s)/phrase\" field below must contain the full " -"and exact search for which you wish to provide recommended results, " -"<em>including</em> any misspellings/user error. To help, you can choose from " -"search terms that have been popular with users of your site.</p>\n" -" " +" <p>The \"Search term(s)/phrase\" field below must contain the full and exact search for which you wish to provide recommended results, <em>including</em> any misspellings/user error. To help, you can choose from search terms that have been popular with users of your site.</p>\n" +" " msgstr "" -"\n" -"\n" -"<p>Το πεδίο \"όροι/φράσεις αναζήτησης\" παρακάτω πρέπει να περιέχει το " -"πλήρες και ακριβές κείμενο για το οποίο θέλετε να παρέχετε προτεινόμενα " -"αποτελέσματα, <em>συμπεριλαμβανομένων</em> τυχόν ορθογραφικών λαθών. Προς " -"βοήθεια, μπορείτε να επιλέξετε όρους αναζήτησης που ήταν δημοφιλείς στους " -"χρήστες.</p>" -#: templates/wagtailsearch/editorspicks/add.html:25 +#: templates/wagtailsearch/editorspicks/add.html:27 #: templates/wagtailsearch/editorspicks/edit.html:19 msgid "Save" msgstr "Αποθήκευση" @@ -97,10 +74,9 @@ msgid "Delete" msgstr "Διαγραφή" #: templates/wagtailsearch/editorspicks/confirm_delete.html:9 -msgid "Are you sure you want to delete all editors picks for this search term?" -msgstr "" -"Είστε σίγουρος ότι θέλετε να διαγράψετε όλες τις επιλογές συντακτών για τον " -"εν λόγω όρο αναζήτησης;" +msgid "" +"Are you sure you want to delete all editors picks for this search term?" +msgstr "Είστε σίγουρος ότι θέλετε να διαγράψετε όλες τις επιλογές συντακτών για τον εν λόγω όρο αναζήτησης;" #: templates/wagtailsearch/editorspicks/confirm_delete.html:12 msgid "Yes, delete" @@ -154,28 +130,20 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "" -"\n" -"Βρέθηκε ένα αποτέλεσμα" -msgstr[1] "" -"\n" -"Βρέθηκαν %(counter)s αποτελέσματα" +msgstr[0] "\nΒρέθηκε ένα αποτέλεσμα" +msgstr[1] "\nΒρέθηκαν %(counter)s αποτελέσματα" #: templates/wagtailsearch/editorspicks/results.html:18 #, python-format msgid "Sorry, no editor's picks match \"<em>%(query_string)s</em>\"" -msgstr "" -"Λυπούμαστε, δε ταιριάζουν επιλογές συντακτών με το \"<em>%(query_string)s</" -"em>\"" +msgstr "Λυπούμαστε, δε ταιριάζουν επιλογές συντακτών με το \"<em>%(query_string)s</em>\"" #: templates/wagtailsearch/editorspicks/results.html:21 #, python-format msgid "" -"No editor's picks have been created. Why not <a href=" -"\"%(wagtailsearch_editorspicks_add_url)s\">add one</a>?" -msgstr "" -"Δεν υπάρχουν επιλογές συντακτών. Θέλετε να <a href=" -"\"%(wagtailsearch_editorspicks_add_url)s\">προσθέσετε μία</a>;" +"No editor's picks have been created. Why not <a " +"href=\"%(wagtailsearch_editorspicks_add_url)s\">add one</a>?" +msgstr "Δεν υπάρχουν επιλογές συντακτών. Θέλετε να <a href=\"%(wagtailsearch_editorspicks_add_url)s\">προσθέσετε μία</a>;" #: templates/wagtailsearch/editorspicks/includes/editorspicks_form.html:4 msgid "Move up" diff --git a/wagtail/wagtailsearch/locale/en/LC_MESSAGES/django.mo b/wagtail/wagtailsearch/locale/en/LC_MESSAGES/django.mo index 4b726f7d6..44e531ab0 100644 Binary files a/wagtail/wagtailsearch/locale/en/LC_MESSAGES/django.mo and b/wagtail/wagtailsearch/locale/en/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailsearch/locale/en/LC_MESSAGES/django.po b/wagtail/wagtailsearch/locale/en/LC_MESSAGES/django.po index 5db43c886..615e18f93 100644 --- a/wagtail/wagtailsearch/locale/en/LC_MESSAGES/django.po +++ b/wagtail/wagtailsearch/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:54+0000\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -32,7 +32,7 @@ msgstr "" msgid "Please specify at least one recommendation for this search term." msgstr "" -#: wagtail_hooks.py:22 templates/wagtailsearch/editorspicks/list.html:9 +#: wagtail_hooks.py:23 templates/wagtailsearch/editorspicks/list.html:9 msgid "Editors picks" msgstr "" @@ -41,27 +41,27 @@ msgstr "" msgid "Add editor's pick" msgstr "" -#: templates/wagtailsearch/editorspicks/add.html:9 +#: templates/wagtailsearch/editorspicks/add.html:10 msgid "" "\n" -" <p>Editors picks are a means of recommending specific pages that " -"might not organically come high up in search results. E.g recommending your " -"primary donation page to a user searching with a less common term like " +" <p>Editors picks are a means of recommending specific pages " +"that might not organically come high up in search results. E.g recommending " +"your primary donation page to a user searching with a less common term like " "\"<em>giving</em>\".</p>\n" -" " +" " msgstr "" -#: templates/wagtailsearch/editorspicks/add.html:12 +#: templates/wagtailsearch/editorspicks/add.html:13 msgid "" "\n" -" <p>The \"Search term(s)/phrase\" field below must contain the full " -"and exact search for which you wish to provide recommended results, " +" <p>The \"Search term(s)/phrase\" field below must contain " +"the full and exact search for which you wish to provide recommended results, " "<em>including</em> any misspellings/user error. To help, you can choose from " "search terms that have been popular with users of your site.</p>\n" -" " +" " msgstr "" -#: templates/wagtailsearch/editorspicks/add.html:25 +#: templates/wagtailsearch/editorspicks/add.html:27 #: templates/wagtailsearch/editorspicks/edit.html:19 msgid "Save" msgstr "" diff --git a/wagtail/wagtailsearch/locale/es/LC_MESSAGES/django.mo b/wagtail/wagtailsearch/locale/es/LC_MESSAGES/django.mo index 1f680e681..d1321e116 100644 Binary files a/wagtail/wagtailsearch/locale/es/LC_MESSAGES/django.mo and b/wagtail/wagtailsearch/locale/es/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailsearch/locale/es/LC_MESSAGES/django.po b/wagtail/wagtailsearch/locale/es/LC_MESSAGES/django.po index 41e8b9bb8..f619f1125 100644 --- a/wagtail/wagtailsearch/locale/es/LC_MESSAGES/django.po +++ b/wagtail/wagtailsearch/locale/es/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # fooflare <amos.oviedo@gmail.com>, 2014 # fooflare <amos.oviedo@gmail.com>, 2014 @@ -9,15 +9,14 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:54+0000\n" -"PO-Revision-Date: 2014-03-23 10:17+0000\n" -"Last-Translator: fooflare <amos.oviedo@gmail.com>\n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/wagtail/language/" -"es/)\n" -"Language: es\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Spanish (http://www.transifex.com/projects/p/wagtail/language/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: forms.py:9 @@ -29,17 +28,13 @@ msgid "" "Enter the full search string to match. An \n" " exact match is required for your Editors Picks to be \n" " displayed, wildcards are NOT allowed." -msgstr "" -"Introduce la cadena completa de búsqueda a encontrar. Es \n" -" necesaria una coincidencia exacta para que tus Selecciones del " -"Editor sean \n" -" mostradas, los comodines NO están permitidos." +msgstr "Introduce la cadena completa de búsqueda a encontrar. Es \n necesaria una coincidencia exacta para que tus Selecciones del Editor sean \n mostradas, los comodines NO están permitidos." #: forms.py:36 msgid "Please specify at least one recommendation for this search term." msgstr "" -#: wagtail_hooks.py:22 templates/wagtailsearch/editorspicks/list.html:9 +#: wagtail_hooks.py:23 templates/wagtailsearch/editorspicks/list.html:9 msgid "Editors picks" msgstr "Selecciones del editor" @@ -48,41 +43,21 @@ msgstr "Selecciones del editor" msgid "Add editor's pick" msgstr "Añadir selección del editor" -#: templates/wagtailsearch/editorspicks/add.html:9 +#: templates/wagtailsearch/editorspicks/add.html:10 msgid "" "\n" -" <p>Editors picks are a means of recommending specific pages that " -"might not organically come high up in search results. E.g recommending your " -"primary donation page to a user searching with a less common term like " -"\"<em>giving</em>\".</p>\n" -" " +" <p>Editors picks are a means of recommending specific pages that might not organically come high up in search results. E.g recommending your primary donation page to a user searching with a less common term like \"<em>giving</em>\".</p>\n" +" " msgstr "" -"\n" -" <p>Las Selecciones del editor son una manera de recomendar las " -"páginas específicas que podrían no aparecer por sí solas en lo alto de los " -"resultados de búsqueda. P. ej., la recomendación de tu página principal de " -"donaciones a un usuario que busque con un término menos común como " -"\"<em>dando</em>\".</p>\n" -" " -#: templates/wagtailsearch/editorspicks/add.html:12 +#: templates/wagtailsearch/editorspicks/add.html:13 msgid "" "\n" -" <p>The \"Search term(s)/phrase\" field below must contain the full " -"and exact search for which you wish to provide recommended results, " -"<em>including</em> any misspellings/user error. To help, you can choose from " -"search terms that have been popular with users of your site.</p>\n" -" " +" <p>The \"Search term(s)/phrase\" field below must contain the full and exact search for which you wish to provide recommended results, <em>including</em> any misspellings/user error. To help, you can choose from search terms that have been popular with users of your site.</p>\n" +" " msgstr "" -"\n" -" <p>El campo de \"término(s)/frase de Búsqueda\" debe contener la " -"búsqueda completa y exacta por la que deseas que se proporcionen los " -"resultados recomendados, <em>incluyendo</em> cualquier error de de " -"ortografía/usuario. Para ayudar, puedes elegir entre los términos de " -"búsqueda que han sido populares entre los usuarios de tu sitio.</p>\n" -" " -#: templates/wagtailsearch/editorspicks/add.html:25 +#: templates/wagtailsearch/editorspicks/add.html:27 #: templates/wagtailsearch/editorspicks/edit.html:19 msgid "Save" msgstr "Guardar" @@ -99,10 +74,9 @@ msgid "Delete" msgstr "Eliminar" #: templates/wagtailsearch/editorspicks/confirm_delete.html:9 -msgid "Are you sure you want to delete all editors picks for this search term?" -msgstr "" -"¿Seguro que quieres eliminar todas las selecciones del editor para este " -"término de búsqueda?" +msgid "" +"Are you sure you want to delete all editors picks for this search term?" +msgstr "¿Seguro que quieres eliminar todas las selecciones del editor para este término de búsqueda?" #: templates/wagtailsearch/editorspicks/confirm_delete.html:12 msgid "Yes, delete" @@ -156,30 +130,20 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "" -"\n" -" Hay una coincidencia\n" -" " -msgstr[1] "" -"\n" -" Hay %(counter)s coincidencias\n" -" " +msgstr[0] "\n Hay una coincidencia\n " +msgstr[1] "\n Hay %(counter)s coincidencias\n " #: templates/wagtailsearch/editorspicks/results.html:18 #, python-format msgid "Sorry, no editor's picks match \"<em>%(query_string)s</em>\"" -msgstr "" -"Lo sentimos, no hay coincidencias en las selecciones del editor \"<em>" -"%(query_string)s</em>\"" +msgstr "Lo sentimos, no hay coincidencias en las selecciones del editor \"<em>%(query_string)s</em>\"" #: templates/wagtailsearch/editorspicks/results.html:21 #, python-format msgid "" -"No editor's picks have been created. Why not <a href=" -"\"%(wagtailsearch_editorspicks_add_url)s\">add one</a>?" -msgstr "" -"Ninguna selección del editor ha sido creada. ¿Por qué no <a href=" -"\"%(wagtailsearch_editorspicks_add_url)s\">añadir una</a>?" +"No editor's picks have been created. Why not <a " +"href=\"%(wagtailsearch_editorspicks_add_url)s\">add one</a>?" +msgstr "Ninguna selección del editor ha sido creada. ¿Por qué no <a href=\"%(wagtailsearch_editorspicks_add_url)s\">añadir una</a>?" #: templates/wagtailsearch/editorspicks/includes/editorspicks_form.html:4 msgid "Move up" diff --git a/wagtail/wagtailsearch/locale/eu/LC_MESSAGES/django.mo b/wagtail/wagtailsearch/locale/eu/LC_MESSAGES/django.mo index f5afff9e4..b3e5368fc 100644 Binary files a/wagtail/wagtailsearch/locale/eu/LC_MESSAGES/django.mo and b/wagtail/wagtailsearch/locale/eu/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailsearch/locale/eu/LC_MESSAGES/django.po b/wagtail/wagtailsearch/locale/eu/LC_MESSAGES/django.po index 9ae3ba143..277720dcb 100644 --- a/wagtail/wagtailsearch/locale/eu/LC_MESSAGES/django.po +++ b/wagtail/wagtailsearch/locale/eu/LC_MESSAGES/django.po @@ -1,21 +1,20 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:54+0000\n" -"PO-Revision-Date: 2014-03-14 21:12+0000\n" -"Last-Translator: serafeim <serafeim@torchbox.com>\n" -"Language-Team: Basque (http://www.transifex.com/projects/p/wagtail/language/" -"eu/)\n" -"Language: eu\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Basque (http://www.transifex.com/projects/p/wagtail/language/eu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: eu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: forms.py:9 @@ -33,7 +32,7 @@ msgstr "" msgid "Please specify at least one recommendation for this search term." msgstr "" -#: wagtail_hooks.py:22 templates/wagtailsearch/editorspicks/list.html:9 +#: wagtail_hooks.py:23 templates/wagtailsearch/editorspicks/list.html:9 msgid "Editors picks" msgstr "" @@ -42,27 +41,21 @@ msgstr "" msgid "Add editor's pick" msgstr "" -#: templates/wagtailsearch/editorspicks/add.html:9 +#: templates/wagtailsearch/editorspicks/add.html:10 msgid "" "\n" -" <p>Editors picks are a means of recommending specific pages that " -"might not organically come high up in search results. E.g recommending your " -"primary donation page to a user searching with a less common term like " -"\"<em>giving</em>\".</p>\n" -" " +" <p>Editors picks are a means of recommending specific pages that might not organically come high up in search results. E.g recommending your primary donation page to a user searching with a less common term like \"<em>giving</em>\".</p>\n" +" " msgstr "" -#: templates/wagtailsearch/editorspicks/add.html:12 +#: templates/wagtailsearch/editorspicks/add.html:13 msgid "" "\n" -" <p>The \"Search term(s)/phrase\" field below must contain the full " -"and exact search for which you wish to provide recommended results, " -"<em>including</em> any misspellings/user error. To help, you can choose from " -"search terms that have been popular with users of your site.</p>\n" -" " +" <p>The \"Search term(s)/phrase\" field below must contain the full and exact search for which you wish to provide recommended results, <em>including</em> any misspellings/user error. To help, you can choose from search terms that have been popular with users of your site.</p>\n" +" " msgstr "" -#: templates/wagtailsearch/editorspicks/add.html:25 +#: templates/wagtailsearch/editorspicks/add.html:27 #: templates/wagtailsearch/editorspicks/edit.html:19 msgid "Save" msgstr "" @@ -79,7 +72,8 @@ msgid "Delete" msgstr "" #: templates/wagtailsearch/editorspicks/confirm_delete.html:9 -msgid "Are you sure you want to delete all editors picks for this search term?" +msgid "" +"Are you sure you want to delete all editors picks for this search term?" msgstr "" #: templates/wagtailsearch/editorspicks/confirm_delete.html:12 @@ -145,8 +139,8 @@ msgstr "" #: templates/wagtailsearch/editorspicks/results.html:21 #, python-format msgid "" -"No editor's picks have been created. Why not <a href=" -"\"%(wagtailsearch_editorspicks_add_url)s\">add one</a>?" +"No editor's picks have been created. Why not <a " +"href=\"%(wagtailsearch_editorspicks_add_url)s\">add one</a>?" msgstr "" #: templates/wagtailsearch/editorspicks/includes/editorspicks_form.html:4 diff --git a/wagtail/wagtailsearch/locale/fr/LC_MESSAGES/django.mo b/wagtail/wagtailsearch/locale/fr/LC_MESSAGES/django.mo index 3cea88585..f1bd1d685 100644 Binary files a/wagtail/wagtailsearch/locale/fr/LC_MESSAGES/django.mo and b/wagtail/wagtailsearch/locale/fr/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailsearch/locale/fr/LC_MESSAGES/django.po b/wagtail/wagtailsearch/locale/fr/LC_MESSAGES/django.po index 9ef061990..c787820da 100644 --- a/wagtail/wagtailsearch/locale/fr/LC_MESSAGES/django.po +++ b/wagtail/wagtailsearch/locale/fr/LC_MESSAGES/django.po @@ -1,22 +1,21 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # nahuel, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:54+0000\n" -"PO-Revision-Date: 2014-03-18 23:17+0000\n" -"Last-Translator: nahuel\n" -"Language-Team: French (http://www.transifex.com/projects/p/wagtail/language/" -"fr/)\n" -"Language: fr\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: French (http://www.transifex.com/projects/p/wagtail/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: forms.py:9 @@ -34,7 +33,7 @@ msgstr "" msgid "Please specify at least one recommendation for this search term." msgstr "" -#: wagtail_hooks.py:22 templates/wagtailsearch/editorspicks/list.html:9 +#: wagtail_hooks.py:23 templates/wagtailsearch/editorspicks/list.html:9 msgid "Editors picks" msgstr "" @@ -43,27 +42,21 @@ msgstr "" msgid "Add editor's pick" msgstr "" -#: templates/wagtailsearch/editorspicks/add.html:9 +#: templates/wagtailsearch/editorspicks/add.html:10 msgid "" "\n" -" <p>Editors picks are a means of recommending specific pages that " -"might not organically come high up in search results. E.g recommending your " -"primary donation page to a user searching with a less common term like " -"\"<em>giving</em>\".</p>\n" -" " +" <p>Editors picks are a means of recommending specific pages that might not organically come high up in search results. E.g recommending your primary donation page to a user searching with a less common term like \"<em>giving</em>\".</p>\n" +" " msgstr "" -#: templates/wagtailsearch/editorspicks/add.html:12 +#: templates/wagtailsearch/editorspicks/add.html:13 msgid "" "\n" -" <p>The \"Search term(s)/phrase\" field below must contain the full " -"and exact search for which you wish to provide recommended results, " -"<em>including</em> any misspellings/user error. To help, you can choose from " -"search terms that have been popular with users of your site.</p>\n" -" " +" <p>The \"Search term(s)/phrase\" field below must contain the full and exact search for which you wish to provide recommended results, <em>including</em> any misspellings/user error. To help, you can choose from search terms that have been popular with users of your site.</p>\n" +" " msgstr "" -#: templates/wagtailsearch/editorspicks/add.html:25 +#: templates/wagtailsearch/editorspicks/add.html:27 #: templates/wagtailsearch/editorspicks/edit.html:19 msgid "Save" msgstr "Enregistrer" @@ -80,7 +73,8 @@ msgid "Delete" msgstr "Supprimer" #: templates/wagtailsearch/editorspicks/confirm_delete.html:9 -msgid "Are you sure you want to delete all editors picks for this search term?" +msgid "" +"Are you sure you want to delete all editors picks for this search term?" msgstr "" #: templates/wagtailsearch/editorspicks/confirm_delete.html:12 @@ -141,15 +135,13 @@ msgstr[1] "" #: templates/wagtailsearch/editorspicks/results.html:18 #, python-format msgid "Sorry, no editor's picks match \"<em>%(query_string)s</em>\"" -msgstr "" -"Désolé, aucun choix de rédacteur ne correspond avec \"<em>%(query_string)s</" -"em>\"" +msgstr "Désolé, aucun choix de rédacteur ne correspond avec \"<em>%(query_string)s</em>\"" #: templates/wagtailsearch/editorspicks/results.html:21 #, python-format msgid "" -"No editor's picks have been created. Why not <a href=" -"\"%(wagtailsearch_editorspicks_add_url)s\">add one</a>?" +"No editor's picks have been created. Why not <a " +"href=\"%(wagtailsearch_editorspicks_add_url)s\">add one</a>?" msgstr "" #: templates/wagtailsearch/editorspicks/includes/editorspicks_form.html:4 diff --git a/wagtail/wagtailsearch/locale/gl/LC_MESSAGES/django.mo b/wagtail/wagtailsearch/locale/gl/LC_MESSAGES/django.mo index 8686026e8..d9ea5fd04 100644 Binary files a/wagtail/wagtailsearch/locale/gl/LC_MESSAGES/django.mo and b/wagtail/wagtailsearch/locale/gl/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailsearch/locale/gl/LC_MESSAGES/django.po b/wagtail/wagtailsearch/locale/gl/LC_MESSAGES/django.po index 18e32e638..bd63b29ba 100644 --- a/wagtail/wagtailsearch/locale/gl/LC_MESSAGES/django.po +++ b/wagtail/wagtailsearch/locale/gl/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # fooflare <amos.oviedo@gmail.com>, 2014 # fooflare <amos.oviedo@gmail.com>, 2014 @@ -9,15 +9,14 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:54+0000\n" -"PO-Revision-Date: 2014-03-23 10:33+0000\n" -"Last-Translator: fooflare <amos.oviedo@gmail.com>\n" -"Language-Team: Galician (http://www.transifex.com/projects/p/wagtail/" -"language/gl/)\n" -"Language: gl\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Galician (http://www.transifex.com/projects/p/wagtail/language/gl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: gl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: forms.py:9 @@ -29,17 +28,13 @@ msgid "" "Enter the full search string to match. An \n" " exact match is required for your Editors Picks to be \n" " displayed, wildcards are NOT allowed." -msgstr "" -"Introduce a cadea completa de busca a atopar. É \n" -" necesaria unha coincidencia exacta para que as túas Seleccións do " -"Editor sexan \n" -" mostradas, os comodines NON están permitidos." +msgstr "Introduce a cadea completa de busca a atopar. É \n necesaria unha coincidencia exacta para que as túas Seleccións do Editor sexan \n mostradas, os comodines NON están permitidos." #: forms.py:36 msgid "Please specify at least one recommendation for this search term." msgstr "" -#: wagtail_hooks.py:22 templates/wagtailsearch/editorspicks/list.html:9 +#: wagtail_hooks.py:23 templates/wagtailsearch/editorspicks/list.html:9 msgid "Editors picks" msgstr "Seleccións do editor" @@ -48,41 +43,21 @@ msgstr "Seleccións do editor" msgid "Add editor's pick" msgstr "Engadir selección do editor" -#: templates/wagtailsearch/editorspicks/add.html:9 +#: templates/wagtailsearch/editorspicks/add.html:10 msgid "" "\n" -" <p>Editors picks are a means of recommending specific pages that " -"might not organically come high up in search results. E.g recommending your " -"primary donation page to a user searching with a less common term like " -"\"<em>giving</em>\".</p>\n" -" " +" <p>Editors picks are a means of recommending specific pages that might not organically come high up in search results. E.g recommending your primary donation page to a user searching with a less common term like \"<em>giving</em>\".</p>\n" +" " msgstr "" -"\n" -" <p>As Seleccións do editor son unha maneira de recomendar as " -"páxinas específicas que poderían non aparecer por sí soas no alto dos " -"resultados de búsqueda. P. ex., a recomendación da túa páxina principal de " -"donacións a un usuario que procure con un termo menos común como " -"\"<em>dando</em>\".</p>\n" -" " -#: templates/wagtailsearch/editorspicks/add.html:12 +#: templates/wagtailsearch/editorspicks/add.html:13 msgid "" "\n" -" <p>The \"Search term(s)/phrase\" field below must contain the full " -"and exact search for which you wish to provide recommended results, " -"<em>including</em> any misspellings/user error. To help, you can choose from " -"search terms that have been popular with users of your site.</p>\n" -" " +" <p>The \"Search term(s)/phrase\" field below must contain the full and exact search for which you wish to provide recommended results, <em>including</em> any misspellings/user error. To help, you can choose from search terms that have been popular with users of your site.</p>\n" +" " msgstr "" -"\n" -" <p>O campo de \"termo(s)/frase de Busca\" debe conter a busca " -"completa e exacta pola que desexas que se proporcionen os resultados " -"recomendados, <em>incluíndo</em> calquera erro de de ortografía/usuario. " -"Para axudar, podes elixir entre os termos de busca que foron populares entre " -"os usuarios do teu sitio.</p>\n" -" " -#: templates/wagtailsearch/editorspicks/add.html:25 +#: templates/wagtailsearch/editorspicks/add.html:27 #: templates/wagtailsearch/editorspicks/edit.html:19 msgid "Save" msgstr "Gardar" @@ -99,10 +74,9 @@ msgid "Delete" msgstr "Eliminar" #: templates/wagtailsearch/editorspicks/confirm_delete.html:9 -msgid "Are you sure you want to delete all editors picks for this search term?" -msgstr "" -"¿Seguro que queres eliminar todas as seleccións do editor para este termo de " -"busca?" +msgid "" +"Are you sure you want to delete all editors picks for this search term?" +msgstr "¿Seguro que queres eliminar todas as seleccións do editor para este termo de busca?" #: templates/wagtailsearch/editorspicks/confirm_delete.html:12 msgid "Yes, delete" @@ -156,29 +130,20 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "" -"\n" -" Hai unha coincidencia\n" -" " -msgstr[1] "" -"\n" -" Hai %(counter)s coincidencias\n" -" " +msgstr[0] "\n Hai unha coincidencia\n " +msgstr[1] "\n Hai %(counter)s coincidencias\n " #: templates/wagtailsearch/editorspicks/results.html:18 #, python-format msgid "Sorry, no editor's picks match \"<em>%(query_string)s</em>\"" -msgstr "" -"Sentímolo, ningunha selección do editor contén \"<em>%(query_string)s</em>\"" +msgstr "Sentímolo, ningunha selección do editor contén \"<em>%(query_string)s</em>\"" #: templates/wagtailsearch/editorspicks/results.html:21 #, python-format msgid "" -"No editor's picks have been created. Why not <a href=" -"\"%(wagtailsearch_editorspicks_add_url)s\">add one</a>?" -msgstr "" -"Ningunha selección do editor foi creada. ¿Por qué non <a href=" -"\"%(wagtailsearch_editorspicks_add_url)s\">engadir unha</a>?" +"No editor's picks have been created. Why not <a " +"href=\"%(wagtailsearch_editorspicks_add_url)s\">add one</a>?" +msgstr "Ningunha selección do editor foi creada. ¿Por qué non <a href=\"%(wagtailsearch_editorspicks_add_url)s\">engadir unha</a>?" #: templates/wagtailsearch/editorspicks/includes/editorspicks_form.html:4 msgid "Move up" diff --git a/wagtail/wagtailsearch/locale/mn/LC_MESSAGES/django.mo b/wagtail/wagtailsearch/locale/mn/LC_MESSAGES/django.mo index ab9c57461..e5957554f 100644 Binary files a/wagtail/wagtailsearch/locale/mn/LC_MESSAGES/django.mo and b/wagtail/wagtailsearch/locale/mn/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailsearch/locale/mn/LC_MESSAGES/django.po b/wagtail/wagtailsearch/locale/mn/LC_MESSAGES/django.po index 0281e67ce..a0544cbc2 100644 --- a/wagtail/wagtailsearch/locale/mn/LC_MESSAGES/django.po +++ b/wagtail/wagtailsearch/locale/mn/LC_MESSAGES/django.po @@ -1,22 +1,21 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: -# delgermurun <info@delgermurun.com>, 2014 +# Delgermurun Purevkhuuu <info@delgermurun.com>, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:54+0000\n" -"PO-Revision-Date: 2014-03-14 21:12+0000\n" -"Last-Translator: serafeim <serafeim@torchbox.com>\n" -"Language-Team: Mongolian (http://www.transifex.com/projects/p/wagtail/" -"language/mn/)\n" -"Language: mn\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Mongolian (http://www.transifex.com/projects/p/wagtail/language/mn/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: mn\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: forms.py:9 @@ -34,7 +33,7 @@ msgstr "" msgid "Please specify at least one recommendation for this search term." msgstr "" -#: wagtail_hooks.py:22 templates/wagtailsearch/editorspicks/list.html:9 +#: wagtail_hooks.py:23 templates/wagtailsearch/editorspicks/list.html:9 msgid "Editors picks" msgstr "" @@ -43,27 +42,21 @@ msgstr "" msgid "Add editor's pick" msgstr "" -#: templates/wagtailsearch/editorspicks/add.html:9 +#: templates/wagtailsearch/editorspicks/add.html:10 msgid "" "\n" -" <p>Editors picks are a means of recommending specific pages that " -"might not organically come high up in search results. E.g recommending your " -"primary donation page to a user searching with a less common term like " -"\"<em>giving</em>\".</p>\n" -" " +" <p>Editors picks are a means of recommending specific pages that might not organically come high up in search results. E.g recommending your primary donation page to a user searching with a less common term like \"<em>giving</em>\".</p>\n" +" " msgstr "" -#: templates/wagtailsearch/editorspicks/add.html:12 +#: templates/wagtailsearch/editorspicks/add.html:13 msgid "" "\n" -" <p>The \"Search term(s)/phrase\" field below must contain the full " -"and exact search for which you wish to provide recommended results, " -"<em>including</em> any misspellings/user error. To help, you can choose from " -"search terms that have been popular with users of your site.</p>\n" -" " +" <p>The \"Search term(s)/phrase\" field below must contain the full and exact search for which you wish to provide recommended results, <em>including</em> any misspellings/user error. To help, you can choose from search terms that have been popular with users of your site.</p>\n" +" " msgstr "" -#: templates/wagtailsearch/editorspicks/add.html:25 +#: templates/wagtailsearch/editorspicks/add.html:27 #: templates/wagtailsearch/editorspicks/edit.html:19 msgid "Save" msgstr "Хадгалах" @@ -80,7 +73,8 @@ msgid "Delete" msgstr "Устгах" #: templates/wagtailsearch/editorspicks/confirm_delete.html:9 -msgid "Are you sure you want to delete all editors picks for this search term?" +msgid "" +"Are you sure you want to delete all editors picks for this search term?" msgstr "" #: templates/wagtailsearch/editorspicks/confirm_delete.html:12 @@ -146,8 +140,8 @@ msgstr "" #: templates/wagtailsearch/editorspicks/results.html:21 #, python-format msgid "" -"No editor's picks have been created. Why not <a href=" -"\"%(wagtailsearch_editorspicks_add_url)s\">add one</a>?" +"No editor's picks have been created. Why not <a " +"href=\"%(wagtailsearch_editorspicks_add_url)s\">add one</a>?" msgstr "" #: templates/wagtailsearch/editorspicks/includes/editorspicks_form.html:4 diff --git a/wagtail/wagtailsearch/locale/pl/LC_MESSAGES/django.mo b/wagtail/wagtailsearch/locale/pl/LC_MESSAGES/django.mo index 12372660b..fbb63539a 100644 Binary files a/wagtail/wagtailsearch/locale/pl/LC_MESSAGES/django.mo and b/wagtail/wagtailsearch/locale/pl/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailsearch/locale/pl/LC_MESSAGES/django.po b/wagtail/wagtailsearch/locale/pl/LC_MESSAGES/django.po index aca122059..430cfba84 100644 --- a/wagtail/wagtailsearch/locale/pl/LC_MESSAGES/django.po +++ b/wagtail/wagtailsearch/locale/pl/LC_MESSAGES/django.po @@ -1,24 +1,22 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # utek <mail@utek.pl>, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:54+0000\n" -"PO-Revision-Date: 2014-03-14 22:16+0000\n" -"Last-Translator: utek <mail@utek.pl>\n" -"Language-Team: Polish (http://www.transifex.com/projects/p/wagtail/language/" -"pl/)\n" -"Language: pl\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Polish (http://www.transifex.com/projects/p/wagtail/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2);\n" +"Language: pl\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: forms.py:9 msgid "Search term(s)/phrase" @@ -29,17 +27,13 @@ msgid "" "Enter the full search string to match. An \n" " exact match is required for your Editors Picks to be \n" " displayed, wildcards are NOT allowed." -msgstr "" -"Wprowadź pełną frazę wyszukania do porównania.\n" -" Dokładne porównanie jest wymagane żeby twoje \n" -" wybory redakcji były wyświetlone, symbol \n" -" wieloznaczności jest niedozwolony." +msgstr "Wprowadź pełną frazę wyszukania do porównania.\n Dokładne porównanie jest wymagane żeby twoje \n wybory redakcji były wyświetlone, symbol \n wieloznaczności jest niedozwolony." #: forms.py:36 msgid "Please specify at least one recommendation for this search term." msgstr "" -#: wagtail_hooks.py:22 templates/wagtailsearch/editorspicks/list.html:9 +#: wagtail_hooks.py:23 templates/wagtailsearch/editorspicks/list.html:9 msgid "Editors picks" msgstr "Wybór redakcji" @@ -48,39 +42,21 @@ msgstr "Wybór redakcji" msgid "Add editor's pick" msgstr "Dodaj wybór redakcji" -#: templates/wagtailsearch/editorspicks/add.html:9 +#: templates/wagtailsearch/editorspicks/add.html:10 msgid "" "\n" -" <p>Editors picks are a means of recommending specific pages that " -"might not organically come high up in search results. E.g recommending your " -"primary donation page to a user searching with a less common term like " -"\"<em>giving</em>\".</p>\n" -" " +" <p>Editors picks are a means of recommending specific pages that might not organically come high up in search results. E.g recommending your primary donation page to a user searching with a less common term like \"<em>giving</em>\".</p>\n" +" " msgstr "" -"\n" -" <p>Wybór redakcji służy do polecania stron, które normalnie " -"niekoniecznie pojawiają sie wysoko w wynikach wyszukiwania. Np. polecanie " -"głównej strony z darowiznami użytkownikom szukającym mniej pasujących " -"wyrażeń jak np. \"<em>oferować</em>\".</p>\n" -" " -#: templates/wagtailsearch/editorspicks/add.html:12 +#: templates/wagtailsearch/editorspicks/add.html:13 msgid "" "\n" -" <p>The \"Search term(s)/phrase\" field below must contain the full " -"and exact search for which you wish to provide recommended results, " -"<em>including</em> any misspellings/user error. To help, you can choose from " -"search terms that have been popular with users of your site.</p>\n" -" " +" <p>The \"Search term(s)/phrase\" field below must contain the full and exact search for which you wish to provide recommended results, <em>including</em> any misspellings/user error. To help, you can choose from search terms that have been popular with users of your site.</p>\n" +" " msgstr "" -"\n" -" <p>Pole \"Frazy wyszukiwania\" musi zawierać pełne i dokładne " -"wyszukanie dla którego chcesz wyświetlić polecanie wyniki, <em>razem z</em> " -"wszystkimi literówkami/błędami użytkownika. W celu ułatwienia możesz wybrać " -"z fraz wyszukiwania popularnych wśród użytkowników Twojej strony</p>\n" -" " -#: templates/wagtailsearch/editorspicks/add.html:25 +#: templates/wagtailsearch/editorspicks/add.html:27 #: templates/wagtailsearch/editorspicks/edit.html:19 msgid "Save" msgstr "Zapisz" @@ -97,10 +73,9 @@ msgid "Delete" msgstr "Usuń" #: templates/wagtailsearch/editorspicks/confirm_delete.html:9 -msgid "Are you sure you want to delete all editors picks for this search term?" -msgstr "" -"Czy na pewno chcesz usunąć wszystkie wybory redakcji dla tych fraz " -"wyszukiwania?" +msgid "" +"Are you sure you want to delete all editors picks for this search term?" +msgstr "Czy na pewno chcesz usunąć wszystkie wybory redakcji dla tych fraz wyszukiwania?" #: templates/wagtailsearch/editorspicks/confirm_delete.html:12 msgid "Yes, delete" @@ -154,34 +129,21 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "" -"\n" -" Jedno dopasowanie\n" -" " -msgstr[1] "" -"\n" -" Są %(counter)s dopasowania\n" -" " -msgstr[2] "" -"\n" -" Jest %(counter)s dopasowań\n" -" " +msgstr[0] "\n Jedno dopasowanie\n " +msgstr[1] "\n Są %(counter)s dopasowania\n " +msgstr[2] "\n Jest %(counter)s dopasowań\n " #: templates/wagtailsearch/editorspicks/results.html:18 #, python-format msgid "Sorry, no editor's picks match \"<em>%(query_string)s</em>\"" -msgstr "" -"Przepraszamy, żaden wybór redakcji nie pasuje do \"<em>%(query_string)s</em>" -"\"" +msgstr "Przepraszamy, żaden wybór redakcji nie pasuje do \"<em>%(query_string)s</em>\"" #: templates/wagtailsearch/editorspicks/results.html:21 #, python-format msgid "" -"No editor's picks have been created. Why not <a href=" -"\"%(wagtailsearch_editorspicks_add_url)s\">add one</a>?" -msgstr "" -"Nie stworzono żadnego wyboru redakcji. Czemu nie <a href=" -"\"%(wagtailsearch_editorspicks_add_url)s\">dodać jakiegoś</a>?" +"No editor's picks have been created. Why not <a " +"href=\"%(wagtailsearch_editorspicks_add_url)s\">add one</a>?" +msgstr "Nie stworzono żadnego wyboru redakcji. Czemu nie <a href=\"%(wagtailsearch_editorspicks_add_url)s\">dodać jakiegoś</a>?" #: templates/wagtailsearch/editorspicks/includes/editorspicks_form.html:4 msgid "Move up" diff --git a/wagtail/wagtailsearch/locale/ro/LC_MESSAGES/django.mo b/wagtail/wagtailsearch/locale/ro/LC_MESSAGES/django.mo index 7ef6bef02..305c7c463 100644 Binary files a/wagtail/wagtailsearch/locale/ro/LC_MESSAGES/django.mo and b/wagtail/wagtailsearch/locale/ro/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailsearch/locale/ro/LC_MESSAGES/django.po b/wagtail/wagtailsearch/locale/ro/LC_MESSAGES/django.po index 4bec0c5af..6301dd67b 100644 --- a/wagtail/wagtailsearch/locale/ro/LC_MESSAGES/django.po +++ b/wagtail/wagtailsearch/locale/ro/LC_MESSAGES/django.po @@ -1,25 +1,23 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: -# zerolab, 2014 -# zerolab, 2014 +# Dan Braghis, 2014 +# Dan Braghis, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:54+0000\n" -"PO-Revision-Date: 2014-03-18 13:21+0000\n" -"Last-Translator: zerolab\n" -"Language-Team: Romanian (http://www.transifex.com/projects/p/wagtail/" -"language/ro/)\n" -"Language: ro\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Romanian (http://www.transifex.com/projects/p/wagtail/language/ro/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?" -"2:1));\n" +"Language: ro\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" #: forms.py:9 msgid "Search term(s)/phrase" @@ -30,16 +28,13 @@ msgid "" "Enter the full search string to match. An \n" " exact match is required for your Editors Picks to be \n" " displayed, wildcards are NOT allowed." -msgstr "" -"Introduceți șirul complet de căutare. \n" -"Este nevoie de o potrivire exactă pentru a afișa selecțiile \n" -"dvs. editoriale. Metacaractere NU sunt permise." +msgstr "Introduceți șirul complet de căutare. \nEste nevoie de o potrivire exactă pentru a afișa selecțiile \ndvs. editoriale. Metacaractere NU sunt permise." #: forms.py:36 msgid "Please specify at least one recommendation for this search term." msgstr "" -#: wagtail_hooks.py:22 templates/wagtailsearch/editorspicks/list.html:9 +#: wagtail_hooks.py:23 templates/wagtailsearch/editorspicks/list.html:9 msgid "Editors picks" msgstr "Selecții editoriale" @@ -48,37 +43,21 @@ msgstr "Selecții editoriale" msgid "Add editor's pick" msgstr "Adaugă selecție editorială" -#: templates/wagtailsearch/editorspicks/add.html:9 +#: templates/wagtailsearch/editorspicks/add.html:10 msgid "" "\n" -" <p>Editors picks are a means of recommending specific pages that " -"might not organically come high up in search results. E.g recommending your " -"primary donation page to a user searching with a less common term like " -"\"<em>giving</em>\".</p>\n" -" " +" <p>Editors picks are a means of recommending specific pages that might not organically come high up in search results. E.g recommending your primary donation page to a user searching with a less common term like \"<em>giving</em>\".</p>\n" +" " msgstr "" -"\n" -"<p>Selecțiile editoriale sunt mijloace de recomandare de pagini ce pot să nu " -"apară la începutul rezultatelor de căutare în mod natural. De exemplu, " -"recomandarea paginii de donații utilizatorilor care au căutat termeni mai " -"puțin specifici ca \"<em>dare</em>\".</p>" -#: templates/wagtailsearch/editorspicks/add.html:12 +#: templates/wagtailsearch/editorspicks/add.html:13 msgid "" "\n" -" <p>The \"Search term(s)/phrase\" field below must contain the full " -"and exact search for which you wish to provide recommended results, " -"<em>including</em> any misspellings/user error. To help, you can choose from " -"search terms that have been popular with users of your site.</p>\n" -" " +" <p>The \"Search term(s)/phrase\" field below must contain the full and exact search for which you wish to provide recommended results, <em>including</em> any misspellings/user error. To help, you can choose from search terms that have been popular with users of your site.</p>\n" +" " msgstr "" -"\n" -"<p>Câmpul \"Termeni/frază de căutare\" de mai jos trebuie să conțină șirul " -"exact pentru care doriți să furnizați rezultate recomandate. <em>Includeți</" -"em> greșeli ortografice și alte greșeli. Puteți să alegeți din termenii de " -"căutare populari printre utilizatorii sitului dvs.</p>" -#: templates/wagtailsearch/editorspicks/add.html:25 +#: templates/wagtailsearch/editorspicks/add.html:27 #: templates/wagtailsearch/editorspicks/edit.html:19 msgid "Save" msgstr "Salvează" @@ -95,10 +74,9 @@ msgid "Delete" msgstr "Șterge" #: templates/wagtailsearch/editorspicks/confirm_delete.html:9 -msgid "Are you sure you want to delete all editors picks for this search term?" -msgstr "" -"Sigur doriți să ștergeți toate selecțiile editoriale pentru acest termen de " -"căutare?" +msgid "" +"Are you sure you want to delete all editors picks for this search term?" +msgstr "Sigur doriți să ștergeți toate selecțiile editoriale pentru acest termen de căutare?" #: templates/wagtailsearch/editorspicks/confirm_delete.html:12 msgid "Yes, delete" @@ -152,31 +130,21 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "" -"\n" -"Există o potrivire" -msgstr[1] "" -"\n" -"Sunt %(counter)s potriviri" -msgstr[2] "" -"\n" -"Sunt %(counter)s potriviri" +msgstr[0] "\nExistă o potrivire" +msgstr[1] "\nSunt %(counter)s potriviri" +msgstr[2] "\nSunt %(counter)s potriviri" #: templates/wagtailsearch/editorspicks/results.html:18 #, python-format msgid "Sorry, no editor's picks match \"<em>%(query_string)s</em>\"" -msgstr "" -"Ne pare rău, \"<em>%(query_string)s</em>\" nu se potrivește cu nici o " -"selecție editorială" +msgstr "Ne pare rău, \"<em>%(query_string)s</em>\" nu se potrivește cu nici o selecție editorială" #: templates/wagtailsearch/editorspicks/results.html:21 #, python-format msgid "" -"No editor's picks have been created. Why not <a href=" -"\"%(wagtailsearch_editorspicks_add_url)s\">add one</a>?" -msgstr "" -"Nu a fost creată nici o selecție editorială. De ce să nu <a href=" -"\"%(wagtailsearch_editorspicks_add_url)s\">adăugați una</a>?" +"No editor's picks have been created. Why not <a " +"href=\"%(wagtailsearch_editorspicks_add_url)s\">add one</a>?" +msgstr "Nu a fost creată nici o selecție editorială. De ce să nu <a href=\"%(wagtailsearch_editorspicks_add_url)s\">adăugați una</a>?" #: templates/wagtailsearch/editorspicks/includes/editorspicks_form.html:4 msgid "Move up" diff --git a/wagtail/wagtailsearch/locale/zh/LC_MESSAGES/django.mo b/wagtail/wagtailsearch/locale/zh/LC_MESSAGES/django.mo index 9d3efb3bf..da1c1893d 100644 Binary files a/wagtail/wagtailsearch/locale/zh/LC_MESSAGES/django.mo and b/wagtail/wagtailsearch/locale/zh/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailsearch/locale/zh/LC_MESSAGES/django.po b/wagtail/wagtailsearch/locale/zh/LC_MESSAGES/django.po index a5007c7b2..0d7561367 100644 --- a/wagtail/wagtailsearch/locale/zh/LC_MESSAGES/django.po +++ b/wagtail/wagtailsearch/locale/zh/LC_MESSAGES/django.po @@ -1,21 +1,20 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:54+0000\n" -"PO-Revision-Date: 2014-03-14 21:12+0000\n" -"Last-Translator: serafeim <serafeim@torchbox.com>\n" -"Language-Team: Chinese (http://www.transifex.com/projects/p/wagtail/language/" -"zh/)\n" -"Language: zh\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Chinese (http://www.transifex.com/projects/p/wagtail/language/zh/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: zh\n" "Plural-Forms: nplurals=1; plural=0;\n" #: forms.py:9 @@ -27,16 +26,13 @@ msgid "" "Enter the full search string to match. An \n" " exact match is required for your Editors Picks to be \n" " displayed, wildcards are NOT allowed." -msgstr "" -"输入完整的字符来匹配. \n" -" 必须输入完全一样的编辑精选进行匹配 \n" -" 不允许匹配" +msgstr "输入完整的字符来匹配. \n 必须输入完全一样的编辑精选进行匹配 \n 不允许匹配" #: forms.py:36 msgid "Please specify at least one recommendation for this search term." msgstr "" -#: wagtail_hooks.py:22 templates/wagtailsearch/editorspicks/list.html:9 +#: wagtail_hooks.py:23 templates/wagtailsearch/editorspicks/list.html:9 msgid "Editors picks" msgstr "编辑精选" @@ -45,35 +41,21 @@ msgstr "编辑精选" msgid "Add editor's pick" msgstr "添加编辑精选" -#: templates/wagtailsearch/editorspicks/add.html:9 +#: templates/wagtailsearch/editorspicks/add.html:10 msgid "" "\n" -" <p>Editors picks are a means of recommending specific pages that " -"might not organically come high up in search results. E.g recommending your " -"primary donation page to a user searching with a less common term like " -"\"<em>giving</em>\".</p>\n" -" " +" <p>Editors picks are a means of recommending specific pages that might not organically come high up in search results. E.g recommending your primary donation page to a user searching with a less common term like \"<em>giving</em>\".</p>\n" +" " msgstr "" -"\n" -" <p>编辑精选是用于推荐部分在搜索排名不高的页面. 比如用关键词推荐用户到" -"捐助页面。</p>\n" -" " -#: templates/wagtailsearch/editorspicks/add.html:12 +#: templates/wagtailsearch/editorspicks/add.html:13 msgid "" "\n" -" <p>The \"Search term(s)/phrase\" field below must contain the full " -"and exact search for which you wish to provide recommended results, " -"<em>including</em> any misspellings/user error. To help, you can choose from " -"search terms that have been popular with users of your site.</p>\n" -" " +" <p>The \"Search term(s)/phrase\" field below must contain the full and exact search for which you wish to provide recommended results, <em>including</em> any misspellings/user error. To help, you can choose from search terms that have been popular with users of your site.</p>\n" +" " msgstr "" -"\n" -" <p>下面空格中的搜索关键词必须是你希望提供推荐结果的完整关键词,<em>包" -"括</em>任何可能错拼的词组. 提示,你可以从流行的搜索关键词中选择.</p>\n" -" " -#: templates/wagtailsearch/editorspicks/add.html:25 +#: templates/wagtailsearch/editorspicks/add.html:27 #: templates/wagtailsearch/editorspicks/edit.html:19 msgid "Save" msgstr "保存" @@ -90,7 +72,8 @@ msgid "Delete" msgstr "删除" #: templates/wagtailsearch/editorspicks/confirm_delete.html:9 -msgid "Are you sure you want to delete all editors picks for this search term?" +msgid "" +"Are you sure you want to delete all editors picks for this search term?" msgstr "你确定你想要删除所有匹配这个关键词的编辑精选吗?" #: templates/wagtailsearch/editorspicks/confirm_delete.html:12 @@ -155,11 +138,9 @@ msgstr "" #: templates/wagtailsearch/editorspicks/results.html:21 #, python-format msgid "" -"No editor's picks have been created. Why not <a href=" -"\"%(wagtailsearch_editorspicks_add_url)s\">add one</a>?" -msgstr "" -"没有任何已保存的编辑精选. 为什么不 <a href=" -"\"%(wagtailsearch_editorspicks_add_url)s\">加入一个</a>?" +"No editor's picks have been created. Why not <a " +"href=\"%(wagtailsearch_editorspicks_add_url)s\">add one</a>?" +msgstr "没有任何已保存的编辑精选. 为什么不 <a href=\"%(wagtailsearch_editorspicks_add_url)s\">加入一个</a>?" #: templates/wagtailsearch/editorspicks/includes/editorspicks_form.html:4 msgid "Move up" diff --git a/wagtail/wagtailsearch/locale/zh_TW/LC_MESSAGES/django.mo b/wagtail/wagtailsearch/locale/zh_TW/LC_MESSAGES/django.mo index 038c04394..048f04874 100644 Binary files a/wagtail/wagtailsearch/locale/zh_TW/LC_MESSAGES/django.mo and b/wagtail/wagtailsearch/locale/zh_TW/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailsearch/locale/zh_TW/LC_MESSAGES/django.po b/wagtail/wagtailsearch/locale/zh_TW/LC_MESSAGES/django.po index 4b74195b5..00bc8ec1a 100644 --- a/wagtail/wagtailsearch/locale/zh_TW/LC_MESSAGES/django.po +++ b/wagtail/wagtailsearch/locale/zh_TW/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:54+0000\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" "PO-Revision-Date: 2014-03-14 21:12+0000\n" "Last-Translator: wdv4758h <wdv4758h@gmail.com>\n" "Language-Team: \n" @@ -35,7 +35,7 @@ msgstr "" msgid "Please specify at least one recommendation for this search term." msgstr "" -#: wagtail_hooks.py:22 templates/wagtailsearch/editorspicks/list.html:9 +#: wagtail_hooks.py:23 templates/wagtailsearch/editorspicks/list.html:9 msgid "Editors picks" msgstr "編者精選" @@ -44,35 +44,37 @@ msgstr "編者精選" msgid "Add editor's pick" msgstr "新增編者精選" -#: templates/wagtailsearch/editorspicks/add.html:9 +#: templates/wagtailsearch/editorspicks/add.html:10 +#, fuzzy msgid "" "\n" -" <p>Editors picks are a means of recommending specific pages that " -"might not organically come high up in search results. E.g recommending your " -"primary donation page to a user searching with a less common term like " +" <p>Editors picks are a means of recommending specific pages " +"that might not organically come high up in search results. E.g recommending " +"your primary donation page to a user searching with a less common term like " "\"<em>giving</em>\".</p>\n" -" " +" " msgstr "" "\n" " <p>編者精選是用於推薦部份在搜尋排名不高的頁面。 例如用關鍵字推薦使用" "者到捐獻頁面。</p>\n" " " -#: templates/wagtailsearch/editorspicks/add.html:12 +#: templates/wagtailsearch/editorspicks/add.html:13 +#, fuzzy msgid "" "\n" -" <p>The \"Search term(s)/phrase\" field below must contain the full " -"and exact search for which you wish to provide recommended results, " +" <p>The \"Search term(s)/phrase\" field below must contain " +"the full and exact search for which you wish to provide recommended results, " "<em>including</em> any misspellings/user error. To help, you can choose from " "search terms that have been popular with users of your site.</p>\n" -" " +" " msgstr "" "\n" " <p>下面的關鍵字必須是你希望推薦結果的完整關鍵字,<em>包括</em>任何可" "能拼錯的詞。 提示,你可以從熱門的關鍵字選擇。</p>\n" " " -#: templates/wagtailsearch/editorspicks/add.html:25 +#: templates/wagtailsearch/editorspicks/add.html:27 #: templates/wagtailsearch/editorspicks/edit.html:19 msgid "Save" msgstr "儲存" diff --git a/wagtail/wagtailsearch/migrations/0001_initial.py b/wagtail/wagtailsearch/south_migrations/0001_initial.py similarity index 100% rename from wagtail/wagtailsearch/migrations/0001_initial.py rename to wagtail/wagtailsearch/south_migrations/0001_initial.py diff --git a/wagtail/wagtailsearch/migrations/0002_auto__add_field_searchtest_live.py b/wagtail/wagtailsearch/south_migrations/0002_auto__add_field_searchtest_live.py similarity index 100% rename from wagtail/wagtailsearch/migrations/0002_auto__add_field_searchtest_live.py rename to wagtail/wagtailsearch/south_migrations/0002_auto__add_field_searchtest_live.py diff --git a/wagtail/wagtailsearch/migrations/0003_auto__del_searchtestchild__del_searchtest.py b/wagtail/wagtailsearch/south_migrations/0003_auto__del_searchtestchild__del_searchtest.py similarity index 100% rename from wagtail/wagtailsearch/migrations/0003_auto__del_searchtestchild__del_searchtest.py rename to wagtail/wagtailsearch/south_migrations/0003_auto__del_searchtestchild__del_searchtest.py diff --git a/wagtail/wagtailsearch/south_migrations/__init__.py b/wagtail/wagtailsearch/south_migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/wagtail/wagtailsearch/templates/wagtailsearch/editorspicks/add.html b/wagtail/wagtailsearch/templates/wagtailsearch/editorspicks/add.html index f443d1a6a..7fe3558e3 100644 --- a/wagtail/wagtailsearch/templates/wagtailsearch/editorspicks/add.html +++ b/wagtail/wagtailsearch/templates/wagtailsearch/editorspicks/add.html @@ -6,12 +6,14 @@ {% include "wagtailadmin/shared/header.html" with title=add_str icon="pick" %} <div class="nice-padding"> - {% blocktrans %} - <p>Editors picks are a means of recommending specific pages that might not organically come high up in search results. E.g recommending your primary donation page to a user searching with a less common term like "<em>giving</em>".</p> - {% endblocktrans %} - {% blocktrans %} - <p>The "Search term(s)/phrase" field below must contain the full and exact search for which you wish to provide recommended results, <em>including</em> any misspellings/user error. To help, you can choose from search terms that have been popular with users of your site.</p> - {% endblocktrans %} + <div class="help-block help-info"> + {% blocktrans %} + <p>Editors picks are a means of recommending specific pages that might not organically come high up in search results. E.g recommending your primary donation page to a user searching with a less common term like "<em>giving</em>".</p> + {% endblocktrans %} + {% blocktrans %} + <p>The "Search term(s)/phrase" field below must contain the full and exact search for which you wish to provide recommended results, <em>including</em> any misspellings/user error. To help, you can choose from search terms that have been popular with users of your site.</p> + {% endblocktrans %} + </div> <form action="{% url 'wagtailsearch_editorspicks_add' %}" method="POST"> {% csrf_token %} diff --git a/wagtail/wagtailsearch/templates/wagtailsearch/queries/chooser/results.html b/wagtail/wagtailsearch/templates/wagtailsearch/queries/chooser/results.html index a9e25e641..867d9757c 100644 --- a/wagtail/wagtailsearch/templates/wagtailsearch/queries/chooser/results.html +++ b/wagtail/wagtailsearch/templates/wagtailsearch/queries/chooser/results.html @@ -11,7 +11,7 @@ <tbody> {% if queries %} {% for query in queries %} - <tr class="can-choose"> + <tr> <td class="title"> <h2><a class="choose-query" href="#{{ query.id }}" data-id="{{ query.id }}" data-querystring="{{ query.query_string }}">{{ query.query_string }}</a></h2> </td> diff --git a/wagtail/wagtailsnippets/locale/bg/LC_MESSAGES/django.mo b/wagtail/wagtailsnippets/locale/bg/LC_MESSAGES/django.mo index b712c2e88..a759b9953 100644 Binary files a/wagtail/wagtailsnippets/locale/bg/LC_MESSAGES/django.mo and b/wagtail/wagtailsnippets/locale/bg/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailsnippets/locale/bg/LC_MESSAGES/django.po b/wagtail/wagtailsnippets/locale/bg/LC_MESSAGES/django.po index ceb132915..0696859b9 100644 --- a/wagtail/wagtailsnippets/locale/bg/LC_MESSAGES/django.po +++ b/wagtail/wagtailsnippets/locale/bg/LC_MESSAGES/django.po @@ -1,25 +1,24 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: -# LyuboslavPetrov <petrov.lyuboslav@gmail.com>, 2014 +# Lyuboslav Petrov <petrov.lyuboslav@gmail.com>, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:55+0000\n" -"PO-Revision-Date: 2014-02-24 20:18+0000\n" -"Last-Translator: LyuboslavPetrov <petrov.lyuboslav@gmail.com>\n" -"Language-Team: Bulgarian (http://www.transifex.com/projects/p/wagtail/" -"language/bg/)\n" -"Language: bg\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Bulgarian (http://www.transifex.com/projects/p/wagtail/language/bg/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: bg\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: wagtail_hooks.py:24 templates/wagtailsnippets/snippets/index.html:3 +#: wagtail_hooks.py:25 templates/wagtailsnippets/snippets/index.html:3 msgid "Snippets" msgstr "Откъси от код" @@ -80,6 +79,7 @@ msgid "Editing" msgstr "Редактиране" #: templates/wagtailsnippets/snippets/list.html:8 +#: templates/wagtailsnippets/snippets/usage.html:16 msgid "Title" msgstr "Заглавие" @@ -101,28 +101,51 @@ msgstr "Добави %(snippet_type_name)s" #: templates/wagtailsnippets/snippets/type_index.html:23 #, python-format msgid "" -"No %(snippet_type_name_plural)s have been created. Why not <a href=" -"\"%(wagtailsnippets_create_url)s\">add one</a>?" -msgstr "" -"Няма създадени %(snippet_type_name_plural)s. Защо не <a href=" -"\"%(wagtailsnippets_create_url)s\">добавите един сега</a>?" +"No %(snippet_type_name_plural)s have been created. Why not <a " +"href=\"%(wagtailsnippets_create_url)s\">add one</a>?" +msgstr "Няма създадени %(snippet_type_name_plural)s. Защо не <a href=\"%(wagtailsnippets_create_url)s\">добавите един сега</a>?" -#: views/snippets.py:127 +#: templates/wagtailsnippets/snippets/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:26 +msgid "Edit this page" +msgstr "" + +#: views/snippets.py:129 msgid "{snippet_type} '{instance}' created." msgstr "{snippet_type} '{instance}' е създаден" -#: views/snippets.py:134 +#: views/snippets.py:136 msgid "The snippet could not be created due to errors." msgstr "Този код-откъс не беше създаден поради грешки." -#: views/snippets.py:168 +#: views/snippets.py:170 msgid "{snippet_type} '{instance}' updated." msgstr "{snippet_type} '{instance}' обновен." -#: views/snippets.py:175 +#: views/snippets.py:177 msgid "The snippet could not be saved due to errors." msgstr "Откъса от док не можеше да бъде запазен поради грешки." -#: views/snippets.py:204 +#: views/snippets.py:206 msgid "{snippet_type} '{instance}' deleted." msgstr "{snippet_type} '{instance}' изтрит." diff --git a/wagtail/wagtailsnippets/locale/ca/LC_MESSAGES/django.mo b/wagtail/wagtailsnippets/locale/ca/LC_MESSAGES/django.mo index c5294ac3f..15dec447c 100644 Binary files a/wagtail/wagtailsnippets/locale/ca/LC_MESSAGES/django.mo and b/wagtail/wagtailsnippets/locale/ca/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailsnippets/locale/ca/LC_MESSAGES/django.po b/wagtail/wagtailsnippets/locale/ca/LC_MESSAGES/django.po index 34c33f0b2..c9f7a423e 100644 --- a/wagtail/wagtailsnippets/locale/ca/LC_MESSAGES/django.po +++ b/wagtail/wagtailsnippets/locale/ca/LC_MESSAGES/django.po @@ -1,25 +1,24 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: -# Lloople <d.lloople@gmail.com>, 2014 +# David Llop <d.lloople@gmail.com>, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:55+0000\n" -"PO-Revision-Date: 2014-02-26 21:30+0000\n" -"Last-Translator: Lloople <d.lloople@gmail.com>\n" -"Language-Team: Catalan (http://www.transifex.com/projects/p/wagtail/language/" -"ca/)\n" -"Language: ca\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Catalan (http://www.transifex.com/projects/p/wagtail/language/ca/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ca\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: wagtail_hooks.py:24 templates/wagtailsnippets/snippets/index.html:3 +#: wagtail_hooks.py:25 templates/wagtailsnippets/snippets/index.html:3 msgid "Snippets" msgstr "Fragments" @@ -80,6 +79,7 @@ msgid "Editing" msgstr "Editant" #: templates/wagtailsnippets/snippets/list.html:8 +#: templates/wagtailsnippets/snippets/usage.html:16 msgid "Title" msgstr "Títol" @@ -101,28 +101,51 @@ msgstr "Afegeix %(snippet_type_name)s" #: templates/wagtailsnippets/snippets/type_index.html:23 #, python-format msgid "" -"No %(snippet_type_name_plural)s have been created. Why not <a href=" -"\"%(wagtailsnippets_create_url)s\">add one</a>?" -msgstr "" -"No s'ha creat cap %(snippet_type_name_plural)s. Per què no <a href=" -"\"%(wagtailsnippets_create_url)s\">afeixes un</a>?" +"No %(snippet_type_name_plural)s have been created. Why not <a " +"href=\"%(wagtailsnippets_create_url)s\">add one</a>?" +msgstr "No s'ha creat cap %(snippet_type_name_plural)s. Per què no <a href=\"%(wagtailsnippets_create_url)s\">afeixes un</a>?" -#: views/snippets.py:127 +#: templates/wagtailsnippets/snippets/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:26 +msgid "Edit this page" +msgstr "" + +#: views/snippets.py:129 msgid "{snippet_type} '{instance}' created." msgstr "{snippet_type} '{instance}' creat." -#: views/snippets.py:134 +#: views/snippets.py:136 msgid "The snippet could not be created due to errors." msgstr "El fragment no s'ha pogut crear degut a errors." -#: views/snippets.py:168 +#: views/snippets.py:170 msgid "{snippet_type} '{instance}' updated." msgstr "{snippet_type} '{instance}' actualitzat." -#: views/snippets.py:175 +#: views/snippets.py:177 msgid "The snippet could not be saved due to errors." msgstr "El fragment no s'ha pogut desar degut a errors." -#: views/snippets.py:204 +#: views/snippets.py:206 msgid "{snippet_type} '{instance}' deleted." msgstr "{snippet_type} '{instance}' esborrat." diff --git a/wagtail/wagtailsnippets/locale/de/LC_MESSAGES/django.mo b/wagtail/wagtailsnippets/locale/de/LC_MESSAGES/django.mo index 3c551da28..8e1c73d7c 100644 Binary files a/wagtail/wagtailsnippets/locale/de/LC_MESSAGES/django.mo and b/wagtail/wagtailsnippets/locale/de/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailsnippets/locale/de/LC_MESSAGES/django.po b/wagtail/wagtailsnippets/locale/de/LC_MESSAGES/django.po index 62a92e748..f1b1aeb98 100644 --- a/wagtail/wagtailsnippets/locale/de/LC_MESSAGES/django.po +++ b/wagtail/wagtailsnippets/locale/de/LC_MESSAGES/django.po @@ -1,26 +1,25 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: -# jspielmann <j@spielmannsolutions.com>, 2014 +# Johannes Spielmann <j@spielmannsolutions.com>, 2014 # karlsander <karlsander@gmail.com>, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:55+0000\n" -"PO-Revision-Date: 2014-02-25 17:59+0000\n" -"Last-Translator: jspielmann <j@spielmannsolutions.com>\n" -"Language-Team: German (http://www.transifex.com/projects/p/wagtail/language/" -"de/)\n" -"Language: de\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: German (http://www.transifex.com/projects/p/wagtail/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: wagtail_hooks.py:24 templates/wagtailsnippets/snippets/index.html:3 +#: wagtail_hooks.py:25 templates/wagtailsnippets/snippets/index.html:3 msgid "Snippets" msgstr "Snippets" @@ -81,6 +80,7 @@ msgid "Editing" msgstr "Bearbeiten" #: templates/wagtailsnippets/snippets/list.html:8 +#: templates/wagtailsnippets/snippets/usage.html:16 msgid "Title" msgstr "Titel" @@ -102,28 +102,51 @@ msgstr "%(snippet_type_name)s hinzufügen" #: templates/wagtailsnippets/snippets/type_index.html:23 #, python-format msgid "" -"No %(snippet_type_name_plural)s have been created. Why not <a href=" -"\"%(wagtailsnippets_create_url)s\">add one</a>?" -msgstr "" -"Sie haben noch keine %(snippet_type_name_plural)s erstellt. <a href=" -"\"%(wagtailsnippets_create_url)s\">Erstellen Sie doch jetzt eins!</a>" +"No %(snippet_type_name_plural)s have been created. Why not <a " +"href=\"%(wagtailsnippets_create_url)s\">add one</a>?" +msgstr "Sie haben noch keine %(snippet_type_name_plural)s erstellt. <a href=\"%(wagtailsnippets_create_url)s\">Erstellen Sie doch jetzt eins!</a>" -#: views/snippets.py:127 +#: templates/wagtailsnippets/snippets/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:26 +msgid "Edit this page" +msgstr "" + +#: views/snippets.py:129 msgid "{snippet_type} '{instance}' created." msgstr "{snippet_type} '{instance}' erstellt" -#: views/snippets.py:134 +#: views/snippets.py:136 msgid "The snippet could not be created due to errors." msgstr "Aufgrund von Fehlern konnte das Snippet nicht erstellt werden." -#: views/snippets.py:168 +#: views/snippets.py:170 msgid "{snippet_type} '{instance}' updated." msgstr "{snippet_type} '{instance}' geändert." -#: views/snippets.py:175 +#: views/snippets.py:177 msgid "The snippet could not be saved due to errors." msgstr "Aufgrund von Fehlern konnte das Snippet nicht gespeichert werden." -#: views/snippets.py:204 +#: views/snippets.py:206 msgid "{snippet_type} '{instance}' deleted." msgstr "{snippet_type} '{instance}' gelöscht." diff --git a/wagtail/wagtailsnippets/locale/el/LC_MESSAGES/django.mo b/wagtail/wagtailsnippets/locale/el/LC_MESSAGES/django.mo index 134a96d8e..a052bc0c3 100644 Binary files a/wagtail/wagtailsnippets/locale/el/LC_MESSAGES/django.mo and b/wagtail/wagtailsnippets/locale/el/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailsnippets/locale/el/LC_MESSAGES/django.po b/wagtail/wagtailsnippets/locale/el/LC_MESSAGES/django.po index 39a5302d2..c68845336 100644 --- a/wagtail/wagtailsnippets/locale/el/LC_MESSAGES/django.po +++ b/wagtail/wagtailsnippets/locale/el/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # serafeim <serafeim@torchbox.com>, 2014 # serafeim <serafeim@torchbox.com>, 2014 @@ -9,18 +9,17 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:55+0000\n" -"PO-Revision-Date: 2014-02-22 17:16+0000\n" -"Last-Translator: serafeim <serafeim@torchbox.com>\n" -"Language-Team: Greek (http://www.transifex.com/projects/p/wagtail/language/" -"el/)\n" -"Language: el\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Greek (http://www.transifex.com/projects/p/wagtail/language/el/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: el\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: wagtail_hooks.py:24 templates/wagtailsnippets/snippets/index.html:3 +#: wagtail_hooks.py:25 templates/wagtailsnippets/snippets/index.html:3 msgid "Snippets" msgstr "Snippets" @@ -81,6 +80,7 @@ msgid "Editing" msgstr "Διόρθωση" #: templates/wagtailsnippets/snippets/list.html:8 +#: templates/wagtailsnippets/snippets/usage.html:16 msgid "Title" msgstr "Τίτλος" @@ -102,28 +102,51 @@ msgstr "Προσθήκη %(snippet_type_name)s" #: templates/wagtailsnippets/snippets/type_index.html:23 #, python-format msgid "" -"No %(snippet_type_name_plural)s have been created. Why not <a href=" -"\"%(wagtailsnippets_create_url)s\">add one</a>?" -msgstr "" -"Δεν υπάρχουν %(snippet_type_name_plural)s. Θέλετε να <a href=" -"\"%(wagtailsnippets_create_url)s\">προσθέσετε μερικά</a>;" +"No %(snippet_type_name_plural)s have been created. Why not <a " +"href=\"%(wagtailsnippets_create_url)s\">add one</a>?" +msgstr "Δεν υπάρχουν %(snippet_type_name_plural)s. Θέλετε να <a href=\"%(wagtailsnippets_create_url)s\">προσθέσετε μερικά</a>;" -#: views/snippets.py:127 +#: templates/wagtailsnippets/snippets/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:26 +msgid "Edit this page" +msgstr "" + +#: views/snippets.py:129 msgid "{snippet_type} '{instance}' created." msgstr "Δημιουργήθηκε το '{instance}' τύπου {snippet_type}." -#: views/snippets.py:134 +#: views/snippets.py:136 msgid "The snippet could not be created due to errors." msgstr "Δεν ήταν δυνατή η δημιουργία του snippet." -#: views/snippets.py:168 +#: views/snippets.py:170 msgid "{snippet_type} '{instance}' updated." msgstr "Πραγματοποιήθηκε αλλαγή του '{instance}' τύπου {snippet_type}." -#: views/snippets.py:175 +#: views/snippets.py:177 msgid "The snippet could not be saved due to errors." msgstr "Δεν ήταν δυνατή η αποθήκευση του snippet." -#: views/snippets.py:204 +#: views/snippets.py:206 msgid "{snippet_type} '{instance}' deleted." msgstr "Το '{instance}' τύπου {snippet_type} διαγράφηκε." diff --git a/wagtail/wagtailsnippets/locale/en/LC_MESSAGES/django.mo b/wagtail/wagtailsnippets/locale/en/LC_MESSAGES/django.mo index 4b726f7d6..44e531ab0 100644 Binary files a/wagtail/wagtailsnippets/locale/en/LC_MESSAGES/django.mo and b/wagtail/wagtailsnippets/locale/en/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailsnippets/locale/en/LC_MESSAGES/django.po b/wagtail/wagtailsnippets/locale/en/LC_MESSAGES/django.po index e4048d3cb..cc93c2812 100644 --- a/wagtail/wagtailsnippets/locale/en/LC_MESSAGES/django.po +++ b/wagtail/wagtailsnippets/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:55+0000\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: wagtail_hooks.py:24 templates/wagtailsnippets/snippets/index.html:3 +#: wagtail_hooks.py:25 templates/wagtailsnippets/snippets/index.html:3 msgid "Snippets" msgstr "" @@ -78,6 +78,7 @@ msgid "Editing" msgstr "" #: templates/wagtailsnippets/snippets/list.html:8 +#: templates/wagtailsnippets/snippets/usage.html:16 msgid "Title" msgstr "" @@ -103,22 +104,47 @@ msgid "" "\"%(wagtailsnippets_create_url)s\">add one</a>?" msgstr "" -#: views/snippets.py:127 +#: templates/wagtailsnippets/snippets/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:26 +msgid "Edit this page" +msgstr "" + +#: views/snippets.py:129 msgid "{snippet_type} '{instance}' created." msgstr "" -#: views/snippets.py:134 +#: views/snippets.py:136 msgid "The snippet could not be created due to errors." msgstr "" -#: views/snippets.py:168 +#: views/snippets.py:170 msgid "{snippet_type} '{instance}' updated." msgstr "" -#: views/snippets.py:175 +#: views/snippets.py:177 msgid "The snippet could not be saved due to errors." msgstr "" -#: views/snippets.py:204 +#: views/snippets.py:206 msgid "{snippet_type} '{instance}' deleted." msgstr "" diff --git a/wagtail/wagtailsnippets/locale/es/LC_MESSAGES/django.mo b/wagtail/wagtailsnippets/locale/es/LC_MESSAGES/django.mo index cbcbfbedc..5f5980e94 100644 Binary files a/wagtail/wagtailsnippets/locale/es/LC_MESSAGES/django.mo and b/wagtail/wagtailsnippets/locale/es/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailsnippets/locale/es/LC_MESSAGES/django.po b/wagtail/wagtailsnippets/locale/es/LC_MESSAGES/django.po index 96a2fe344..baf1997b9 100644 --- a/wagtail/wagtailsnippets/locale/es/LC_MESSAGES/django.po +++ b/wagtail/wagtailsnippets/locale/es/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # fooflare <amos.oviedo@gmail.com>, 2014 # fooflare <amos.oviedo@gmail.com>, 2014 @@ -9,18 +9,17 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:55+0000\n" -"PO-Revision-Date: 2014-02-27 10:02+0000\n" -"Last-Translator: fooflare <amos.oviedo@gmail.com>\n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/wagtail/language/" -"es/)\n" -"Language: es\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Spanish (http://www.transifex.com/projects/p/wagtail/language/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: wagtail_hooks.py:24 templates/wagtailsnippets/snippets/index.html:3 +#: wagtail_hooks.py:25 templates/wagtailsnippets/snippets/index.html:3 msgid "Snippets" msgstr "Fragmentos" @@ -81,6 +80,7 @@ msgid "Editing" msgstr "Editando" #: templates/wagtailsnippets/snippets/list.html:8 +#: templates/wagtailsnippets/snippets/usage.html:16 msgid "Title" msgstr "Título" @@ -102,28 +102,51 @@ msgstr "Añadir %(snippet_type_name)s" #: templates/wagtailsnippets/snippets/type_index.html:23 #, python-format msgid "" -"No %(snippet_type_name_plural)s have been created. Why not <a href=" -"\"%(wagtailsnippets_create_url)s\">add one</a>?" -msgstr "" -"Ningún %(snippet_type_name_plural)s ha sido creado. ¿Por qué no <a href=" -"\"%(wagtailsnippets_create_url)s\">añadir uno</a>?" +"No %(snippet_type_name_plural)s have been created. Why not <a " +"href=\"%(wagtailsnippets_create_url)s\">add one</a>?" +msgstr "Ningún %(snippet_type_name_plural)s ha sido creado. ¿Por qué no <a href=\"%(wagtailsnippets_create_url)s\">añadir uno</a>?" -#: views/snippets.py:127 +#: templates/wagtailsnippets/snippets/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:26 +msgid "Edit this page" +msgstr "" + +#: views/snippets.py:129 msgid "{snippet_type} '{instance}' created." msgstr "{snippet_type} '{instance}' creado." -#: views/snippets.py:134 +#: views/snippets.py:136 msgid "The snippet could not be created due to errors." msgstr "El fragmento no pudo ser creada debido a errores." -#: views/snippets.py:168 +#: views/snippets.py:170 msgid "{snippet_type} '{instance}' updated." msgstr "{snippet_type} '{instance}' actualizado." -#: views/snippets.py:175 +#: views/snippets.py:177 msgid "The snippet could not be saved due to errors." msgstr "El fragmento no puedo ser guardado debido a errores." -#: views/snippets.py:204 +#: views/snippets.py:206 msgid "{snippet_type} '{instance}' deleted." msgstr "{snippet_type} '{instance}' eliminado." diff --git a/wagtail/wagtailsnippets/locale/eu/LC_MESSAGES/django.mo b/wagtail/wagtailsnippets/locale/eu/LC_MESSAGES/django.mo index 7a9b7b573..b3e5368fc 100644 Binary files a/wagtail/wagtailsnippets/locale/eu/LC_MESSAGES/django.mo and b/wagtail/wagtailsnippets/locale/eu/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailsnippets/locale/eu/LC_MESSAGES/django.po b/wagtail/wagtailsnippets/locale/eu/LC_MESSAGES/django.po index 1418e9ec4..edade1ac3 100644 --- a/wagtail/wagtailsnippets/locale/eu/LC_MESSAGES/django.po +++ b/wagtail/wagtailsnippets/locale/eu/LC_MESSAGES/django.po @@ -1,24 +1,23 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:55+0000\n" -"PO-Revision-Date: 2014-02-24 22:36+0000\n" -"Last-Translator: tomdyson <tom@torchbox.com>\n" -"Language-Team: Basque (http://www.transifex.com/projects/p/wagtail/language/" -"eu/)\n" -"Language: eu\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Basque (http://www.transifex.com/projects/p/wagtail/language/eu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: eu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: wagtail_hooks.py:24 templates/wagtailsnippets/snippets/index.html:3 +#: wagtail_hooks.py:25 templates/wagtailsnippets/snippets/index.html:3 msgid "Snippets" msgstr "" @@ -79,6 +78,7 @@ msgid "Editing" msgstr "" #: templates/wagtailsnippets/snippets/list.html:8 +#: templates/wagtailsnippets/snippets/usage.html:16 msgid "Title" msgstr "" @@ -100,26 +100,51 @@ msgstr "" #: templates/wagtailsnippets/snippets/type_index.html:23 #, python-format msgid "" -"No %(snippet_type_name_plural)s have been created. Why not <a href=" -"\"%(wagtailsnippets_create_url)s\">add one</a>?" +"No %(snippet_type_name_plural)s have been created. Why not <a " +"href=\"%(wagtailsnippets_create_url)s\">add one</a>?" msgstr "" -#: views/snippets.py:127 +#: templates/wagtailsnippets/snippets/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:26 +msgid "Edit this page" +msgstr "" + +#: views/snippets.py:129 msgid "{snippet_type} '{instance}' created." msgstr "" -#: views/snippets.py:134 +#: views/snippets.py:136 msgid "The snippet could not be created due to errors." msgstr "" -#: views/snippets.py:168 +#: views/snippets.py:170 msgid "{snippet_type} '{instance}' updated." msgstr "" -#: views/snippets.py:175 +#: views/snippets.py:177 msgid "The snippet could not be saved due to errors." msgstr "" -#: views/snippets.py:204 +#: views/snippets.py:206 msgid "{snippet_type} '{instance}' deleted." msgstr "" diff --git a/wagtail/wagtailsnippets/locale/fr/LC_MESSAGES/django.mo b/wagtail/wagtailsnippets/locale/fr/LC_MESSAGES/django.mo index deefa7a40..4acab4cbe 100644 Binary files a/wagtail/wagtailsnippets/locale/fr/LC_MESSAGES/django.mo and b/wagtail/wagtailsnippets/locale/fr/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailsnippets/locale/fr/LC_MESSAGES/django.po b/wagtail/wagtailsnippets/locale/fr/LC_MESSAGES/django.po index d65e22a15..33517b893 100644 --- a/wagtail/wagtailsnippets/locale/fr/LC_MESSAGES/django.po +++ b/wagtail/wagtailsnippets/locale/fr/LC_MESSAGES/django.po @@ -1,25 +1,24 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # nahuel, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:55+0000\n" -"PO-Revision-Date: 2014-03-18 21:51+0000\n" -"Last-Translator: nahuel\n" -"Language-Team: French (http://www.transifex.com/projects/p/wagtail/language/" -"fr/)\n" -"Language: fr\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: French (http://www.transifex.com/projects/p/wagtail/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: wagtail_hooks.py:24 templates/wagtailsnippets/snippets/index.html:3 +#: wagtail_hooks.py:25 templates/wagtailsnippets/snippets/index.html:3 msgid "Snippets" msgstr "" @@ -80,6 +79,7 @@ msgid "Editing" msgstr "Rédaction" #: templates/wagtailsnippets/snippets/list.html:8 +#: templates/wagtailsnippets/snippets/usage.html:16 msgid "Title" msgstr "Titre" @@ -101,28 +101,51 @@ msgstr "" #: templates/wagtailsnippets/snippets/type_index.html:23 #, python-format msgid "" -"No %(snippet_type_name_plural)s have been created. Why not <a href=" -"\"%(wagtailsnippets_create_url)s\">add one</a>?" -msgstr "" -"Aucun %(snippet_type_name_plural)s n'a été créé. Pourquoi ne pas en <a href=" -"\"%(wagtailsnippets_create_url)s\">ajouter un</a>?" +"No %(snippet_type_name_plural)s have been created. Why not <a " +"href=\"%(wagtailsnippets_create_url)s\">add one</a>?" +msgstr "Aucun %(snippet_type_name_plural)s n'a été créé. Pourquoi ne pas en <a href=\"%(wagtailsnippets_create_url)s\">ajouter un</a>?" -#: views/snippets.py:127 +#: templates/wagtailsnippets/snippets/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:26 +msgid "Edit this page" +msgstr "" + +#: views/snippets.py:129 msgid "{snippet_type} '{instance}' created." msgstr "" -#: views/snippets.py:134 +#: views/snippets.py:136 msgid "The snippet could not be created due to errors." msgstr "" -#: views/snippets.py:168 +#: views/snippets.py:170 msgid "{snippet_type} '{instance}' updated." msgstr "" -#: views/snippets.py:175 +#: views/snippets.py:177 msgid "The snippet could not be saved due to errors." msgstr "" -#: views/snippets.py:204 +#: views/snippets.py:206 msgid "{snippet_type} '{instance}' deleted." msgstr "{snippet_type} '{instance}' supprimé." diff --git a/wagtail/wagtailsnippets/locale/gl/LC_MESSAGES/django.mo b/wagtail/wagtailsnippets/locale/gl/LC_MESSAGES/django.mo index 0d8349be6..024a5263d 100644 Binary files a/wagtail/wagtailsnippets/locale/gl/LC_MESSAGES/django.mo and b/wagtail/wagtailsnippets/locale/gl/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailsnippets/locale/gl/LC_MESSAGES/django.po b/wagtail/wagtailsnippets/locale/gl/LC_MESSAGES/django.po index 62e27053a..c3cdd7047 100644 --- a/wagtail/wagtailsnippets/locale/gl/LC_MESSAGES/django.po +++ b/wagtail/wagtailsnippets/locale/gl/LC_MESSAGES/django.po @@ -1,25 +1,24 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # fooflare <amos.oviedo@gmail.com>, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:55+0000\n" -"PO-Revision-Date: 2014-03-23 10:33+0000\n" -"Last-Translator: fooflare <amos.oviedo@gmail.com>\n" -"Language-Team: Galician (http://www.transifex.com/projects/p/wagtail/" -"language/gl/)\n" -"Language: gl\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Galician (http://www.transifex.com/projects/p/wagtail/language/gl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: gl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: wagtail_hooks.py:24 templates/wagtailsnippets/snippets/index.html:3 +#: wagtail_hooks.py:25 templates/wagtailsnippets/snippets/index.html:3 msgid "Snippets" msgstr "Fragmentos" @@ -80,6 +79,7 @@ msgid "Editing" msgstr "Editando" #: templates/wagtailsnippets/snippets/list.html:8 +#: templates/wagtailsnippets/snippets/usage.html:16 msgid "Title" msgstr "Título" @@ -101,28 +101,51 @@ msgstr "Engadir %(snippet_type_name)s" #: templates/wagtailsnippets/snippets/type_index.html:23 #, python-format msgid "" -"No %(snippet_type_name_plural)s have been created. Why not <a href=" -"\"%(wagtailsnippets_create_url)s\">add one</a>?" -msgstr "" -"Ningún %(snippet_type_name_plural)s foi creado. ¿Por qué non <a href=" -"\"%(wagtailsnippets_create_url)s\">engadir un</a>?" +"No %(snippet_type_name_plural)s have been created. Why not <a " +"href=\"%(wagtailsnippets_create_url)s\">add one</a>?" +msgstr "Ningún %(snippet_type_name_plural)s foi creado. ¿Por qué non <a href=\"%(wagtailsnippets_create_url)s\">engadir un</a>?" -#: views/snippets.py:127 +#: templates/wagtailsnippets/snippets/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:26 +msgid "Edit this page" +msgstr "" + +#: views/snippets.py:129 msgid "{snippet_type} '{instance}' created." msgstr "{snippet_type} '{instance}' creado." -#: views/snippets.py:134 +#: views/snippets.py:136 msgid "The snippet could not be created due to errors." msgstr "O fragmento non puido ser creado debido a errores." -#: views/snippets.py:168 +#: views/snippets.py:170 msgid "{snippet_type} '{instance}' updated." msgstr "{snippet_type} '{instance}' actualizado." -#: views/snippets.py:175 +#: views/snippets.py:177 msgid "The snippet could not be saved due to errors." msgstr "O fragmento non puido ser gardado debido a erros." -#: views/snippets.py:204 +#: views/snippets.py:206 msgid "{snippet_type} '{instance}' deleted." msgstr "{snippet_type} '{instance}' eliminado." diff --git a/wagtail/wagtailsnippets/locale/mn/LC_MESSAGES/django.mo b/wagtail/wagtailsnippets/locale/mn/LC_MESSAGES/django.mo index 6991aad51..086afbd48 100644 Binary files a/wagtail/wagtailsnippets/locale/mn/LC_MESSAGES/django.mo and b/wagtail/wagtailsnippets/locale/mn/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailsnippets/locale/mn/LC_MESSAGES/django.po b/wagtail/wagtailsnippets/locale/mn/LC_MESSAGES/django.po index 0f241162f..28f2e61c2 100644 --- a/wagtail/wagtailsnippets/locale/mn/LC_MESSAGES/django.po +++ b/wagtail/wagtailsnippets/locale/mn/LC_MESSAGES/django.po @@ -1,24 +1,23 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:55+0000\n" -"PO-Revision-Date: 2014-02-25 05:54+0000\n" -"Last-Translator: serafeim <serafeim@torchbox.com>\n" -"Language-Team: Mongolian (http://www.transifex.com/projects/p/wagtail/" -"language/mn/)\n" -"Language: mn\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Mongolian (http://www.transifex.com/projects/p/wagtail/language/mn/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: mn\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: wagtail_hooks.py:24 templates/wagtailsnippets/snippets/index.html:3 +#: wagtail_hooks.py:25 templates/wagtailsnippets/snippets/index.html:3 msgid "Snippets" msgstr "" @@ -79,6 +78,7 @@ msgid "Editing" msgstr "" #: templates/wagtailsnippets/snippets/list.html:8 +#: templates/wagtailsnippets/snippets/usage.html:16 msgid "Title" msgstr "" @@ -100,26 +100,51 @@ msgstr "" #: templates/wagtailsnippets/snippets/type_index.html:23 #, python-format msgid "" -"No %(snippet_type_name_plural)s have been created. Why not <a href=" -"\"%(wagtailsnippets_create_url)s\">add one</a>?" +"No %(snippet_type_name_plural)s have been created. Why not <a " +"href=\"%(wagtailsnippets_create_url)s\">add one</a>?" msgstr "" -#: views/snippets.py:127 +#: templates/wagtailsnippets/snippets/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:26 +msgid "Edit this page" +msgstr "" + +#: views/snippets.py:129 msgid "{snippet_type} '{instance}' created." msgstr "" -#: views/snippets.py:134 +#: views/snippets.py:136 msgid "The snippet could not be created due to errors." msgstr "" -#: views/snippets.py:168 +#: views/snippets.py:170 msgid "{snippet_type} '{instance}' updated." msgstr "" -#: views/snippets.py:175 +#: views/snippets.py:177 msgid "The snippet could not be saved due to errors." msgstr "" -#: views/snippets.py:204 +#: views/snippets.py:206 msgid "{snippet_type} '{instance}' deleted." msgstr "" diff --git a/wagtail/wagtailsnippets/locale/pl/LC_MESSAGES/django.mo b/wagtail/wagtailsnippets/locale/pl/LC_MESSAGES/django.mo index f273491e7..cc356807a 100644 Binary files a/wagtail/wagtailsnippets/locale/pl/LC_MESSAGES/django.mo and b/wagtail/wagtailsnippets/locale/pl/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailsnippets/locale/pl/LC_MESSAGES/django.po b/wagtail/wagtailsnippets/locale/pl/LC_MESSAGES/django.po index 12ca36c94..8958e7e1e 100644 --- a/wagtail/wagtailsnippets/locale/pl/LC_MESSAGES/django.po +++ b/wagtail/wagtailsnippets/locale/pl/LC_MESSAGES/django.po @@ -1,25 +1,23 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:55+0000\n" -"PO-Revision-Date: 2014-02-23 10:23+0000\n" -"Last-Translator: utek <mail@utek.pl>\n" -"Language-Team: Polish (http://www.transifex.com/projects/p/wagtail/language/" -"pl/)\n" -"Language: pl\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Polish (http://www.transifex.com/projects/p/wagtail/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2);\n" +"Language: pl\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: wagtail_hooks.py:24 templates/wagtailsnippets/snippets/index.html:3 +#: wagtail_hooks.py:25 templates/wagtailsnippets/snippets/index.html:3 msgid "Snippets" msgstr "Snippety" @@ -80,6 +78,7 @@ msgid "Editing" msgstr "Edycja" #: templates/wagtailsnippets/snippets/list.html:8 +#: templates/wagtailsnippets/snippets/usage.html:16 msgid "Title" msgstr "Tytuł" @@ -101,28 +100,51 @@ msgstr "Dodaj %(snippet_type_name)s" #: templates/wagtailsnippets/snippets/type_index.html:23 #, python-format msgid "" -"No %(snippet_type_name_plural)s have been created. Why not <a href=" -"\"%(wagtailsnippets_create_url)s\">add one</a>?" -msgstr "" -"Żaden%(snippet_type_name_plural)s nie został stworzony. Czemu nie <a href=" -"\"%(wagtailsnippets_create_url)s\">dodać jednego</a>?" +"No %(snippet_type_name_plural)s have been created. Why not <a " +"href=\"%(wagtailsnippets_create_url)s\">add one</a>?" +msgstr "Żaden%(snippet_type_name_plural)s nie został stworzony. Czemu nie <a href=\"%(wagtailsnippets_create_url)s\">dodać jednego</a>?" -#: views/snippets.py:127 +#: templates/wagtailsnippets/snippets/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:26 +msgid "Edit this page" +msgstr "" + +#: views/snippets.py:129 msgid "{snippet_type} '{instance}' created." msgstr "Stworzono {snippet_type} '{instance}'." -#: views/snippets.py:134 +#: views/snippets.py:136 msgid "The snippet could not be created due to errors." msgstr "Snippet nie mógł zostać stworzony z powodu błędów." -#: views/snippets.py:168 +#: views/snippets.py:170 msgid "{snippet_type} '{instance}' updated." msgstr "Uaktualniono {snippet_type} '{instance}'." -#: views/snippets.py:175 +#: views/snippets.py:177 msgid "The snippet could not be saved due to errors." msgstr "Snippet nie mógł zostać zapisany z powodu błędów." -#: views/snippets.py:204 +#: views/snippets.py:206 msgid "{snippet_type} '{instance}' deleted." msgstr "Usunięto {snippet_type} '{instance}'." diff --git a/wagtail/wagtailsnippets/locale/ro/LC_MESSAGES/django.mo b/wagtail/wagtailsnippets/locale/ro/LC_MESSAGES/django.mo index ecd58c392..696d6b2db 100644 Binary files a/wagtail/wagtailsnippets/locale/ro/LC_MESSAGES/django.mo and b/wagtail/wagtailsnippets/locale/ro/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailsnippets/locale/ro/LC_MESSAGES/django.po b/wagtail/wagtailsnippets/locale/ro/LC_MESSAGES/django.po index c26f317ba..b80fe4bd4 100644 --- a/wagtail/wagtailsnippets/locale/ro/LC_MESSAGES/django.po +++ b/wagtail/wagtailsnippets/locale/ro/LC_MESSAGES/django.po @@ -1,27 +1,25 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: -# zerolab, 2014 -# zerolab, 2014 +# Dan Braghis, 2014 +# Dan Braghis, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:55+0000\n" -"PO-Revision-Date: 2014-02-23 14:19+0000\n" -"Last-Translator: zerolab\n" -"Language-Team: Romanian (http://www.transifex.com/projects/p/wagtail/" -"language/ro/)\n" -"Language: ro\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Romanian (http://www.transifex.com/projects/p/wagtail/language/ro/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?" -"2:1));\n" +"Language: ro\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" -#: wagtail_hooks.py:24 templates/wagtailsnippets/snippets/index.html:3 +#: wagtail_hooks.py:25 templates/wagtailsnippets/snippets/index.html:3 msgid "Snippets" msgstr "Fragmente" @@ -82,6 +80,7 @@ msgid "Editing" msgstr "Editare" #: templates/wagtailsnippets/snippets/list.html:8 +#: templates/wagtailsnippets/snippets/usage.html:16 msgid "Title" msgstr "Titlu" @@ -103,28 +102,51 @@ msgstr "Adaugă %(snippet_type_name)s" #: templates/wagtailsnippets/snippets/type_index.html:23 #, python-format msgid "" -"No %(snippet_type_name_plural)s have been created. Why not <a href=" -"\"%(wagtailsnippets_create_url)s\">add one</a>?" -msgstr "" -"Nu au fost create %(snippet_type_name_plural)s. De să nu <a href=" -"\"%(wagtailsnippets_create_url)s\">adăugați unul</a>?" +"No %(snippet_type_name_plural)s have been created. Why not <a " +"href=\"%(wagtailsnippets_create_url)s\">add one</a>?" +msgstr "Nu au fost create %(snippet_type_name_plural)s. De să nu <a href=\"%(wagtailsnippets_create_url)s\">adăugați unul</a>?" -#: views/snippets.py:127 +#: templates/wagtailsnippets/snippets/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:26 +msgid "Edit this page" +msgstr "" + +#: views/snippets.py:129 msgid "{snippet_type} '{instance}' created." msgstr "{snippet_type} '{instance}' a fost creat." -#: views/snippets.py:134 +#: views/snippets.py:136 msgid "The snippet could not be created due to errors." msgstr "Fragmentul nu a fost creat din cauza erorilor." -#: views/snippets.py:168 +#: views/snippets.py:170 msgid "{snippet_type} '{instance}' updated." msgstr "{snippet_type} '{instance}' a fost actualizat." -#: views/snippets.py:175 +#: views/snippets.py:177 msgid "The snippet could not be saved due to errors." msgstr "Fragmentul nu a fost salvat din cauza erorilor." -#: views/snippets.py:204 +#: views/snippets.py:206 msgid "{snippet_type} '{instance}' deleted." msgstr "{snippet_type} '{instance}' a fost șters." diff --git a/wagtail/wagtailsnippets/locale/zh/LC_MESSAGES/django.mo b/wagtail/wagtailsnippets/locale/zh/LC_MESSAGES/django.mo index fc3076b03..d417847cb 100644 Binary files a/wagtail/wagtailsnippets/locale/zh/LC_MESSAGES/django.mo and b/wagtail/wagtailsnippets/locale/zh/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailsnippets/locale/zh/LC_MESSAGES/django.po b/wagtail/wagtailsnippets/locale/zh/LC_MESSAGES/django.po index 16195bb38..790a8a54b 100644 --- a/wagtail/wagtailsnippets/locale/zh/LC_MESSAGES/django.po +++ b/wagtail/wagtailsnippets/locale/zh/LC_MESSAGES/django.po @@ -1,24 +1,23 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:55+0000\n" -"PO-Revision-Date: 2014-02-28 16:07+0000\n" -"Last-Translator: serafeim <serafeim@torchbox.com>\n" -"Language-Team: Chinese (http://www.transifex.com/projects/p/wagtail/language/" -"zh/)\n" -"Language: zh\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley <karl@torchbox.com>\n" +"Language-Team: Chinese (http://www.transifex.com/projects/p/wagtail/language/zh/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: zh\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: wagtail_hooks.py:24 templates/wagtailsnippets/snippets/index.html:3 +#: wagtail_hooks.py:25 templates/wagtailsnippets/snippets/index.html:3 msgid "Snippets" msgstr "片段" @@ -79,6 +78,7 @@ msgid "Editing" msgstr "编辑" #: templates/wagtailsnippets/snippets/list.html:8 +#: templates/wagtailsnippets/snippets/usage.html:16 msgid "Title" msgstr "标题" @@ -100,28 +100,51 @@ msgstr "添加%(snippet_type_name)s" #: templates/wagtailsnippets/snippets/type_index.html:23 #, python-format msgid "" -"No %(snippet_type_name_plural)s have been created. Why not <a href=" -"\"%(wagtailsnippets_create_url)s\">add one</a>?" -msgstr "" -"没有任何%(snippet_type_name_plural)s片段。为什么不<a href=" -"\"%(wagtailsnippets_create_url)s\">创建一个</a>?" +"No %(snippet_type_name_plural)s have been created. Why not <a " +"href=\"%(wagtailsnippets_create_url)s\">add one</a>?" +msgstr "没有任何%(snippet_type_name_plural)s片段。为什么不<a href=\"%(wagtailsnippets_create_url)s\">创建一个</a>?" -#: views/snippets.py:127 +#: templates/wagtailsnippets/snippets/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:26 +msgid "Edit this page" +msgstr "" + +#: views/snippets.py:129 msgid "{snippet_type} '{instance}' created." msgstr "已创建{snippet_type} '{instance}'" -#: views/snippets.py:134 +#: views/snippets.py:136 msgid "The snippet could not be created due to errors." msgstr "多个错误导致这个片段无法创建。" -#: views/snippets.py:168 +#: views/snippets.py:170 msgid "{snippet_type} '{instance}' updated." msgstr "已经更新{snippet_type} '{instance}'。" -#: views/snippets.py:175 +#: views/snippets.py:177 msgid "The snippet could not be saved due to errors." msgstr "多个错误导致这个片段无法保存" -#: views/snippets.py:204 +#: views/snippets.py:206 msgid "{snippet_type} '{instance}' deleted." msgstr "已删除{snippet_type} '{instance}'" diff --git a/wagtail/wagtailsnippets/locale/zh_TW/LC_MESSAGES/django.mo b/wagtail/wagtailsnippets/locale/zh_TW/LC_MESSAGES/django.mo index d3f5578db..ca8e15e75 100644 Binary files a/wagtail/wagtailsnippets/locale/zh_TW/LC_MESSAGES/django.mo and b/wagtail/wagtailsnippets/locale/zh_TW/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailsnippets/locale/zh_TW/LC_MESSAGES/django.po b/wagtail/wagtailsnippets/locale/zh_TW/LC_MESSAGES/django.po index 7c4182171..2dd9d1c95 100644 --- a/wagtail/wagtailsnippets/locale/zh_TW/LC_MESSAGES/django.po +++ b/wagtail/wagtailsnippets/locale/zh_TW/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:55+0000\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" "PO-Revision-Date: 2014-02-28 16:07+0000\n" "Last-Translator: wdv4758h <wdv4758h@gmail.com>\n" "Language-Team: \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: wagtail_hooks.py:24 templates/wagtailsnippets/snippets/index.html:3 +#: wagtail_hooks.py:25 templates/wagtailsnippets/snippets/index.html:3 msgid "Snippets" msgstr "片段" @@ -78,6 +78,7 @@ msgid "Editing" msgstr "編輯" #: templates/wagtailsnippets/snippets/list.html:8 +#: templates/wagtailsnippets/snippets/usage.html:16 msgid "Title" msgstr "標題" @@ -105,22 +106,47 @@ msgstr "" "沒有任何 %(snippet_type_name_plural)s 片段。為什麼不<a href=" "\"%(wagtailsnippets_create_url)s\">建立一個</a>?" -#: views/snippets.py:127 +#: templates/wagtailsnippets/snippets/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:26 +msgid "Edit this page" +msgstr "" + +#: views/snippets.py:129 msgid "{snippet_type} '{instance}' created." msgstr "已建立 {snippet_type} '{instance}'" -#: views/snippets.py:134 +#: views/snippets.py:136 msgid "The snippet could not be created due to errors." msgstr "片段因有錯誤而無法建立。" -#: views/snippets.py:168 +#: views/snippets.py:170 msgid "{snippet_type} '{instance}' updated." msgstr "已經更新 {snippet_type} '{instance}'。" -#: views/snippets.py:175 +#: views/snippets.py:177 msgid "The snippet could not be saved due to errors." msgstr "片段因有錯誤而無法儲存。" -#: views/snippets.py:204 +#: views/snippets.py:206 msgid "{snippet_type} '{instance}' deleted." msgstr "已刪除 {snippet_type} '{instance}'" diff --git a/wagtail/wagtailsnippets/models.py b/wagtail/wagtailsnippets/models.py index 8af626655..3f1b9cad9 100644 --- a/wagtail/wagtailsnippets/models.py +++ b/wagtail/wagtailsnippets/models.py @@ -1,4 +1,7 @@ from django.contrib.contenttypes.models import ContentType +from django.core.urlresolvers import reverse + +from wagtail.wagtailadmin.utils import get_object_usage SNIPPET_MODELS = [] @@ -18,5 +21,15 @@ def get_snippet_content_types(): def register_snippet(model): if model not in SNIPPET_MODELS: + model.get_usage = get_object_usage + model.usage_url = get_snippet_usage_url SNIPPET_MODELS.append(model) SNIPPET_MODELS.sort(key=lambda x: x._meta.verbose_name) + + +def get_snippet_usage_url(self): + content_type = ContentType.objects.get_for_model(self) + return reverse('wagtailsnippets_usage', + args=(content_type.app_label, + content_type.model, + self.id,)) diff --git a/wagtail/wagtailsnippets/templates/wagtailsnippets/snippets/edit.html b/wagtail/wagtailsnippets/templates/wagtailsnippets/snippets/edit.html index 95d3d3dc5..6fa7b258d 100644 --- a/wagtail/wagtailsnippets/templates/wagtailsnippets/snippets/edit.html +++ b/wagtail/wagtailsnippets/templates/wagtailsnippets/snippets/edit.html @@ -4,12 +4,12 @@ {% block bodyclass %}menu-snippets{% endblock %} {% block content %} {% trans "Editing" as editing_str %} - {% include "wagtailadmin/shared/header.html" with title=editing_str subtitle=instance icon="snippet" %} + {% include "wagtailadmin/shared/header.html" with title=editing_str subtitle=instance icon="snippet" usage_object=instance %} <form action="{% url 'wagtailsnippets_edit' content_type.app_label content_type.model instance.id %}" method="POST"> {% csrf_token %} {{ edit_handler.render_form_content }} - + <footer> <ul> <li class="actions"> diff --git a/wagtail/wagtailsnippets/templates/wagtailsnippets/snippets/usage.html b/wagtail/wagtailsnippets/templates/wagtailsnippets/snippets/usage.html new file mode 100644 index 000000000..422b95c33 --- /dev/null +++ b/wagtail/wagtailsnippets/templates/wagtailsnippets/snippets/usage.html @@ -0,0 +1,49 @@ +{% extends "wagtailadmin/base.html" %} +{% load i18n %} +{% block titletag %}{% blocktrans with title=instance %}Usage of {{ title }}{% endblocktrans %}{% endblock %} +{% block content %} + {% trans "Usage of" as usage_str %} + {% include "wagtailadmin/shared/header.html" with title=usage_str subtitle=instance %} + + <div class="nice-padding"> + <table class="listing"> + <col /> + <col width="30%"/> + <col width="15%"/> + <col width="15%"/> + <thead> + <tr> + <th class="title">{% trans "Title" %}</th> + <th>{% trans "Parent" %}</th> + <th>{% trans "Type" %}</th> + <th>{% trans "Status" %}</th> + </tr> + </thead> + <tbody> + {% for page in used_by %} + <tr> + <td class="title" valign="top"> + <h2><a href="{% url 'wagtailadmin_pages_edit' page.id %}" title="{% trans 'Edit this page' %}">{{ page.title }}</a></h2> + </td> + <td> + {% if page.get_parent %} + <a href="{% url 'wagtailadmin_explore' page.get_parent.id %}">{{ page.get_parent.title }}</a> + {% endif %} + </td> + <td> + {{ page.content_type.model_class.get_verbose_name }} + </td> + <td> + {% if page.live %} + <a href="{{ page.url }}" target="_blank" class="status-tag {% if page.status_string != "draft" %}primary{% endif %}">{{ page.status_string }}</a> + {% else %} + <span class="status-tag {% if page.status_string != "draft" %}primary{% endif %}">{{ page.status_string }}</span> + {% endif %} + </td> + </tr> + {% endfor %} + </tbody> + </table> + </div> + {% include "wagtailadmin/shared/pagination_nav.html" with items=used_by linkurl="-"%} +{% endblock %} diff --git a/wagtail/wagtailsnippets/tests.py b/wagtail/wagtailsnippets/tests.py index 61bf9baaf..1b3431730 100644 --- a/wagtail/wagtailsnippets/tests.py +++ b/wagtail/wagtailsnippets/tests.py @@ -2,6 +2,7 @@ from django.test import TestCase from django.core.urlresolvers import reverse from wagtail.tests.utils import WagtailTestUtils +from django.test.utils import override_settings from wagtail.tests.models import Advert, AlphaSnippet, ZuluSnippet from wagtail.wagtailsnippets.models import register_snippet, SNIPPET_MODELS @@ -9,6 +10,7 @@ from wagtail.wagtailsnippets.views.snippets import ( get_snippet_edit_handler ) from wagtail.wagtailsnippets.edit_handlers import SnippetChooserPanel +from wagtail.wagtailcore.models import Page class TestSnippetIndexView(TestCase, WagtailTestUtils): @@ -185,3 +187,21 @@ class TestSnippetOrdering(TestCase): # may get registered elsewhere during test self.assertLess(SNIPPET_MODELS.index(AlphaSnippet), SNIPPET_MODELS.index(ZuluSnippet)) + + +class TestUsageCount(TestCase): + fixtures = ['wagtail/tests/fixtures/test.json'] + + @override_settings(WAGTAIL_USAGE_COUNT_ENABLED=True) + def test_snippet_usage_count(self): + advert = Advert.objects.get(id=1) + self.assertEqual(advert.get_usage().count(), 1) + + +class TestUsedBy(TestCase): + fixtures = ['wagtail/tests/fixtures/test.json'] + + @override_settings(WAGTAIL_USAGE_COUNT_ENABLED=True) + def test_snippet_used_by(self): + advert = Advert.objects.get(id=1) + self.assertEqual(type(advert.get_usage()[0]), Page) diff --git a/wagtail/wagtailsnippets/urls.py b/wagtail/wagtailsnippets/urls.py index eb7dc0112..b97950228 100644 --- a/wagtail/wagtailsnippets/urls.py +++ b/wagtail/wagtailsnippets/urls.py @@ -13,4 +13,5 @@ urlpatterns = [ url(r'^(\w+)/(\w+)/new/$', snippets.create, name='wagtailsnippets_create'), url(r'^(\w+)/(\w+)/(\d+)/$', snippets.edit, name='wagtailsnippets_edit'), url(r'^(\w+)/(\w+)/(\d+)/delete/$', snippets.delete, name='wagtailsnippets_delete'), + url(r'^(\w+)/(\w+)/(\d+)/usage/$', snippets.usage, name='wagtailsnippets_usage'), ] diff --git a/wagtail/wagtailsnippets/views/snippets.py b/wagtail/wagtailsnippets/views/snippets.py index ed0e310cb..4e146b6fa 100644 --- a/wagtail/wagtailsnippets/views/snippets.py +++ b/wagtail/wagtailsnippets/views/snippets.py @@ -7,6 +7,8 @@ from django.contrib import messages from django.contrib.auth.decorators import permission_required from django.core.exceptions import PermissionDenied from django.utils.translation import ugettext as _ +from django.core.urlresolvers import reverse +from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from wagtail.wagtailadmin.edit_handlers import ObjectList, extract_panel_definitions_from_model_class @@ -182,7 +184,7 @@ def edit(request, content_type_app_name, content_type_model_name, id): 'content_type': content_type, 'snippet_type_name': snippet_type_name, 'instance': instance, - 'edit_handler': edit_handler, + 'edit_handler': edit_handler }) @@ -213,3 +215,26 @@ def delete(request, content_type_app_name, content_type_model_name, id): 'snippet_type_name': snippet_type_name, 'instance': instance, }) + + +@permission_required('wagtailadmin.access_admin') +def usage(request, content_type_app_name, content_type_model_name, id): + content_type = get_content_type_from_url_params(content_type_app_name, content_type_model_name) + model = content_type.model_class() + instance = get_object_or_404(model, id=id) + + # Pagination + p = request.GET.get('p', 1) + paginator = Paginator(instance.get_usage(), 20) + + try: + used_by = paginator.page(p) + except PageNotAnInteger: + used_by = paginator.page(1) + except EmptyPage: + used_by = paginator.page(paginator.num_pages) + + return render(request, "wagtailsnippets/snippets/usage.html", { + 'instance': instance, + 'used_by': used_by + }) diff --git a/wagtail/wagtailusers/locale/bg/LC_MESSAGES/django.mo b/wagtail/wagtailusers/locale/bg/LC_MESSAGES/django.mo index 695b225c9..085a028ce 100644 Binary files a/wagtail/wagtailusers/locale/bg/LC_MESSAGES/django.mo and b/wagtail/wagtailusers/locale/bg/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailusers/locale/bg/LC_MESSAGES/django.po b/wagtail/wagtailusers/locale/bg/LC_MESSAGES/django.po index ed8de946f..0a3be5d92 100644 --- a/wagtail/wagtailusers/locale/bg/LC_MESSAGES/django.po +++ b/wagtail/wagtailusers/locale/bg/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:52+0000\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" "PO-Revision-Date: 2014-03-14 21:12+0000\n" "Last-Translator: serafeim <serafeim@torchbox.com>\n" "Language-Team: Bulgarian (http://www.transifex.com/projects/p/wagtail/" @@ -95,7 +95,7 @@ msgstr "" msgid "Receive notification when your page edit is rejected" msgstr "" -#: wagtail_hooks.py:21 templates/wagtailusers/index.html:4 +#: wagtail_hooks.py:22 templates/wagtailusers/index.html:4 #: templates/wagtailusers/index.html:17 msgid "Users" msgstr "Потребители" diff --git a/wagtail/wagtailusers/locale/ca/LC_MESSAGES/django.mo b/wagtail/wagtailusers/locale/ca/LC_MESSAGES/django.mo index dda59cd0b..1e398be77 100644 Binary files a/wagtail/wagtailusers/locale/ca/LC_MESSAGES/django.mo and b/wagtail/wagtailusers/locale/ca/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailusers/locale/ca/LC_MESSAGES/django.po b/wagtail/wagtailusers/locale/ca/LC_MESSAGES/django.po index 94db0ca2e..718365e70 100644 --- a/wagtail/wagtailusers/locale/ca/LC_MESSAGES/django.po +++ b/wagtail/wagtailusers/locale/ca/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:52+0000\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" "PO-Revision-Date: 2014-03-14 21:56+0000\n" "Last-Translator: Lloople <d.lloople@gmail.com>\n" "Language-Team: Catalan (http://www.transifex.com/projects/p/wagtail/language/" @@ -92,7 +92,7 @@ msgstr "" msgid "Receive notification when your page edit is rejected" msgstr "" -#: wagtail_hooks.py:21 templates/wagtailusers/index.html:4 +#: wagtail_hooks.py:22 templates/wagtailusers/index.html:4 #: templates/wagtailusers/index.html:17 msgid "Users" msgstr "Usuaris" diff --git a/wagtail/wagtailusers/locale/de/LC_MESSAGES/django.mo b/wagtail/wagtailusers/locale/de/LC_MESSAGES/django.mo index 8dad58a07..725ce6033 100644 Binary files a/wagtail/wagtailusers/locale/de/LC_MESSAGES/django.mo and b/wagtail/wagtailusers/locale/de/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailusers/locale/de/LC_MESSAGES/django.po b/wagtail/wagtailusers/locale/de/LC_MESSAGES/django.po index d6c320dfe..d216827fe 100644 --- a/wagtail/wagtailusers/locale/de/LC_MESSAGES/django.po +++ b/wagtail/wagtailusers/locale/de/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:52+0000\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" "PO-Revision-Date: 2014-03-14 21:12+0000\n" "Last-Translator: serafeim <serafeim@torchbox.com>\n" "Language-Team: German (http://www.transifex.com/projects/p/wagtail/language/" @@ -96,7 +96,7 @@ msgstr "" msgid "Receive notification when your page edit is rejected" msgstr "" -#: wagtail_hooks.py:21 templates/wagtailusers/index.html:4 +#: wagtail_hooks.py:22 templates/wagtailusers/index.html:4 #: templates/wagtailusers/index.html:17 msgid "Users" msgstr "Benutzer" diff --git a/wagtail/wagtailusers/locale/el/LC_MESSAGES/django.mo b/wagtail/wagtailusers/locale/el/LC_MESSAGES/django.mo index 2250e419a..10d6a720f 100644 Binary files a/wagtail/wagtailusers/locale/el/LC_MESSAGES/django.mo and b/wagtail/wagtailusers/locale/el/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailusers/locale/el/LC_MESSAGES/django.po b/wagtail/wagtailusers/locale/el/LC_MESSAGES/django.po index ee4a7e89e..0a8400b9c 100644 --- a/wagtail/wagtailusers/locale/el/LC_MESSAGES/django.po +++ b/wagtail/wagtailusers/locale/el/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:52+0000\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" "PO-Revision-Date: 2014-03-14 21:15+0000\n" "Last-Translator: serafeim <serafeim@torchbox.com>\n" "Language-Team: Greek (http://www.transifex.com/projects/p/wagtail/language/" @@ -99,7 +99,7 @@ msgstr "" msgid "Receive notification when your page edit is rejected" msgstr "" -#: wagtail_hooks.py:21 templates/wagtailusers/index.html:4 +#: wagtail_hooks.py:22 templates/wagtailusers/index.html:4 #: templates/wagtailusers/index.html:17 msgid "Users" msgstr "Χρήστες" diff --git a/wagtail/wagtailusers/locale/en/LC_MESSAGES/django.mo b/wagtail/wagtailusers/locale/en/LC_MESSAGES/django.mo index 4b726f7d6..44e531ab0 100644 Binary files a/wagtail/wagtailusers/locale/en/LC_MESSAGES/django.mo and b/wagtail/wagtailusers/locale/en/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailusers/locale/en/LC_MESSAGES/django.po b/wagtail/wagtailusers/locale/en/LC_MESSAGES/django.po index 34caa392e..f2f7473d1 100644 --- a/wagtail/wagtailusers/locale/en/LC_MESSAGES/django.po +++ b/wagtail/wagtailusers/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:52+0000\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -89,7 +89,7 @@ msgstr "" msgid "Receive notification when your page edit is rejected" msgstr "" -#: wagtail_hooks.py:21 templates/wagtailusers/index.html:4 +#: wagtail_hooks.py:22 templates/wagtailusers/index.html:4 #: templates/wagtailusers/index.html:17 msgid "Users" msgstr "" diff --git a/wagtail/wagtailusers/locale/es/LC_MESSAGES/django.mo b/wagtail/wagtailusers/locale/es/LC_MESSAGES/django.mo index 47bde8411..b78a483a5 100644 Binary files a/wagtail/wagtailusers/locale/es/LC_MESSAGES/django.mo and b/wagtail/wagtailusers/locale/es/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailusers/locale/es/LC_MESSAGES/django.po b/wagtail/wagtailusers/locale/es/LC_MESSAGES/django.po index b92d83b01..7b9465fa2 100644 --- a/wagtail/wagtailusers/locale/es/LC_MESSAGES/django.po +++ b/wagtail/wagtailusers/locale/es/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:52+0000\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" "PO-Revision-Date: 2014-03-23 10:19+0000\n" "Last-Translator: fooflare <amos.oviedo@gmail.com>\n" "Language-Team: Spanish (http://www.transifex.com/projects/p/wagtail/language/" @@ -97,7 +97,7 @@ msgstr "" msgid "Receive notification when your page edit is rejected" msgstr "" -#: wagtail_hooks.py:21 templates/wagtailusers/index.html:4 +#: wagtail_hooks.py:22 templates/wagtailusers/index.html:4 #: templates/wagtailusers/index.html:17 msgid "Users" msgstr "Usuarios" diff --git a/wagtail/wagtailusers/locale/eu/LC_MESSAGES/django.mo b/wagtail/wagtailusers/locale/eu/LC_MESSAGES/django.mo index f5afff9e4..059c50fbc 100644 Binary files a/wagtail/wagtailusers/locale/eu/LC_MESSAGES/django.mo and b/wagtail/wagtailusers/locale/eu/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailusers/locale/eu/LC_MESSAGES/django.po b/wagtail/wagtailusers/locale/eu/LC_MESSAGES/django.po index a90cbe57e..a318cd86d 100644 --- a/wagtail/wagtailusers/locale/eu/LC_MESSAGES/django.po +++ b/wagtail/wagtailusers/locale/eu/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:52+0000\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" "PO-Revision-Date: 2014-03-14 21:12+0000\n" "Last-Translator: serafeim <serafeim@torchbox.com>\n" "Language-Team: Basque (http://www.transifex.com/projects/p/wagtail/language/" @@ -90,7 +90,7 @@ msgstr "" msgid "Receive notification when your page edit is rejected" msgstr "" -#: wagtail_hooks.py:21 templates/wagtailusers/index.html:4 +#: wagtail_hooks.py:22 templates/wagtailusers/index.html:4 #: templates/wagtailusers/index.html:17 msgid "Users" msgstr "" diff --git a/wagtail/wagtailusers/locale/fr/LC_MESSAGES/django.mo b/wagtail/wagtailusers/locale/fr/LC_MESSAGES/django.mo index 6c1e6be50..45fe41754 100644 Binary files a/wagtail/wagtailusers/locale/fr/LC_MESSAGES/django.mo and b/wagtail/wagtailusers/locale/fr/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailusers/locale/fr/LC_MESSAGES/django.po b/wagtail/wagtailusers/locale/fr/LC_MESSAGES/django.po index 2d7c91e10..6f091d8c6 100644 --- a/wagtail/wagtailusers/locale/fr/LC_MESSAGES/django.po +++ b/wagtail/wagtailusers/locale/fr/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:52+0000\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" "PO-Revision-Date: 2014-03-18 23:16+0000\n" "Last-Translator: nahuel\n" "Language-Team: French (http://www.transifex.com/projects/p/wagtail/language/" @@ -94,7 +94,7 @@ msgstr "" msgid "Receive notification when your page edit is rejected" msgstr "" -#: wagtail_hooks.py:21 templates/wagtailusers/index.html:4 +#: wagtail_hooks.py:22 templates/wagtailusers/index.html:4 #: templates/wagtailusers/index.html:17 msgid "Users" msgstr "Utilisateurs" diff --git a/wagtail/wagtailusers/locale/gl/LC_MESSAGES/django.mo b/wagtail/wagtailusers/locale/gl/LC_MESSAGES/django.mo index cbf2ea36d..b5aaaa895 100644 Binary files a/wagtail/wagtailusers/locale/gl/LC_MESSAGES/django.mo and b/wagtail/wagtailusers/locale/gl/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailusers/locale/gl/LC_MESSAGES/django.po b/wagtail/wagtailusers/locale/gl/LC_MESSAGES/django.po index a4da8c0a4..f81b208df 100644 --- a/wagtail/wagtailusers/locale/gl/LC_MESSAGES/django.po +++ b/wagtail/wagtailusers/locale/gl/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:52+0000\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" "PO-Revision-Date: 2014-03-23 10:33+0000\n" "Last-Translator: fooflare <amos.oviedo@gmail.com>\n" "Language-Team: Galician (http://www.transifex.com/projects/p/wagtail/" @@ -95,7 +95,7 @@ msgstr "" msgid "Receive notification when your page edit is rejected" msgstr "" -#: wagtail_hooks.py:21 templates/wagtailusers/index.html:4 +#: wagtail_hooks.py:22 templates/wagtailusers/index.html:4 #: templates/wagtailusers/index.html:17 msgid "Users" msgstr "Usuarios" diff --git a/wagtail/wagtailusers/locale/mn/LC_MESSAGES/django.mo b/wagtail/wagtailusers/locale/mn/LC_MESSAGES/django.mo index 4d78adf19..a610b6cd7 100644 Binary files a/wagtail/wagtailusers/locale/mn/LC_MESSAGES/django.mo and b/wagtail/wagtailusers/locale/mn/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailusers/locale/mn/LC_MESSAGES/django.po b/wagtail/wagtailusers/locale/mn/LC_MESSAGES/django.po index 7556a95d2..0724b1d54 100644 --- a/wagtail/wagtailusers/locale/mn/LC_MESSAGES/django.po +++ b/wagtail/wagtailusers/locale/mn/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:52+0000\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" "PO-Revision-Date: 2014-03-14 21:12+0000\n" "Last-Translator: serafeim <serafeim@torchbox.com>\n" "Language-Team: Mongolian (http://www.transifex.com/projects/p/wagtail/" @@ -90,7 +90,7 @@ msgstr "" msgid "Receive notification when your page edit is rejected" msgstr "" -#: wagtail_hooks.py:21 templates/wagtailusers/index.html:4 +#: wagtail_hooks.py:22 templates/wagtailusers/index.html:4 #: templates/wagtailusers/index.html:17 msgid "Users" msgstr "" diff --git a/wagtail/wagtailusers/locale/pl/LC_MESSAGES/django.mo b/wagtail/wagtailusers/locale/pl/LC_MESSAGES/django.mo index fe3ea1e38..04157a81f 100644 Binary files a/wagtail/wagtailusers/locale/pl/LC_MESSAGES/django.mo and b/wagtail/wagtailusers/locale/pl/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailusers/locale/pl/LC_MESSAGES/django.po b/wagtail/wagtailusers/locale/pl/LC_MESSAGES/django.po index 79a29fae4..e5f9b456d 100644 --- a/wagtail/wagtailusers/locale/pl/LC_MESSAGES/django.po +++ b/wagtail/wagtailusers/locale/pl/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:52+0000\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" "PO-Revision-Date: 2014-03-14 22:16+0000\n" "Last-Translator: utek <mail@utek.pl>\n" "Language-Team: Polish (http://www.transifex.com/projects/p/wagtail/language/" @@ -96,7 +96,7 @@ msgstr "" msgid "Receive notification when your page edit is rejected" msgstr "" -#: wagtail_hooks.py:21 templates/wagtailusers/index.html:4 +#: wagtail_hooks.py:22 templates/wagtailusers/index.html:4 #: templates/wagtailusers/index.html:17 msgid "Users" msgstr "Użytkownicy" diff --git a/wagtail/wagtailusers/locale/ro/LC_MESSAGES/django.mo b/wagtail/wagtailusers/locale/ro/LC_MESSAGES/django.mo index 101838acd..382451327 100644 Binary files a/wagtail/wagtailusers/locale/ro/LC_MESSAGES/django.mo and b/wagtail/wagtailusers/locale/ro/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailusers/locale/ro/LC_MESSAGES/django.po b/wagtail/wagtailusers/locale/ro/LC_MESSAGES/django.po index e7de771f9..167337849 100644 --- a/wagtail/wagtailusers/locale/ro/LC_MESSAGES/django.po +++ b/wagtail/wagtailusers/locale/ro/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:52+0000\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" "PO-Revision-Date: 2014-03-18 13:22+0000\n" "Last-Translator: zerolab\n" "Language-Team: Romanian (http://www.transifex.com/projects/p/wagtail/" @@ -93,7 +93,7 @@ msgstr "" msgid "Receive notification when your page edit is rejected" msgstr "" -#: wagtail_hooks.py:21 templates/wagtailusers/index.html:4 +#: wagtail_hooks.py:22 templates/wagtailusers/index.html:4 #: templates/wagtailusers/index.html:17 msgid "Users" msgstr "Utilizatori" diff --git a/wagtail/wagtailusers/locale/zh/LC_MESSAGES/django.mo b/wagtail/wagtailusers/locale/zh/LC_MESSAGES/django.mo index 690341269..32d3fac08 100644 Binary files a/wagtail/wagtailusers/locale/zh/LC_MESSAGES/django.mo and b/wagtail/wagtailusers/locale/zh/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailusers/locale/zh/LC_MESSAGES/django.po b/wagtail/wagtailusers/locale/zh/LC_MESSAGES/django.po index 357282e7b..e23076a78 100644 --- a/wagtail/wagtailusers/locale/zh/LC_MESSAGES/django.po +++ b/wagtail/wagtailusers/locale/zh/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:52+0000\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" "PO-Revision-Date: 2014-03-14 21:12+0000\n" "Last-Translator: serafeim <serafeim@torchbox.com>\n" "Language-Team: Chinese (http://www.transifex.com/projects/p/wagtail/language/" @@ -90,7 +90,7 @@ msgstr "" msgid "Receive notification when your page edit is rejected" msgstr "" -#: wagtail_hooks.py:21 templates/wagtailusers/index.html:4 +#: wagtail_hooks.py:22 templates/wagtailusers/index.html:4 #: templates/wagtailusers/index.html:17 msgid "Users" msgstr "用户" diff --git a/wagtail/wagtailusers/locale/zh_TW/LC_MESSAGES/django.mo b/wagtail/wagtailusers/locale/zh_TW/LC_MESSAGES/django.mo index 59297ccaa..da4ffeddd 100644 Binary files a/wagtail/wagtailusers/locale/zh_TW/LC_MESSAGES/django.mo and b/wagtail/wagtailusers/locale/zh_TW/LC_MESSAGES/django.mo differ diff --git a/wagtail/wagtailusers/locale/zh_TW/LC_MESSAGES/django.po b/wagtail/wagtailusers/locale/zh_TW/LC_MESSAGES/django.po index 9af41844e..849cbccb4 100644 --- a/wagtail/wagtailusers/locale/zh_TW/LC_MESSAGES/django.po +++ b/wagtail/wagtailusers/locale/zh_TW/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-11 10:52+0000\n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" "PO-Revision-Date: 2014-03-14 21:12+0000\n" "Last-Translator: wdv4758h <wdv4758h@gmail.com>\n" "Language-Team: \n" @@ -89,7 +89,7 @@ msgstr "" msgid "Receive notification when your page edit is rejected" msgstr "" -#: wagtail_hooks.py:21 templates/wagtailusers/index.html:4 +#: wagtail_hooks.py:22 templates/wagtailusers/index.html:4 #: templates/wagtailusers/index.html:17 msgid "Users" msgstr "使用者" diff --git a/wagtail/wagtailusers/migrations/0001_initial.py b/wagtail/wagtailusers/south_migrations/0001_initial.py similarity index 100% rename from wagtail/wagtailusers/migrations/0001_initial.py rename to wagtail/wagtailusers/south_migrations/0001_initial.py diff --git a/wagtail/wagtailusers/migrations/0002_add_user_profile_model.py b/wagtail/wagtailusers/south_migrations/0002_add_user_profile_model.py similarity index 100% rename from wagtail/wagtailusers/migrations/0002_add_user_profile_model.py rename to wagtail/wagtailusers/south_migrations/0002_add_user_profile_model.py diff --git a/wagtail/wagtailusers/south_migrations/__init__.py b/wagtail/wagtailusers/south_migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/wagtail/wagtailusers/tests.py b/wagtail/wagtailusers/tests.py index d59b2e822..09f7d1383 100644 --- a/wagtail/wagtailusers/tests.py +++ b/wagtail/wagtailusers/tests.py @@ -1,6 +1,6 @@ from django.test import TestCase from django.core.urlresolvers import reverse -from django.contrib.auth.models import User +from django.contrib.auth import get_user_model from wagtail.tests.utils import WagtailTestUtils from wagtail.wagtailusers.models import UserProfile @@ -59,7 +59,7 @@ class TestUserCreateView(TestCase, WagtailTestUtils): self.assertRedirects(response, reverse('wagtailusers_index')) # Check that the user was created - users = User.objects.filter(username='testuser') + users = get_user_model().objects.filter(username='testuser') self.assertEqual(users.count(), 1) self.assertEqual(users.first().email, 'test@user.com') @@ -67,7 +67,7 @@ class TestUserCreateView(TestCase, WagtailTestUtils): class TestUserEditView(TestCase, WagtailTestUtils): def setUp(self): # Create a user to edit - self.test_user = User.objects.create_user(username='testuser', email='testuser@email.com', password='password') + self.test_user = get_user_model().objects.create_user(username='testuser', email='testuser@email.com', password='password') # Login self.login() @@ -100,7 +100,7 @@ class TestUserEditView(TestCase, WagtailTestUtils): self.assertRedirects(response, reverse('wagtailusers_index')) # Check that the user was edited - user = User.objects.get(id=self.test_user.id) + user = get_user_model().objects.get(id=self.test_user.id) self.assertEqual(user.first_name, 'Edited') def test_edit_validation_error(self): @@ -121,7 +121,7 @@ class TestUserEditView(TestCase, WagtailTestUtils): class TestUserProfileCreation(TestCase, WagtailTestUtils): def setUp(self): # Create a user - self.test_user = User.objects.create_user(username='testuser', email='testuser@email.com', password='password') + self.test_user = get_user_model().objects.create_user(username='testuser', email='testuser@email.com', password='password') def test_user_created_without_profile(self): self.assertEqual(UserProfile.objects.filter(user=self.test_user).count(), 0)