---

top_level_page: ref_of_elements_and_properties
pages:
    - collection_buttons
    - columns
    - db_items
    - format
    - items
    - item_buttons
    - nav
    - panel
    
    # There is a line of code in doc_tools.js that will direct links to the panels page to the panel page
    #- panels
    
    - quick_filter_buttons
    - refiners
    - xml




#anyOf:
#    - label
#    - tooltip
#dependencies:
#dependencies_if_true:
#forbidden_if_true:
#    tooltip: css_class
# or
#    tooltip:
#        - css_class

common_definitions:
    stringy: &stringy
        - number
        - string
    variable: &variable
        - boolean
        - number
        - string
        - "null"
    css_class: &css_class
        type: string
        description: A CSS class name to add to this element.
    ord: &ord
        type: *stringy
        description: >
            This controls the order in which elements are drawn on the screen.
            
            If not set, it defaults to the order Zenario finds them in.
            
            From version 10.1 onwards, we have some logic where you can place a field or a button
            immediately before or after an existing field or button using an offset.
            To do this you need to use a pattern like this: "field_name + 0.1" (to put your field after)
            or like this: "field_name - 0.1" (to put your field before).
    copy_of: &copy_of
        type: string
        description: >
            You can enter the code-name of another element (this must be element with the same
            parent element) to copy the properties from.
            
            Any other properties you set will override the copied properties.
            
            If the element that you are attempting to copy is missing, unset, or not yet loaded,
            then your element will be removed.
            
            Applies from version 8.0 onwards.
    hidden: &hidden
        type: boolean
        description: >
            The hidden property hides elements from view when <code>true</code>.
    hide_in_backend: &hide_in_backend
        type: boolean
        description: >
            Set this property to true to hide this element in the admin backend.
            
            Applies from version 8.8 onwards.
    hide_in_frontend: &hide_in_frontend
        type: boolean
        description: >
            Set this property to true to hide this element in the frontend.
            
            Applies from version 8.8 onwards.
    visible_if: &visible_if
        type:
            - string
            - object
        description: >
            Controls whether an element is visible by evaluating a snippet of JavaScript.
            The element will be visible if the JavaScript returns <code>true</code>.
            
            To avoid using an inefficent eval(), you can also call a function
            by using an object of the form:
                lib.methodName => arg1, arg2, arg3, ...
            
            See https://zenar.io/visibility-in-tuix for examples.
    disabled_if: &disabled_if
        type:
            - string
            - object
        description: >
            Controls whether an element is disabled by evaluating a snippet of JavaScript.
            The element will be disabled if the JavaScript returns <code>true</code>.
            
            o avoid using an inefficent eval(), you can also call a function
            by using an object of the form:
                lib.methodName => arg1, arg2, arg3, ...
            
            See https://zenar.io/visibility-in-tuix for examples.
    table_join: &table_join
        type:
            - array
            - string
        static: true
        preFillOrganizerPanel: true
        description: >
            If some of the columns you wish to show are from a different table,
            then you should use this property to write the SQL needed for the
            table join.
            
            E.g. "INNER JOIN [[DB_PREFIX]]table AS alias ON alias.column_a = other_alias.column_b"
            
            This property must be written in your .yaml file.
            It can't be changed in PHP.
    link_properties: &link_properties
        path:
            type: string
            static: true
            description: >
                The tag-path of a panel to link to.
                
                This must be a tag-path; you may not enter a navigation path.
            
                This property must be written in your .yaml file.
                It can't be changed in PHP.
        refiner:
            type: string
            static: true
            description: >
                If the panel you are linking has a refiner defined,
                you can create a link to panel that will use that refiner by entering its name here.
            
                This property must be written in your .yaml file.
                It can't be changed in PHP.
        unselect_items:
            type: boolean
            description: >
                Setting this property will deselect any items on the current panel before
                navigation.
        
    hide_in_select_mode: &hide_in_select_mode
        type: boolean
        description: >
            Do not show this button when in Select Mode.
    select_mode_only: &select_mode_only
        type: boolean
        description: >
            Do not show this button when not in Select Mode.
    hide_in_quick_mode: &hide_in_quick_mode
        type: boolean
        description: >
            Do not show this button when in Quick Mode.
    quick_mode_only: &quick_mode_only
        type: boolean
        description: >
            Do not show this button when not in Quick Mode.
    
            Note: if you set both <code>select_mode_only</code> and <code>quick_mode_only</code> then
            this button will appear in both Select Mode and Quick Mode.
    only_show_on_refiner: &only_show_on_refiner
        type:
            - string
            - object
        description: >
            Only show the button if the named refiner has been applied.
    
            This takes the name of a refiner as a string, or you
            can use an associative array of refiner names as keys.
    hide_on_refiner: &hide_on_refiner
        type:
            - boolean
            - string
            - object
        description: >
            Hide the button if the named refiner has been applied.
    
            This takes the name of a refiner as a string, or you can use an associative
            array of refiner names as keys. Set to <code>true</code> to hide the button
            on any refiner.
            
    hide_on_filter: &hide_on_filter
        type: boolean
        description: >
            Hide this button when a search or a filter is applied.
            
$schema: 'http://json-schema.org/draft-04/schema#'
title: Organizer Schema

type: object
additionalProperties:
    type: object
    required:
        - label
        - nav
    additionalProperties: false
    properties:
        label:
            type: string
            description: >
                The label for the element, normally the text shown immediately before
                a field.
        tooltip:
            type: string
            description: >
                A tooltip for the element, which appears on hover.
        css_class: *css_class
        ord: *ord
        copy_of: *copy_of
        hidden: *hidden
        hide_in_backend: *hide_in_backend
        hide_in_frontend: *hide_in_frontend
        visible_if: *visible_if
        
        nav:
            type: object
            additionalProperties:
                type: object
                            
                required:
                    - label
                properties:
                    label:
                        type: string
                        description: >
                            The label for the element, normally the text shown immediately before
                            a field.
                    tooltip:
                        type: string
                        description: |
                            A tooltip for the element, which appears on hover.
                    keywords:
                        type: string
                        description: |
                            Text that is searchable in Organizer, in addition to the title
                            and tooltip text. Does not appear visually.
                    css_class: *css_class
                    ord: *ord
                    copy_of: *copy_of
                    hidden: *hidden
                    hide_in_backend: *hide_in_backend
                    hide_in_frontend: *hide_in_frontend
                    visible_if: *visible_if
                    separator_before_this:
                        type: boolean
                        description: |
                            Set this property to show a separator just before this item.
                    separator_after_this:
                        type: boolean
                        description: |
                            Set this property to show a separator just after this item.
                    link:
                        type: object
                        required:
                            - path
                        properties:
                            path:
                                type: string
                                description: >
                                    The tag-path of a panel to link to.
                
                                    This must be a tag-path; you may not enter a navigation path.
                            refiner:
                                type: string
                                description: >
                                    If the panel you are linking has a refiner defined,
                                    you can create a link to panel that will use that refiner by entering its name here.
                            refinerId:
                                type: string
                                description: >
                                    You can use this property to set the value of the refiner that you link to.
                        description: >
                            If you set a link on a nav element, an administrator will be taken to
                            the link's destination panel when they click on it.
                    
                    panel:
                        type: object
                        static: true
                        description: >
                            If you set a panel on a nav element, an administrator will be taken into
                            the panel when they click on it.
                        
                            This property must be written in your .yaml file.
                            It can't be changed in PHP.
                        #properties: *panel_properties #This will be set in dev_tools.js instead
                    
                    
                    href:
                        type: string
                        description: >
                            Add this property to manually set a hyperlink (instead of linking to a panel).
                    
                    onclick:
                        type: string
                        description: >
                            Add this property to manually set an onclick (instead of linking to a panel).
                    
                    new_window:
                        type: boolean
                        description: >
                            Set this property to make your link open in a new window if possible.
        
        panels:
            type: object
            additionalProperties:
                type: object
                static: true
                required:
                    - title
                properties:
                    css_class: *css_class
                    title:
                        type: string
                        description: >
                            The title to display at the top of an Organizer panel.
                    select_mode_title:
                        type: string
                        description: >
                            An alternate title for an Organizer panel to display when in
                            Organizer-select mode.
                            
                            Defaults to the title property if not set.
                    multiple_select_mode_title:
                        type: string
                        description: >
                            An alternate title for an Organizer panel to display when in
                            Organizer-select mode when multiple selection is enabled.
                            
                            Defaults to the select_mode_title property if not set.
                    help_text_title:
                        type: string
                        description: >
                            The title to display for the help text.
                            
                            Defaults to the title property if not set.
                            
                            This works from version 10.3 onwards.
                    

                    notice:
                        type: object
                        required:
                            - type
                        dependencies_if_true:
                            show:
                                - message
                        description: >
                            Use this to show a coloured notice bar at the top of the panel.
                            
                            Applies from version 8.6 onwards.
                        properties:
                            show:
                                type: boolean
                                description: >
                                    Unlike other elements, this MUST be set to <code>true</code>
                                    in order for the notice to be shown.
                                    
                                    You can additionally use the <code>visible_if</code> property to
                                    control whether the notice is displayed, but this must
                                    still be set to <code>true</code>.
                            visible_if: *visible_if
                            message:
                                type: string
                                description: >
                                    A message to show.
                            type:
                                enum:
                                    - error
                                    - warning
                                    - question
                                    - information
                                    - success
                                description: >
                                    Controls the style of the notice.
                            html:
                                type: boolean
                                description: >
                                    If this is set, the message will not be html-escaped.
                    
                    panel_type:
                        type: string
                        static: true
                        description: >
                            The panel type to use for this panel.
            
            
                            This property must be written in your .yaml file.
                            It can't be changed in PHP.
                        default: list
                    
                    slidedown_view_microtemplate:
                        type: string
                        description: >
                            If you enter the name of a microtemplate here, a "toggle" button will be placed
                            next to each item's row in Organizer's list view, which will cause the microtemplate to appear
                            by sliding down when clicked on.
                    
                    grid_view_microtemplate:
                        type: string
                        description: >
                            If you enter the name of a microtemplate here, it will be added under the thumbnail for each
                            item in grid view.
                    
                    use_tall_rows:
                        type: boolean
                        description: >
                            This is used in list view. If set, taller rows will be used.
                    
                    two_line_list:
                        type: boolean
                        description: >
                            This is used in list view. If set, the first column will contain 2 rows.
                    
                    links:
                        type: array
                        description: >
                            Use this property to display links on the start page.
                            For example, display a link to content items in draft form on the start page.
                        additionalProperties:
                            properties:
                                id:
                                    type: string
                                    description: >
                                        The HTML id of the target element.
                                css_class:
                                    type: string
                                    description: >
                                        The CSS class of the target element.
                                href:
                                    type: string
                                    description: >
                                        The URL on the target element.
                                title:
                                    type: string
                                    description: >
                                        The title of the button (displayed in bold).
                                text:
                                    type: string
                                    description: >
                                        Short description of the button.
                                record_count:
                                    type: *variable
                                    description: >
                                        A record count on the button. For example, the number of content items in draft form.
                    
                    db_items:
                        type: object
                        required:
                            - table
                            - id_column
                        description: >
                            This lets you automatically populate a panel's <code>items</code> array with items from the database.
                            
                            Using <code>db_items</code> also enables server-side searching, sorting, filtering and pagination features.
                        properties:
                            table:
                                type: string
                                static: true
                                preFillOrganizerPanel: true
                                description: >
                                    The name of a table in the database (including the prefix), and an alias.
                                    
                                    E.g. <code>[[DB_PREFIX]]some_table_name AS t</code>
            
            
                                    This property must be written in your .yaml file,
                                    or set in your preFillOrganizerPanel() method.
                                    It can't be changed in your fillOrganizerPanel() method.
                            id_column:
                                type: string
                                static: true
                                preFillOrganizerPanel: true
                                description: >
                                    The name of the id-column in your table, which will be used for the ids of the rows in Organizer.
                                    
                                    E.g. t.id
            
            
                                    This property must be written in your .yaml file,
                                    or set in your preFillOrganizerPanel() method.
                                    It can't be changed in your fillOrganizerPanel() method.
                            encode_id_column:
                                type: boolean
                                static: true
                                preFillOrganizerPanel: true
                                description: >
                                    Automatically call the encodeItemIdForOrganizer() function on the id column.
                                    You should do this if the id is not numeric and might contain special characters
                                    and/or commas.
                                    
                                    Note: while the *encoding* will be automatic, the *decoding* is not, and
                                    you'll still need to call decodeItemIdForOrganizer() manually in the
                                    appropriate places.
            
            
                                    This property must be written in your .yaml file,
                                    or set in your preFillOrganizerPanel() method.
                                    It can't be changed in your fillOrganizerPanel() method.
                            group_by:
                                type: string
                                static: true
                                preFillOrganizerPanel: true
                                description: >
                                    A column or comma-separated list of columns to group by. Defaults to
                                    <code>id_column</code> if not set.
                                    If you've used CONCAT() or some other function name for your <code>id_column</code> then
                                    you should set this to improve the efficiency of the generated SQL statement.
            
            
                                    This property must be written in your .yaml file,
                                    or set in your preFillOrganizerPanel() method.
                                    It can't be changed in your fillOrganizerPanel() method.
                                default: (defaults to the id_column property)
                            where_statement:
                                type: string
                                static: true
                                preFillOrganizerPanel: true
                                description: >
                                    If you need to use a WHERE statement in your query,
                                    that's not part of an optional search or filter, add it here.
                                    
                                    E.g. "WHERE c.status NOT IN ('trashed','deleted')"
            
                                    This property must be written in your .yaml file,
                                    or set in your preFillOrganizerPanel() method.
                                    It can't be changed in your fillOrganizerPanel() method.
                                default: WHERE 1=1
                            client_side:
                                type: boolean
                                static: true
                                description: >
                                    Determines that Organizer searching, sorting and
                                    pagination happens on the client, as opposed to the server,
                                    which would happen otherwise.
                                    
                                    This reduces the number of AJAX requests made to the server, and also allows fields
                                    that were generated in PHP code to be sortable/searchable.
                                    
                                    However, when there will be a large number of rows in a panel,
                                    all of this data will be downloaded with each AJAX
                                    request which will greatly slow Organizer down, so avoid
                                    this when scalability is important.
                                                                        
                                    Filters and quick-filters will always be done on the
                                    server and will always trigger an AJAX request
                                    when changed.
            
                                    This property must be written in your .yaml file.
                                    It can't be changed in PHP.
                            
                            max_limit:
                                type: number
                                static: true
                                preFillOrganizerPanel: true
                                description: >
                                    This places an upper limit on the number of rows that Organizer will load
                                    from the database into a single panel.
                                    
                                    This is intended as a safeguard to stop any "out of memory" errors
                                    if pagination is not used and a panel contains thousands of rows.
                                                
                                    This property must be written in your .yaml file,
                                    or set in your preFillOrganizerPanel() method.
                                    It can't be changed in your fillOrganizerPanel() method.
                                default: 500
                            
                            max_limit_hit:
                                type: boolean
                                description: >
                                    Zenario will set this flag to true if more rows than the max_limit were found.
                                    
                            item_count_max_limit:
                                type: number
                                static: true
                                preFillOrganizerPanel: true
                                description: >
                                    This places an upper limit on the total number of items that Organizer will count
                                    from the database, and hence the total number of pages.
                                    This is intended as a safe-guard to stop any "out of memory" errors
                                    when there are millions of rows.
                                                
                                    This property must be written in your .yaml file,
                                    or set in your preFillOrganizerPanel() method.
                                    It can't be changed in your fillOrganizerPanel() method.
                                default: 100000
                            
                            item_count_max_limit_hit:
                                type: boolean
                                description: >
                                    Zenario will set this flag to true if more items than the item_count_max_limit were found.
                                                        
                    columns:
                        type: object
                        description: >
                            You should use this to specify the columns that will appear in your panel.
                            
                        commented_out_description: |
                            If you are using the <code>db_items</code> property and wish the value of a column to come
                            from a table in the database, you will also need to provide the needed SQL
                            snippets to look it up.
                        additionalProperties:
                            type: object
                            properties:
                                title:
                                    type: string
                                    description: >
                                        When a column in Organizer list view has this title
                                        defined, it becomes visible to the list views,
                                        and the column will appear the "Adjust view" control.
                                
                                        When a column has no title, it will be hidden.
                                tooltip:
                                    type: string
                                    description: >
                                        Defines a tooltip for the column's title, which
                                        will appear on hover.
                                        
                                        Use this when the tite's text is likely to be
                                        wider than the column otherwise needs to be.
                                ord: *ord
                                copy_of: *copy_of
                                css_class: *css_class
                                hidden: *hidden
                                visible_if: *visible_if
                                only_show_on_refiner: *only_show_on_refiner
                                hide_on_refiner: *hide_on_refiner
                                hide_on_filter: *hide_on_filter
                                
                                hidden_in_view_options:
                                    type: boolean
                                    description: >
                                        Set this to hide the column from the list in the
                                        "Adjust view" box, even if it is shown in the panel.
                                        
                                        This works from version 9.6 onwards.
                                shown_in_view_options:
                                    type: boolean
                                    description: >
                                        Set this to show the column from the list in the
                                        "Adjust view" box, even if it is hidden in the panel.
                                        
                                        This will override the usual hidden/visible_if logic.
                                        However the hide_on_refiner and hide_on_filter properties
                                        will still apply.
                                        
                                        This works from version 9.6 onwards.
                                title_in_view_options:
                                    type: string
                                    description: >
                                        An alternative title to use for the column in the
                                        "Adjust view" box. 
                                        
                                        Defaults to the title property if not set.
                                        
                                        This works from version 9.6 onwards.
                                
                                parent:
                                    type: string
                                    description: >
                                        Enter the code-name of another column here to make your column's value appear
                                        inside the column you specify.
                                        
                                        Only works on multi-row panels.
                                        
                                        There's a limit of 2 levels; you can't have a column inside a column inside another column.
                                
                                db_column:
                                    type: string
                                    static: true
                                    preFillOrganizerPanel: true
                                    description: >
                                        The column in the database, or a SQL expression.
                                        Each table should be given its own unique alias, but you should not give
                                        aliases to columns.
                                
                                        You do not need to provide this property if you plan to populate this column in
                                        PHP rather than MySQL.
            
                                        This property must be written in your .yaml file,
                                        or set in your preFillOrganizerPanel() method.
                                        It can't be changed in your fillOrganizerPanel() method.
                                
                                searchable:
                                    type: boolean
                                    static: true
                                    preFillOrganizerPanel: true
                                    description: >
                                        Determines whether this column is searched on when
                                        the administrator types a phrase into the search box.
                                
                                        This works slightly differently depending on whether the <code>client_side</code> property is set:
                                
                                        • If it is set, then the searching will be done in JavaScript on the client.
                                
                                        • If it is not set, then the searching will be done in MySQL on the
                                            server, and will only work on columns that are in the database (and
                                            not columns computed in PHP).
            
            
                                        This property must be written in your .yaml file,
                                        or set in your preFillOrganizerPanel() method.
                                        It can't be changed in your fillOrganizerPanel() method.
                                ascii_only:
                                    type: boolean
                                    static: true
                                    preFillOrganizerPanel: true
                                    description: >
                                        You must flag any database columns that use the ASCII
                                        character set rather than UTF-8 with this
                                        property to avoid a database error when searching for multilingual characters.
            
            
                                        This property must be written in your .yaml file,
                                        or set in your preFillOrganizerPanel() method.
                                        It can't be changed in your fillOrganizerPanel() method.
                                
                                search_column:
                                    type: string
                                    static: true
                                    preFillOrganizerPanel: true
                                    description: >
                                        Allows you to specify a different column definition to use for searches.
            
            
                                        This property must be written in your .yaml file,
                                        or set in your preFillOrganizerPanel() method.
                                        It can't be changed in your fillOrganizerPanel() method.
                                    default: (defaults to the db_column property)
                                chop_prefix_from_search:
                                    type: string
                                    static: true
                                    preFillOrganizerPanel: true
                                    description: >
                                        Allows you enter a prefix that will be removed from the search text.
                                        
                                        E.g. a plugin might be called "P123", but its id is just "123" in the
                                        database, so the "P" would need to be stripped if the user enters it.
                                        
                                        This works from version 8.1 onwards.
            
            
                                        This property must be written in your .yaml file,
                                        or set in your preFillOrganizerPanel() method.
                                        It can't be changed in your fillOrganizerPanel() method.
                                filter_column:
                                    type: string
                                    static: true
                                    preFillOrganizerPanel: true
                                    description: >
                                        Allows you to specify a different column definition to use for filters.
                                        
                                        This property must be written in your .yaml file,
                                        or set in your preFillOrganizerPanel() method.
                                        It can't be changed in your fillOrganizerPanel() method.
                                    default: (defaults to the search_column property)
                                sort_column:
                                    type: string
                                    static: true
                                    preFillOrganizerPanel: true
                                    description: >
                                        Allows you to specify a different column definition to use when sorting.
            
            
                                        This property must be written in your .yaml file,
                                        or set in your preFillOrganizerPanel() method.
                                        It can't be changed in your fillOrganizerPanel() method.
                                    default: (defaults to the db_column property)
                                sort_column_desc:
                                    type: string
                                    static: true
                                    preFillOrganizerPanel: true
                                    description: >
                                        Allows you to specify a different column definition to use when sorting.
            
            
                                        This property must be written in your .yaml file,
                                        or set in your preFillOrganizerPanel() method.
                                        It can't be changed in your fillOrganizerPanel() method.
                                        descending.
                                    default: "<code>sort_column</code> DESC"
                                
                                table_join: *table_join
                                
                                
                                
                                server_side_only:
                                    type: boolean
                                    static: true
                                    preFillOrganizerPanel: true
                                    description: >
                                        Together with the <code>title</code> property, the <code>server_side_only</code> property controls when
                                        data in a column is sent to a client.
                                
                                        Setting the <code>server_side_only</code> property and not setting a <code>title</code> will ensure
                                        that the data in a column is never sent to the client.
                                        Setting the <code>server_side_only</code> property and a <code>title</code> will make a column only
                                        visible in a CSV Export.
                                        Not setting the <code>server_side_only</code> property or a <code>title</code> will send a column's
                                        data to the client; the data will not be visible as a column but can still
                                        be used by confirm messages, label properties, and so on.
                                
                                        Note: the column's definition will always be sent to the client.
            
            
                                        This property must be written in your .yaml file,
                                        or set in your preFillOrganizerPanel() method.
                                        It can't be changed in your fillOrganizerPanel() method.
                                
                                item_link:
                                    type: string
                                    description: >
                                        This lets you define a link to another item in Organizer.
                                        
                                        Can be a tag path to link to another Organizer panel.
                                        
                                        You can enter:
                                        "menu_item" to link to a menu node,
                                        "content_item" to link to a content item, or
                                        "content_item_or_url" for a content item or an external URL.
                                        
                                
                                format:
                                    type: string
                                    static: true
                                    preFillOrganizerPanel: true
                                    default: text
                                    description: >
                                        Defines the data-format of a column.
                                        
                                        This property must be written in your .yaml file,
                                        or set in your preFillOrganizerPanel() method.
                                        It can't be changed in your fillOrganizerPanel() method.

                                        See https://zenar.io/ref-organizer_schema-format for more information.
                                filter_format:
                                    type: string
                                    static: true
                                    preFillOrganizerPanel: true
                                    default: (defaults to the format property)
                                    description: >
                                        Determines that the format of a column for the
                                        filter logic should be overridden.
                                        
                                        For example, a column may appear as
                                        a count, but is overridden so that it's filtered
                                        as a yes_or_no column.
            
            
                                        This property must be written in your .yaml file,
                                        or set in your preFillOrganizerPanel() method.
                                        It can't be changed in your fillOrganizerPanel() method.
                                
                                filters_by_value:
                                    type: object
                                    description: >
                                        This option allows you to write different SQL in your filters for specific values.
                                        
                                        This works from version 10.1 onwards.
                                    additionalProperties:
                                        type: string
                                
                                values:
                                    type: object
                                    description: >
                                        If you use the enum format for a column, you should provide a list of values
                                        (with real values as keys and display values as values).
                                        
                                        If you enter an asterisk (*) as the value, this will match any non-empty value.
                                        (Or match any empty value when the admin inverts the filter.)
                                        
                                        From 9.7 onwards, you can set this on a date or datetime formatted column.
                                        The column will then display as a date if a date is entered, but display a label if
                                        a value from the list of values is entered. This only effects the display of the column,
                                        not searching/filtering.
                                    additionalProperties:
                                        type:
                                            - boolean
                                            - number
                                            - string
                                            - "null"
                                            - array
                                            - object
                                empty_value:
                                    type: string
                                    description: >
                                        If a column is empty, show this text instead of a blank cell.
                                
                                yes_phrase:
                                    type: string
                                    description: >
                                        For yes_or_no formatted columns, show this value if the field is not empty.
                                        Defaults to "Yes".
                                no_phrase:
                                    type: string
                                    description: >
                                        For yes_or_no formatted columns, show this value if the field is empty.
                                        Defaults to "No".
                                true_phrase:
                                    type: string
                                    description: >
                                        For true_or_false formatted columns, show this value if the field is not empty.
                                        Defaults to <code>true</true>.
                                        
                                false_phrase:
                                    type: string
                                    description: >
                                        For true_or_false formatted columns, show this value if the field is empty.
                                        Defaults to <code>false</code>.
                    
                                microtemplate:
                                    type: string
                                    description: >
                                        This allows you to enter a microtemplate (this can either be the code for the template,
                                        or the name of a pre-defined template), that will be run on the client
                                        to display the value of this column.
                                        
                                        This works from version 8.0 onwards.
                                width:
                                    enum:
                                        - xxsmall
                                        - xsmall
                                        - small
                                        - medium
                                        - large
                                        - xlarge
                                        - xxlarge
                                    default: medium
                                    description: >
                                        This lets you set an initial display-width for a column
                                length_limit:
                                    type: number
                                    description: >
                                        Include this property to place a limit on the number of characters which can be
                                        shown in this column.
                                
                                        If any text was hidden, the full text will be visible as a tooltip over the
                                        column.
                                align_right:
                                    type: boolean
                                    description: >
                                        Text in this column will align right rather then left.
                                        Useful for displaying numbers.
                                html:
                                    type: boolean
                                    description: >
                                        If set, the value of the column will not be html-escaped.
                                show_by_default:
                                    type: boolean
                                    description: >
                                        Show this column in list view by default, but allow
                                        an administrator to hide it.
                                always_show:
                                    type: boolean
                                    description: >
                                        Always show this column in list view, and disallow
                                        an administrator from hiding it.
                                sort_desc_by_default:
                                    type: boolean
                                    description: >
                                        If a column is sortable,
                                        when the user first clicks it the sort will be ascending first, and they will
                                        need to click a second time if they wish to sort descending,
                                        
                                        You can set this property to flip that order and sort descending on the first click.
                                        Best used on "date" columns where the user might expect the most recent things first.
                                disallow_sorting:
                                    type: boolean
                                    static: true
                                    preFillOrganizerPanel: true
                                    description: >
                                        Disallows sorting on a column.
                                        If there is a column where the display value is a different format to the
                                        actual value then you should include this property to avoid confusing the Admin.
                                
                                        Note: sorting works slightly differently depending on whether the
                                        <code>client_side</code> property is set.
                                
                                        • If it is set, then the searching will be done in JavaScript on the client.
                                
                                        • If it is not set, then the searching will be done in MySQL on the
                                            server, and will only work on columns that are in the database (and
                                            not columns computed in PHP).
            
            
                                        This property must be written in your .yaml file,
                                        or set in your preFillOrganizerPanel() method.
                                        It can't be changed in your fillOrganizerPanel() method.
                                disallow_filtering:
                                    type: boolean
                                    static: true
                                    preFillOrganizerPanel: true
                                    description: >
                                        Allows you to disallow filtering on a column.
            
            
                                        This property must be written in your .yaml file,
                                        or set in your preFillOrganizerPanel() method.
                                        It can't be changed in your fillOrganizerPanel() method.
                                
                                disallow_quicksearch:
                                    type: boolean
                                    static: true
                                    preFillOrganizerPanel: true
                                    description: >
                                        Disallows quick-searching on a column.
                                        You should set this property if you want a column that can be filtered on using the "Adjust view" box,
                                        but that is not searched when the administrator types a phrase into the search box.
                                                                
                                tag_colors:
                                    type: object
                                    description: >
                                        This property is used by the "multi_line_list" panel type. It turns a
                                        column with comma-separated values into a list of coloured tags.
                                        
                                        If set, it needs to be an array of values (as keys) to colour names (as values).
                                        Any missing values will default to blue.
                                        
                                    additionalProperties:
                                        enum:
                                            - blue
                                            - red
                                            - green
                                            - orange
                                            - yellow
                                            - violet
                                            - grey
                                        default: blue
                                
                                get_tags_from_column:
                                    type: string
                                    default: (defaults to the current column)
                                    description: >
                                        This lets you use the value of a different column for the tags by
                                        entering the code-name of another column.
                                        
                                        If you don't set the get_tags_from_column property then the tags will
                                        be displayed instead of the current value.
                                        
                                        If you do set the get_tags_from_column property then the tags will
                                        be displayed below the current value, and the height of each row will
                                        be made larger to accommodate this.
                                
                                document_line_number:
                                    type:
                                        - number
                                    description: >
                                        This property is only used on the Hierarchical documents panel.
                                        
                                        Each item row on the panel contains multiple lines of data.
                                        
                                        The column's value will be displayed on the line number entered here.
                    
                    default_sort_column:
                        type: string
                        static: true
                        description: >
                            The code-name of a column (not the name in SQL) to use as the default sort column.
    
    
                            This property must be written in your .yaml file.
                            It can't be changed in PHP.
                        default: name
                    default_sort_desc:
                        type: boolean
                        static: true
                        description: >
                            If this property is set, your panel will sort its items in descending order by default.
    
    
                            This property must be written in your .yaml file.
                            It can't be changed in PHP.
                    
                    subheading_column:
                        type: string
                        description: >
                            If you are using the list_with_subheadings panel type then you should enter
                            the code-name of a column to use as a subheading into this property.
                    
                    quick_filter_buttons:
                        type: object
                        description: >
                            Quick filter buttons appear at the top of Organizer, and can be used to apply filters on
                            columns with just one click.
                        additionalProperties:
                            type: object
                            anyOf:
                                -
                                    required:
                                        - css_class
                                -
                                    required:
                                        - hide_when_children_are_not_visible
                                -
                                    required:
                                        - label
                            properties:
                                ord: *ord
                                copy_of: *copy_of
                                css_class: *css_class
                                label:
                                    type: string
                                    description: >
                                        A label for this button
                                tooltip:
                                    type: string
                                    description: >
                                        A tooltip for this button
                                
                                parent:
                                    type: string
                                    description: >
                                        Enter the name of another quick filter button here to make your button appear
                                        under the named button as a dropdown.
                                        
                                        There's a limit of 2 levels; you can't have a dropdown inside another dropdown.
                                
                                hidden: *hidden
                                visible_if: *visible_if
                                
                                hide_when_children_are_not_visible:
                                    type: boolean
                                    description: >
                                        If you set this property, the button will be hidden when it has no
                                        visible children.
                                
                                disabled:
                                    type: boolean
                                    description: >
                                        If you set this property, the button will be disabled.
                                
                                disabled_if: *disabled_if
                                
                                disabled_tooltip:
                                    type: string
                                    default: (defaults to the tooltip property)
                                    description: >
                                        A tooltip for this button if it is disabled.
                                
                                column:
                                    type: string
                                    description: >
                                        The codename/property name of a column from <code>columns</code> to apply the filter on.
                                value:
                                    type: *stringy
                                    description: >
                                        The value of the column to use.
                                        
                                        (Note: you don't need to enter this for "Yes or no"-type columns.)
                                        
                                        For enums, if you enter an asterisk (*) as the value, this will match any non-empty value.
                                        (Or match any empty value if you set the invert property as well.)
                                invert:
                                    type: boolean
                                    description: >
                                        Whether to invert the filter
                                
                                remove_filter:
                                    type: boolean
                                    description: >
                                        A quick filter will the "remove_filter" property will turn the filters off for a column
                                        when an administrator clicks it.
                                
                                clear_all:
                                    type: boolean
                                    description: >
                                        Clicking on a quick-filter-button with clear_all set will clear every
                                        other quick-filter button. (But if this is in a drop-down, only the buttons
                                        in the drop-down will be affected.)
                                
                                hide_in_select_mode: *hide_in_select_mode
                                select_mode_only: *select_mode_only
                                hide_in_quick_mode: *hide_in_quick_mode
                                quick_mode_only: *quick_mode_only
                                only_show_on_refiner: *only_show_on_refiner
                                hide_on_refiner: *hide_on_refiner
                                hide_on_filter: *hide_on_filter
                    
                    refiners:
                        type: object
                        description: >
                            This lets you create refined views of the data in your panel.
                            
                            A refined view might only show specific items, show different columns, or show different buttons.
                        additionalProperties:
                            type: object
                            properties:
                                sql:
                                    type: string
                                    static: true
                                    preFillOrganizerPanel: true
                                    description: >
                                        A refiner is a SQL snippet that will be added to the WHERE statement if
                                        enabled, and can be used to refiner the results in some additional way.
                                
                                        For example:
                                            t.some_column_name IS NOT NULL
                                
                                        Refiners that were called from an item-level action will set the item id in
                                        a constant which you can reference, for example:
                                            t.some_column_name = [[REFINER_ID]]
                                
                                        Or if multiple selection was enabled, another constant can be used:
                                            t.some_column_name IN [[REFINER_IDS]]
                                
                                        Refiners will only work with panels with a <code>db_items</code> property
                                        
                                        
                                        This property must be written in your .yaml file,
                                        or set in your preFillOrganizerPanel() method.
                                        It can't be changed in your fillOrganizerPanel() method.
                                table_join: *table_join
                                sql_when_searching:
                                    type: string
                                    static: true
                                    description: >
                                        If the Admin has entered a search query in the search box and you have set
                                        this property, Zenario will use this SQL instead of your <code>sql</code> property.
                                        
                                        
                                        This property must be written in your .yaml file,
                                        or set in your preFillOrganizerPanel() method.
                                        It can't be changed in your fillOrganizerPanel() method.
                                table_join_when_searching:
                                    type: string
                                    static: true
                                    description: >
                                        If the Admin has entered a search query in the search box and you have set
                                        this property, Zenario will use this table join instead of your <code>table_join</code>
                                        property.
                                        
                                        
                                        This property must be written in your .yaml file,
                                        or set in your preFillOrganizerPanel() method.
                                        It can't be changed in your fillOrganizerPanel() method.
                                allow_unauthenticated_xml_access:
                                    type: boolean
                                    static: true
                                    description: >
                                        If you have a panel with the xml and allow_unauthenticated_xml_access
                                        properties, if you wish visitors to see this refiner without needing to be logged in
                                        as an Admin, you must also add the allow_unauthenticated_xml_access property
                                        to this refiner.
    
    
                                        This property must be written in your .yaml file.
                                        It can't be changed in PHP.
                                
                                title:
                                    type: string
                                    description: >
                                        You can use this property to override the panel's title
                                        when this refiner is active.
                                        
                                        This works from version 7.5 onwards.
                                
                                select_mode_title:
                                    type: string
                                    description: >
                                        You can use this property to override the title in select mode
                                        when this refiner is active.
                                        
                                multiple_select_mode_title:
                                    type: string
                                    description: >
                                        You can use this property to override the title in select mode
                                        (with multiple selection enabled)
                                        when this refiner is active.
                                                            
                                no_items_message:
                                    type: string
                                    description: >
                                        You can use this property to override the "no items" message
                                        when this refiner is active.
                                                                                
                                        From 8.4 onwards, you can use line breaks in "no items" messages to improve readability.
                                
                                no_items_in_search_message:
                                    type: string
                                    description: >
                                        You can use this property to override the "no items in search" message
                                        when this refiner is active.
                                                                        
                                always_show_flat_view:
                                    type: boolean
                                    description: >
                                        The "hierarchy_with_lazy_load" panel type shows hierarchy mode normally,
                                        but then switches back to a flat list view if someone starts searching.
                                        
                                        If you consider your refiner a "search", and always want to show a flat
                                        list view even if someone hasn't typed anything in the search box, then
                                        set this property.
                                        
                                        This works from version 8.2 onwards.
                                        
                                        From 8.4 onwards, you can use line breaks in "no items" messages to improve readability.
                                
                                
                                prefs_by_refiner:
                                    type: boolean
                                    description: >
                                        Enable this option to set things such as the sort column and the sort order on a per-refiner basis.
                                        If this is enabled, the admin preferences will also be saved in this way.
                                        
                                        This works from version 10.3 onwards.
                                        This must be written in your .yaml file, or set in your fillOrganizerNav() method.
                    
                                default_sort_column:
                                    type: string
                                    static: true
                                    description: >
                                        The code-name of a column (not the name in SQL) to use as the default sort column
                                        for this refiner.
                                        
                                        This requires the "prefs_by_refiner" property set to true, otherwise it will not be read.
                                        
                                        This works from version 10.3 onwards.
                                        This must be written in your .yaml file, or set in your fillOrganizerNav() method.
                                
                                default_sort_desc:
                                    type: boolean
                                    static: true
                                    description: >
                                        If this property is true, your panel will sort its items in descending order by default.
                                        
                                        This requires the "prefs_by_refiner" property set to true, otherwise it will not be read.
                                        
                                        This works from version 10.3 onwards.
                                        This must be written in your .yaml file, or set in your fillOrganizerNav() method.
                                
                                
                                
                                prefs_by_refiner_value:
                                    type: object
                                    description: >
                                        Use this property to set things such as the sort column and the sort order on a per-refiner value basis.
                                        If this is enabled, the admin preferences will also be saved in this way.
                                        
                                        This works from version 10.3 onwards.
                                        This must be written in your .yaml file, or set in your fillOrganizerNav() method.
                                    additionalProperties:
                                        type: object
                                        properties:
                                            default_sort_column:
                                                type: string
                                                static: true
                                                description: >
                                                    The code-name of a column (not the name in SQL) to use as the default sort column
                                                    for this refiner.
                                            
                                            default_sort_desc:
                                                type: boolean
                                                static: true
                                                description: >
                                                    If this property is true, your panel will sort its items in descending order by default.
                                
                                
                                
                    
                    refiner_required:
                        type: boolean
                        static: true
                        description: >
                            Determines that this panel shouldn't be shown without a refiner.


                            This property must be written in your .yaml file.
                            It can't be changed in PHP.
                    
                    items:
                        type: object
                        description: >
                            An array of arrays that represents the items in your panel and their properties/column values.
                            
                            If you use the <code>db_items</code> property, this will be automatically populated for you.
                        additionalProperties:
                            type: object
                            anyOf:
                                -
                                    required:
                                        - link
                                -
                                    required:
                                        - panel
                                -
                                    {}
                            additionalProperties:
                                type: *variable
                                description: >
                                    For each of your columns, you should add a property to each of your items to
                                    store the value of that column.
                            
                                    E.g. if you have a column called name, you should set the name property for
                                    each of your items.
                            
                                    For panels with the db_items property, your items/columns will be populated automatically.
                            
                            properties:
                                css_class:
                                    type: string
                                    description: >
                                        A CSS class name for the item, which should define its icon.
                                row_class:
                                    type: string
                                    description: >
                                        Adds a CSS class name to the whole row for the item which
                                        you can then style.
                                
                                        The class name will be added in all Organizer views.
                                
                                        If you wish to style specific modes differently then you may make use of
                                        the .grid_view .summary_view .list_view and .close_up_view CSS Selectors.
                                cell_css_classes:
                                    type: object
                                    description: >
                                        You can use this to give individual cells a css class by creating elements here with
                                        the same element name as the columns.
                                    additionalProperties:
                                        type: string
                                        description: >
                                            A css class name for the item in the column with this element's name.
                                
                                tooltip:
                                    type: string
                                    description: >
                                        A tooltip to display. It will not be HTML escaped.
                                image:
                                    type: string
                                    description: >
                                        A URL for an icon/image in grid view. Will be
                                        displayed at up to 180w × 130h pixels in size.
                                
                                        Note: if you don't include a http:// in your URL then it will be
                                        automatically prefixed by the URLBasePath.
                                
                                #disable_reorder:
                                #    type: boolean
                                #    description: >
                                #        New in version 7.0.0
                                #        Setting this for an item will stop an administrator reordering it in
                                #        hierarchy mode.
                                
                                frontend_link:
                                    type: string
                                    description: >
                                        A link to this item in the front end.
                                        You should to provide this if you use the <code>frontend_link</code> button type for
                                        an Item Button or an Inline Button
                                
                                navigation_path:
                                    type: string
                                    description: >
                                        A navigation path to this item in Organizer (i.e., it ought to take you to
                                        the current item in the current panel if this text was copy-pasted into the hash-property).
                                
                                        This property is read in 'get_item_links' mode, which is currently only used on
                                        the Content Item and Menu Node panels.
                                
                                popout:
                                    type: object
                                    description: >
                                        If you have an Item Button or an Inline Button with a <code>popout</code> action,
                                        then you can also add properties here against each item,
                                        which will be merged with the popout properties on the button if this
                                        item is selected.
                                    additionalProperties:
                                        type: *variable
                                        description: >
                                            A property to set/override
                                
                                link:
                                    type: object
                                    static: true
                                    required:
                                        - path
                                    properties: *link_properties
                                    description: >
                                        If you set a link on an item, this will cause a little folder icon to appear next
                                        to the item's icon.
                                
                                        If an administrator clicks on the folder, they will be taken to the specified location in Organizer.
                                
                                        If the link is to a refiner, the id of the item they click on will be used as the
                                        refinerId.
    
    
                                        This property must be written in your .yaml file.
                                        It can't be changed in PHP.
                                
                                panel:
                                    type: object
                                    description: >
                                        If you set a panel on an item, this will cause a little folder icon to appear next
                                        to the item's icon.
                                
                                        If an administrator clicks on the folder, they will be taken taken into the panel.
                                    #properties: *panel_properties #This will be set in dev_tools.js instead
                    
                    item:
                        type: object
                        description: >
                            This lets you set a few default properties for the items that appear in your panel.
                        properties:
                            css_class:
                                type: string
                                description: >
                                    A CSS class name to use as a default if you omit the <code>css_class</code> property in an
                                    item.
                                    Note: for each item, you must either provide an <code>image</code> or a <code>css_class</code>.
                            tooltip:
                                type: string
                                description: >
                                    Lets you specify a tooltip that applies for every item.
                            
                                    This can contain [[merge_field]]s which match up to the column names, if you want
                                    to have the column values placed in them.
                            link:
                                type: object
                                static: true
                                required:
                                    - path
                                properties: *link_properties
                                description: >
                                    Setting this property will create a link on all of the items in the current panel.
                            
                                    This will cause a little folder icon to appear next each item's icon.
                            
                                    If the admin clicks on the folder, they will be taken to the specified location in Organizer.
                            
                                    If the link is to a refiner, the id of the item they click on will be used as the
                                    refinerId.


                                    This property must be written in your .yaml file.
                                    It can't be changed in PHP.
                            tooltip_when_link_is_active:
                                type: string
                                description: >
                                    A tooltip to display on the link.
                            selection_display_type:
                                enum:
                                    - checkbox
                                    - checkboxes
                                    - radio
                                    - radios
                                    - smart
                                description: >
                                    In panels with "multiple_select" buttons, ths setting allows you to control whether you see
                                    checkboxes or radio buttons next to each item.
                                    
                                    The default option is "smart". If "smart" is selected, checkboxes will be used in full mode,
                                    and radios will be used in select mode.
                                    
                                    Where multiple select mode is available (i.e. in panels with "multiple_select"), this
                                    setting is ignored and you will always see checkboxes.                                    
                                    
                                    This works from version 9.1 onwards.
                    
                    no_items_message:
                        type: string
                        description: >
                            A message to display when there are no items.
                        default: There is nothing to display in this view.
                    no_items_in_search_message:
                        type: string
                        description: >
                            A message to display when there are no items in a search, filter or refiner.
                        default: There is nothing that matches your search.
                    
                    popout_message:
                        type: string
                        description: >
                            If set, this message will be shown in an prompt box whenever an admin
                            navigates to the panel.
                    
                            The message won't trigger a second time if an admin refreshes the panel, or
                            navigates to the panel using the back button.
                    
                            The message will not HTML escaped.
                    
                            You can use all of the features from https://zenar.io/customising-popout-messages-in-admin-mode
                            in order to customise the message.
                    
                            Note: this will clash with the <code>popout_message</code> property for Admin Boxes;
                            you can use one or the other, but not both at the same time.

                    toast:
                        type: object
                        description: >
                            This will cause the panel to display a "toaster" at the top right.
                            
                            The toastr library is used;
                            you can see https://github.com/CodeSeven/toastr for more information.
                        properties:
                            message:
                                type: string
                                description: >
                                    A message for the toast.
                            title:
                                type: string
                                description: >
                                    An optional title for the toast.
                            
                            message_type:
                                enum:
                                    - error
                                    - warning
                                    - info
                                    - success
                                default: info
                                description: >
                                    The type of message. A different styling will be applied for each different type.
                            
                            options:
                                additionalProperties:
                                    type: *variable
                                    description: >
                                        Any additional options to pass to the toastr library.
                    
                    
                    collection_buttons:
                        type: object
                        description: >
                            Collection buttons appear when no items are selected, and are intended to be for actions that apply to the Panel as a whole.
                        
                        additionalProperties:
                            type: object
                            anyOf:
                                -
                                    required:
                                        - ajax
                                -
                                    required:
                                        - admin_box
                                -
                                    required:
                                        - alert
                                -
                                    required:
                                        - navigation_path
                                -
                                    required:
                                        - frontend_link
                                -
                                    required:
                                        - help
                                -
                                    required:
                                        - hide_when_children_are_not_visible
                                -
                                    required:
                                        - link
                                -
                                    required:
                                        - onclick
                                -
                                    required:
                                        - organizer_quick
                                -
                                    required:
                                        - panel
                                -
                                    required:
                                        - pick_items
                                -
                                    required:
                                        - popout
                                -
                                    required:
                                        - upload
                            properties:
                                ord: *ord
                                copy_of: *copy_of
                                css_class: *css_class
                                label:
                                    type: string
                                    description: >
                                        A label for this button
                                tooltip:
                                    type: string
                                    description: >
                                        A tooltip for this button
                                
                                parent:
                                    type: string
                                    description: >
                                        Enter the name of another collection button here to make your button appear
                                        under the named button as a dropdown.
                                        
                                        There's a limit of 2 levels; you can't have a dropdown inside another dropdown.
                                
                                hidden: *hidden
                                visible_if: *visible_if
                                
                                hide_when_children_are_not_visible:
                                    type: boolean
                                    description: >
                                        If you set this property, the button will be hidden when it has no
                                        visible children.
                                
                                disabled:
                                    type: boolean
                                    description: >
                                        If you set this property, the button will be disabled.
                                
                                disabled_if: *disabled_if
                                
                                disabled_tooltip:
                                    type: string
                                    default: (defaults to the tooltip property)
                                    description: >
                                        A tooltip for this button if it is disabled.
                        
                        
                                #Collection Buttons share the following child-properties with Item Buttons
                                hide_in_select_mode: *hide_in_select_mode
                                select_mode_only: *select_mode_only
                                hide_in_quick_mode: *hide_in_quick_mode
                                quick_mode_only: *quick_mode_only
                                only_show_on_refiner: *only_show_on_refiner
                                hide_on_refiner: *hide_on_refiner
                                hide_on_filter: *hide_on_filter
                                
                                
                                #Collection Buttons also use the following property:
                                hide_when_no_search_results:
                                    type: boolean
                                    description: >
                                        Don't show this button if there are no search results.
                                
                                
                                #In addition, a Collection Button should have one (and only one) of the following properties as an action:
                                ajax: &ajax
                                    type: object
                                    description: >
                                        Send an AJAX request to your <code>handleOrganizerPanelAJAX()</code> method.

                                    properties:
                                        confirm:
                                            type: object
                                            description: >
                                                Use this to display a confirmation prompt before performing the AJAX action.
                                            properties:
                                                message:
                                                    type: string
                                                    description: >
                                                        A message for the confirmation prompt.
                                                
                                                        If this is an item or inline button, your message may contain [[merge_field]]s
                                                        which match up to the column names, and will be populated according to the item
                                                        which is selected.
                                                        
                                                        (Note: this won't work if multiple items are selected.)
                                                
                                                        If you don't want a hard-coded warning message, then you can omit the message
                                                        property completely. This will cause Zenario will launch an AJAX call to your
                                                        handleOrganizerPanelAJAX() method (using $_GET rather than $_POST) to look up the text needed.
                                                multiple_select_message:
                                                    type: string
                                                    description: >
                                                        In Organizer, this property allows you to set a different message if multiple items are selected.
                                                        
                                                        You can use the [[item_count]] merge field if you want to display the number of items in your message.
                                                    default: (defaults to the message property)
                                                html: &message_html
                                                    type: boolean
                                                    description: >
                                                        If this is set, the message will not be html-escaped.
                                                button_message:
                                                    type: string
                                                    description: >
                                                        A message for the confirm button
                                                cancel_button_message:
                                                    type: string
                                                    description: >
                                                        A message for the cancel button
                                                message_type:
                                                    enum:
                                                        - none
                                                        - error
                                                        - warning
                                                        - question
                                                        - success
                                                    default: none
                                                    description: >
                                                        The type of message. A different styling will be applied for each different type.
                                                download:
                                                    type: boolean
                                                    description: >
                                                        You can set to offer a file download instead of performing an AJAX request.
                                        request: &request
                                            type: object
                                            additionalProperties:
                                                type: *variable
                                                description: >
                                                    A variable to put in the $_GET or $_POST of the AJAX request.
                                            description: >
                                                You can use the request property to add requests to the AJAX request.
                                        
                                                These will be in the $_GET when seeking confirmation, and in the $_POST
                                                when performing the action.
                                
                                
                                admin_box: &admin_box
                                    type: object
                                    description: >
                                        This lets you open an admin box that you have written in your module,
                                        or call an admin box from a different module.
                                    properties:
                                        path:
                                            description: >
                                                The tag path to the admin box.
                                                
                                                (This will just be one property long, as Admin Boxes all sit at the top-level in their schema.)
                                        key:
                                            type: object
                                            additionalProperties:
                                                type: *variable
                                                description: >
                                                    A variable or meta-information to pass into the key of the Admin Box.
                                            description: >
                                                Any variables set here will be passed on to the key of the Admin Box.
                                        
                                        create_another:
                                            type: boolean
                                            description: >
                                                If you set this property, there will be a "Save and create another" button
                                                shown on the admin box, that will save the admin box then immediately open
                                                a new one (as if this button was pressed a second time).
                                        
                                                This works from version 7.1 onwards.
                                        
                                        tab:
                                            type: *stringy
                                            description: >
                                                The name of a tab to open up in.
                                            default: (the first tab of the Admin Box)
                                        values:
                                            type: object
                                            additionalProperties:
                                                type: object
                                                description: >
                                                    The key of a tab in the Admin Box
                                                additionalProperties:
                                                    type: *variable
                                                    description: >
                                                        The key and initial value of a field in the admin box.
                                            commented_out_html_description: |
                                                <p>You can enter some initial values for the fields in your admin box by passing
                                                in an array of arrays (tabs => (fields => values)).</p>
                                        
                                                <p>These values will override the default values for the fields, but won't
                                                overwritten any values set in PHP in your <code>fillAdminBox()</code> method.</p>
                                
                                onclick: &onclick
                                    type: string
                                    description: >
                                        Some JavaScript code to run when your button is clicked.
                                    
                                        This works from version 7.1 onwards.
                                
                                navigation_path:
                                    type: string
                                    description: >
                                        This property allows you to create a button that takes you to a specified navigation path in Organizer when pressed.
                                
                                        Be aware that this will be a one-way link; as you are entering a navigation path, you will override any existing
                                        navigation history with the history from the navigation path.
                                frontend_link:
                                    type: string
                                    description: >
                                        This property allows you to link to the front end by providing a URL.
                                
                                        You can provide an external URL (which will always open in a new window),
                                        or an internal link relative to Zenario's root directory.
                                new_window: &new_window
                                    type: boolean
                                    description: >
                                        Where a button has a link using the frontend_link or navigation_path properties,
                                        this property will cause it to open in a new window.
                                        
                                        This works from version 8.0 onwards.
                                
                                help: &help
                                    type: object
                                    description: >
                                        This property provides you with a simple way of displaying
                                        a short pop-up message with some help text in.
                                    required:
                                        - message
                                    properties:
                                        message:
                                            type: string
                                            description: >
                                                A help message to display when clicking on this button.
                                        html: *message_html
                                        message_type:
                                            enum:
                                                - none
                                                - error
                                                - warning
                                                - question
                                                - success
                                            default: question
                                            description: >
                                                The type of message. A different styling will be applied for each different type.
                                
                                alert: &alert
                                    type: object
                                    description: >
                                        This property provides you with a simple way of displaying
                                        a short pop-up alert message.
                                        
                                        This works from version 8.8 onwards.
                                    required:
                                        - message
                                    properties:
                                        message:
                                            type: string
                                            description: >
                                                A message to display when clicking on this button.
                                        html: *message_html
                                        message_type:
                                            enum:
                                                - none
                                                - error
                                                - warning
                                                - question
                                                - success
                                            default: warning
                                            description: >
                                                The type of message. A different styling will be applied for each different type.
                                        button_message:
                                            type: string
                                            description: >
                                                A message for the button that dismisses the message.
                                                Defaults to "OK".
                                
                                link:
                                    type: object
                                    static: true
                                    required:
                                        - path
                                    properties: *link_properties
                                    description: >
                                        Determines that then an administrator clicks on a
                                        collection button, they will be taken to a
                                        specified location in Organizer when they click on it.
                                        
                                        
                                        This property must be written in your .yaml file.
                                        It can't be changed in PHP.
                                
                                panel:
                                    type: object
                                    description: >
                                        If you set a panel on a collection button, an administrator will be taken
                                        into the panel when they click on it.
                                    #properties: *panel_properties #This will be set in dev_tools.js instead
                        
                                organizer_quick: &organizer_quick
                                    type: object
                                    description: >
                                        This will display Organizer in Quick mode when clicked.
                                    required:
                                        - path
                                    properties:
                                        path:
                                            type: string
                                            description: >
                                                The path of the panel in Organizer that you wish to show.
                                        
                                                You may enter either a tag path or a navigation path, but if you enter a
                                                navigation path you cannot leave the min_path and target_path properties unset.
                                                
                                                If this is for an item button, you may use the mergefield <code>[[id]]</code> in
                                                your path to substitue in the current item's id.
                                        min_path:
                                            type: string
                                            default: (defaults to the path property)
                                            description: >
                                                You must enter the tag path of a panel to act as a barrier to navigation.
                                        
                                                If the disallow_refiners_looping_on_min_path property is set,
                                                the back button will not be shown on this panel.
                                        
                                                If the disallow_refiners_looping_on_min_path property is not set,
                                                the back button will not be shown on this panel if it were to navigate
                                                away from the panel.
                                                Refiners that "loop", going from and to the same panel over and over again,
                                                will still show the back button.
                                        
                                                If you enter a navigation path it will be converted to a tag path for you.
                                        max_path:
                                            type:
                                                - string
                                                - boolean
                                            default: (defaults to the target_path property)
                                            description: >
                                                Limits how far an administrator can navigate through
                                                a sequence of Organizer panels.
                                        
                                                Once this is reached the administrator will not
                                                be able to navigate away from this
                                                panel, except by clicking the Back button.
                                        
                                                If you enter a navigation path it will be converted to a tag path for you.
                                        
                                                If you don't want to use a limit you can also set this property to false to disable it.
                                        disallow_refiners_looping_on_min_path:
                                            type: boolean
                                            description: >
                                                This modifies the logic for how the min_path property works with refiners.
                                
                        
                                pick_items: &pick_items
                                    type: object
                                    description: >
                                        Shows a "combo box" in which an administrator can easily pick items from
                                        another panel.
                                        
                                        The administrator can either type in the box to search,
                                        or they can click a Select link to view the other panel
                                        in Organizer-select mode.
                                    required:
                                        - path
                                    anyOf:
                                        -
                                            required:
                                                - request
                                        -
                                            required:
                                                - ajax
                                    properties:
                                        path:
                                            type: string
                                            description: >
                                                The path of the panel to show
                                                in Organizer-select mode.
                                        
                                                You may enter either a tag path or a navigation path, but if you enter a
                                                navigation path you cannot leave the min_path and target_path properties unset.
                                        target_path:
                                            type: string
                                            default: (defaults to the path property)
                                            description: >
                                                The tag path of the panel in Organizer where the "Choose" button should be shown.
                                        
                                                If you enter a navigation path it will be converted to a tag path for you.
                                        min_path:
                                            type: string
                                            default: (defaults to the path property)
                                            description: >
                                                You must enter the tag path of a panel to act as a barrier to navigation.
                                        
                                                If the disallow_refiners_looping_on_min_path property is set,
                                                the back button will not be shown on this panel.
                                        
                                                If the disallow_refiners_looping_on_min_path property is not set,
                                                the back button will not be shown on this panel if it were to navigate
                                                away from the panel.
                                                Refiners that "loop", going from and to the same panel over and over again,
                                                will still show the back button.
                                        
                                                If you enter a navigation path it will be converted to a tag path for you.
                                        max_path:
                                            type:
                                                - string
                                                - boolean
                                            default: (defaults to the target_path property)
                                            description: >
                                                You can enter the path of a panel to act as a barrier to navigation.
                                        
                                                This works like a limit; the Admin will not be able to navigate away from this
                                                panel except by pressing the back button.
                                        
                                                If you enter a navigation path it will be converted to a tag path for you.
                                        
                                                If you don't want to use a limit you can also set this property to false to disable it.
                                        disallow_refiners_looping_on_min_path:
                                            type: boolean
                                            description: >
                                                This modifies the logic for how the min_path property works with refiners.
                                
                                        one_to_one_choose_phrase:
                                            type: string
                                            default: Choose
                                            description: >
                                                A phrase for the choose button.
                                
                                        multiple_select:
                                            type: boolean
                                            description: >
                                                Setting this option will allow an Admin to pick multiple values.
                                                They will be stored as comma-separated values.
                                        one_to_many_choose_phrase:
                                            type: string
                                            default: (defaults to the one_to_one_choose_phrase property)
                                            description: >
                                                A phrase for the choose button then multiple items are selected.
                                
                                        allow_no_selection:
                                            type: boolean
                                            description: >
                                                Setting this property will allow an Admin to press the "choose" button without
                                                anything selected.
                                        
                                                You would use this option if you wanted them to select a location or a refiner
                                                in Organizer rather than an item specifically; you can check the variables
                                                set in the POST request to see which refiners were in use and which values they
                                                had.
                                        
                                                A typical example of what you might see in the POST request might be:
                                                    <code>child&#95;&#95;refinerName=language&child&#95;&#95;refinerId=1&child&#95;&#95;refiner&#95;&#95;language=en</code>
                                        one_to_many_choose_phrase:
                                            type: string
                                            default: (defaults to the one_to_one_choose_phrase property)
                                            description: >
                                                A phrase for the choose button if no items are selected in Select Mode and
                                                <code>allow_no_selection</code> is enabled.
                                
                                        request: *request
                                        ajax: *ajax
                                        
                                        visible_if_for_all_selected_items:
                                            type: string
                                            description: >
                                                A snippet of JavaScript code to be evaluated for each selected item
                                                in the panel for picking items.
                                                Each item must match for the button to be shown.
                                                
                                                See https://zenar.io/visibility-in-tuix for examples.
                                        
                                        visible_if_for_any_selected_items:
                                            type: string
                                            description: >
                                                A snippet of JavaScript code to be evaluated for each selected item
                                                in the panel for picking items.
                                                At least one item must match for the button to be shown.
                                                
                                                See https://zenar.io/visibility-in-tuix for examples.
                                        
                                        disabled_if_for_all_selected_items:
                                            type: string
                                            description: >
                                                A snippet of JavaScript code to be evaluated for each selected item
                                                in the panel for picking items.
                                                Items that fail the check will be disabled in the picker.
                                        
                                        disabled_if_for_any_selected_items:
                                            type: string
                                            description: >
                                                A snippet of JavaScript code to be evaluated for each selected item
                                                in the panel for picking items.
                                                Items that fail the check will be disabled in the picker.
                        
                                popout: &popout
                                    type: object
                                    description: >
                                        This property allows you to open a Pop-out window when an Admin clicks on your button.
                                        A typical usage would be to display a bigger version of an image or movie.
                                
                                        This is implemented using the Colorbox library.
                                    required:
                                        - href
                                    properties:
                                        href:
                                            type: string
                                            description: >
                                                A link to a page/image/animation you wish to be shown.
                                        title:
                                            type: string
                                            description: >
                                                Use this property to add a title for the floating box.
                                            #default: (the item's name)
                                
                                        css_class:
                                            type: string
                                            description: >
                                                A CSS class name to place on the floating box.
                                    additionalProperties:
                                        type: *variable
                                        description: >
                                            Any additional properties will be passed on to the Colorbox library.
                                    
                                            You can see http://www.jacklmoore.com/colorbox/ for a description of
                                            what other properties are available.
                                
                                upload: &upload
                                    type: object
                                    description: >
                                        Uploads a file to Zenario.
                            
                                    properties:
                                        accept:
                                            type: string
                                            description: >
                                                The types of file(s) to accept (e.g.
                                                audio/*
                                                video/*
                                                image/*
                                                MIME_type)
                                        extensions:
                                            type:
                                                - object
                                                - array
                                            description: >
                                                Tye types of extension(s) to accept (e.g.
                                                - .jpg
                                                - .jpeg
                                                - .png
                                                - .webp)
                                        multi:
                                            type: boolean
                                            description: >
                                                Whether to allow multiple file-selection, for browsers that support HTML 5.
                                        
                                                (Separate AJAX requests will be run for each file; you do not need to handle this differently.)
                                        drag_and_drop:
                                            type: boolean
                                            description: >
                                                Whether to allow drag-and-drop uploads for browsers that support HTML 5.
                                        
                                                Note: only one button at a time may use a drag-and-drop upload.
                                                
                                                Currently only works for item buttons and collection buttons, and not inline buttons.
                                        request: *request
                                
                                record_count: &record_count
                                    type: *variable
                                    description: >
                                        A record count to show on the button.
                                        For example, if the button is a link to another panel, you might want to show the count of the items
                                        that are on that panel.
                                        
                                        You can enter a number, or for an item button, you can enter the code-name of a column to load the number from.
                                        
                                        This works from version 9.6 onwards.
                        
                                      
                    item_buttons:
                        type: object
                        description: >
                            Item buttons appear when one or more items are selected, and are intended to be for actions that apply to the selected items.
                        additionalProperties:
                            type: object
                            anyOf:
                                -
                                    required:
                                        - ajax
                                -
                                    required:
                                        - admin_box
                                -
                                    required:
                                        - alert
                                -
                                    required:
                                        - navigation_path
                                -
                                    required:
                                        - frontend_link
                                -
                                    required:
                                        - help
                                -
                                    required:
                                        - hide_when_children_are_not_visible
                                -
                                    required:
                                        - link
                                -
                                    required:
                                        - onclick
                                -
                                    required:
                                        - organizer_quick
                                -
                                    required:
                                        - panel
                                -
                                    required:
                                        - combine_items
                                -
                                    required:
                                        - popout
                                -
                                    required:
                                        - upload
                            properties:
                                ord: *ord
                                copy_of: *copy_of
                                css_class: *css_class
                                label:
                                    type: string
                                    description: >
                                        A label for this button
                                        
                                        From version 7.1 you can use merge fields in this label when one item is selected.
                                tooltip:
                                    type: string
                                    description: >
                                        A tooltip for this button
                                        
                                        From version 7.1 you can use merge fields in this tooltip when one item is selected.
                                
                                parent:
                                    type: string
                                    description: >
                                        Enter the name of another item button here to make your button appear
                                        under the named button as a dropdown.
                                        
                                        There's a limit of 2 levels; you can't have a dropdown inside another dropdown.
                                
                                hidden: *hidden
                                visible_if: *visible_if
                                
                                multiple_select:
                                    type: boolean
                                    description: >
                                        This marks that this button is prepared to work on multiple items.
                                multiple_select_max_items:
                                    type: number
                                    description: >
                                        Do not show this button if more than this number of items are selected.
                                
                                        If you use this property you must also use the <code>multiple_select</code> property.
                                multiple_select_min_items:
                                    type: number
                                    description: >
                                        Do not show this button if less than this number of items are selected.
                                
                                        If you use this property you must also use the <code>multiple_select</code> property.
                                        
                                        This works from version 7.5 onwards.
                                multiple_select_only:
                                    type: boolean
                                    description: >
                                        Same as "multiple_select_min_items: 2"
                                multiple_select_label:
                                    type: string
                                    description: >
                                        A label for this button for when more than one item is selected.
                                    default: (defaults to the label property)
                                multiple_select_tooltip:
                                    type: string
                                    description: >
                                        A tooltip to show when more than one item is selected.
                                    default: (defaults to the tooltip property)
                                
                                visible_if_for_all_selected_items:
                                    type: string
                                    description: >
                                        A snippet of JavaScript code to be evaluated for each selected item.
                                        Each item must match for the button to be shown.
                                        
                                        See https://zenar.io/visibility-in-tuix for examples.
                                
                                visible_if_for_any_selected_items:
                                    type: string
                                    description: >
                                        A snippet of JavaScript code to be evaluated for each selected item.
                                        At least one item must match for the button to be shown.
                                        
                                        See https://zenar.io/visibility-in-tuix for examples.
                                with_columns_set:
                                    type: object
                                    additionalProperties:
                                        type: *variable
                                    description: >
                                        Only show this button for items with the listed columns set.
                                without_columns_set:
                                    type: object
                                    additionalProperties:
                                        type: *variable
                                    description: >
                                        Only show this button for items where the listed columns are empty.
                                one_with_columns_set:
                                    type: object
                                    additionalProperties:
                                        type: *variable
                                    description: >
                                        Only show this button if at least one of the selected items has all of the listed columns set.
                                one_without_columns_set:
                                    type: object
                                    additionalProperties:
                                        type: *variable
                                    description: >
                                        Only show this button if at least one of the selected items has empty values in all of the listed columns.
                                
                                hide_when_children_are_not_visible:
                                    type: boolean
                                    description: >
                                        If you set this property, the button will be hidden when it has no
                                        visible children.
                                
                                disabled:
                                    type: boolean
                                    description: >
                                        If you set this property, the button will be disabled.
                                
                                disabled_if: *disabled_if
                                
                                disabled_if_for_all_selected_items:
                                    type: string
                                    description: >
                                        A snippet of JavaScript code to be evaluated for each selected item.
                                        If each item matches, the button will be disabled.
                                
                                disabled_if_for_any_selected_items:
                                    type: string
                                    description: >
                                        A snippet of JavaScript code to be evaluated for each selected item.
                                        If at least one item matches, the button will be disabled.
                                        
                                        See https://zenar.io/visibility-in-tuix for examples.
                                
                                disabled_tooltip:
                                    type: string
                                    default: (defaults to the tooltip property)
                                    description: >
                                        A tooltip to display beside this button if it is disabled.
                                        
                                        This can be handy to explain why a button's action is not
                                        available.
                                                                        
                                #Item Buttons share the following child-properties with Collection Buttons
                                hide_in_select_mode: *hide_in_select_mode
                                quick_mode_only: *quick_mode_only
                                select_mode_only: *select_mode_only
                                hide_in_quick_mode: *hide_in_quick_mode
                                quick_mode_only: *quick_mode_only
                                only_show_on_refiner: *only_show_on_refiner
                                hide_on_refiner: *hide_on_refiner
                                hide_on_filter: *hide_on_filter
                                
                                #In addition, an Item Button should have one (and only one) of the following properties as an action:
                                ajax: *ajax
                                onclick: *onclick
                                organizer_quick: *organizer_quick
                                combine_items: *pick_items
                                admin_box: *admin_box
                        
                                navigation_path:
                                    # Needs a different explanation for item/inline buttons; e.g. it's a boolean that gets its value form the column
                                    type: string
                                    description: >
                                        This property allows you to create a button that takes you to a specified navigation path in Organizer when pressed.
                                
                                        Be aware that this will be a one-way link; as you are entering a navigation path, you will override any existing
                                        navigation history with the history from the navigation path.
                                
                                        If a panel has column named navigation_path, the value of that column will be used
                                        instead of this property.
                                frontend_link:
                                    type:
                                        - boolean
                                        - string
                                    description: >
                                        This property allows you to link to the front end by providing a URL.
                                
                                        You can provide an external URL (which will always open in a new window),
                                        or an internal link relative to Zenario's root directory.
                                
                                        If a panel has column named frontend_link, the value of that column will be used
                                        instead of this property. You should set this property to true in that case.
                                new_window: *new_window
                                
                                help: *help
                                alert: *alert
                                
                                link:
                                    type: object
                                    static: true
                                    required:
                                        - path
                                    properties: *link_properties
                                    description: >
                                        If you set a link on an item or inline button, an administrator will be taken to the
                                        specified location in Organizer when they click on it.
                                
                                        If you specify a refiner, the id of the item selected will be used as the refiner id.
                                        
                                        
                                        This property must be written in your .yaml file.
                                        It can't be changed in php.
                                
                                panel:
                                    type: object
                                    description: >
                                        If you set a panel on an item or inline button, an administrator will be taken
                                        into the panel when they click on it.
                                    #properties: *panel_properties #This will be set in dev_tools.js instead
                        
                                popout: &item_level_popout
                                    type: object
                                    description: >
                                        This property allows you to open a Pop-out window when an Admin clicks on your button.
                                        A typical usage would be to display a bigger version of an image or movie.
                                
                                        This is implemented using the Colorbox library.
                                    properties:
                                        href:
                                            type: string
                                            description: >
                                                A link to a page/image/animation you wish to be shown. If empty, it will be copied
                                                from the item "href" property.
                                        title:
                                            type: string
                                            description: >
                                                Use this property to add a title for the floating box.
                                            #default: (the item's name)
                                
                                        css_class:
                                            type: string
                                            description: >
                                                A CSS class name to place on the floating box.
                                    additionalProperties:
                                        type: *variable
                                        description: >
                                            Any additional properties will be passed on to the Colorbox library.
                                    
                                            You can see http://www.jacklmoore.com/colorbox/ for a description of
                                            what other properties are available.
                                upload: *upload
                                
                                
                                record_count: *record_count
                                
                                
                    inline_buttons:
                        type: object
                        description: >
                            Inline buttons appear next to each item, and are intended to be for actions that apply to the item they are next to.
                        additionalProperties:
                            type: object
                            properties:
                                ord: *ord
                                copy_of: *copy_of
                                css_class: *css_class
                                tooltip:
                                    type: string
                                    description: >
                                        A tooltip for this button.
                                        
                                        You can use merge fields in this tooltip when a
                                        single item is selected.
                                
                                hidden: *hidden
                                visible_if: *visible_if
                                
                                with_columns_set:
                                    type: object
                                    additionalProperties:
                                        type: *variable
                                    description: >
                                        Only show this button for items with the listed columns set.
                                without_columns_set:
                                    type: object
                                    additionalProperties:
                                        type: *variable
                                    description: >
                                        Only show this button for items where the listed columns are empty.
                                
                                disabled:
                                    type: boolean
                                    description: >
                                        If you set this property, the button will be disabled.
                                
                                disabled_if: *disabled_if
                                
                                disabled_tooltip:
                                    type: string
                                    default: (defaults to the tooltip property)
                                    description: >
                                        A tooltip for this button if it is disabled.
                                        
                                        You can use merge fields in this tooltip when a
                                        single item is selected.
                                
                                #Item Buttons share the following child-properties with Collection Buttons
                                hide_in_select_mode: *hide_in_select_mode
                                select_mode_only: *select_mode_only
                                hide_in_quick_mode: *hide_in_quick_mode
                                quick_mode_only: *quick_mode_only
                                only_show_on_refiner: *only_show_on_refiner
                                hide_on_refiner: *hide_on_refiner
                                hide_on_filter: *hide_on_filter
                                
                                #In addition, an Item Button should have one (and only one) of the following properties as an action:
                                ajax: *ajax
                                onclick: *onclick
                                organizer_quick: *organizer_quick
                                admin_box: *admin_box
                        
                                navigation_path:
                                    # Needs a different explanation for item/inline buttons; e.g. it's a boolean that gets its value form the column
                                    type: string
                                    description: >
                                        This property allows you to create a button that takes you to a specified navigation path in Organizer when pressed.
                                
                                        Be aware that this will be a one-way link; as you are entering a navigation path, you will override any existing
                                        navigation history with the history from the navigation path.
                                
                                        If a panel has column named navigation_path, the value of that column will be used
                                        instead of this property.
                                frontend_link:
                                    type:
                                        - boolean
                                        - string
                                    description: >
                                        This property allows you to link to the front end by providing a URL.
                                
                                        You can provide an external URL (which will always open in a new window),
                                        or an internal link relative to Zenario's root directory.
                                
                                        If a panel has column named frontend_link, the value of that column will be used
                                        instead of this property. You should set this property to true in that case.
                                new_window: *new_window
                                
                                help: *help
                                alert: *alert
                                
                                link:
                                    type: object
                                    static: true
                                    required:
                                        - path
                                    properties: *link_properties
                                    description: >
                                        If you set a link on an item or inline button, an administrator will be taken to the
                                        specified location in Organizer when they click on it.
                                
                                        If you specify a refiner, the id of the item selected will be used as the refiner id.
                                        
                                        
                                        This property must be written in your .yaml file.
                                        It can't be changed in php.
                                
                                popout: *item_level_popout

                                label:
                                    type: string
                                    description: >
                                        If set, the value will appear as a label of the button.
                    
                    hidden_nav:
                        type: object
                        description: >
                            Hidden navigation is effectively a button that is always hidden.
                        additionalProperties:
                            type: object
                            anyOf:
                                -
                                    required:
                                        - link
                                -
                                    required:
                                        - panel
                            properties:
                                
                                link:
                                    type: object
                                    static: true
                                    required:
                                        - path
                                    properties: *link_properties
                                
                                panel:
                                    type: object
                                    #properties: *panel_properties #This will be set in dev_tools.js instead
                    
                    
                    reorder:
                        type: object
                        properties:
                            column:
                                type: string
                                static: true
                                description: >
                                    The codename/property name of a column from <code>columns</code> that defines the ordinal.


                                    This property must be written in your .yaml file.
                                    It can't be changed in php.
                        
                        description: >
                            Setting this object enables reordering in the list, hierarchy and hierarchy_with_lazy_load
                            panel types.
                    
                    hierarchy:
                        type: object
                        properties:
                            column:
                                type: string
                                static: true
                                description: >
                                    The codename/property name of a column from <code>columns</code> that defines
                                    the parent_id.
                                    
                                    Defaults to "parent_id" if not set.


                                    This property must be written in your .yaml file.
                                    It can't be changed in PHP.
                            
                            #Note: This used to be reorder.hierarchy_column
                            db_column:
                                type: string
                                static: true
                                preFillOrganizerPanel: true
                                description: >
                                    A column in the database (or a SQL expression) that should specify the parent id.
                                    If it is zero or empty then an item will be a top-level item.
                                    
                                    You do not need to provide this property if you plan to populate the items in
                                    PHP rather than MySQL.
                                    
                                    If you've already defined the SQL under db_items then you don't have to repeat it
                                    here and can ommit this property.


                                    This property must be written in your .yaml file.
                                    It can't be changed in PHP.
                            
                            #Note: This used to be reorder.hierarchy_depth
                            max_depth:
                                type: number
                                default: 99
                                description: >
                                    The maximum depth to use in hierachy mode.
                            
                            start_with_all_items_open:
                                type: boolean
                                description: >
                                    If set, when an Organizer panel first loads, all items
                                    will be open.
                                    
                                    Does not work if lazy load is enabled.
                            
                            send_full_hierarchy_onchange:
                                type: boolean
                                description: >
                                    If an admin makes a change, normally only the changed ordinals are sent.
                                    
                                    If you enable this option, every ordinal will be sent.
                            
                            disable_dragging_top_level:
                                type: boolean
                                description: >
                                    This hides the drag-handles from the top level.
                            
                            disable_dragging_children:
                                type: boolean
                                description: >
                                    This hides the drag-handles from any child items - i.e. you may only drag top level items.
                        
                        description: >
                            This object lets you define a few options that are used the hierarchy panel type,
                            and with the hierarchy_with_lazy_load panel type.
                    
                    key:
                        description: >
                            This lets you set variables/meta-information about this panel.
                        type: object
                        additionalProperties:
                            type: *variable
                            description: >
                                A variable or meta-information that you define about this Panel.
                        description: >
                            The key of an Organizer panel lets you store meta-information and variables.
                            
                            If you have any AJAX buttons on this panel, these variables will be available in the request.
                            
                            If you open any admin boxes from this panel, these variables will be
                            passed on to the key of the admin box.
                    
                    force_view_mode:
                        enum:
                            - grid
                            - list
                        description: >
                            You can set this property to overwrite an administrator's saved preference on a temporary basis
                            and force them into a specific view mode.
                            
                            Note: if they change their view options whilst using your chosen view mode
                            then it will be set in their preferences; otherwise their view will snap back
                            to its previous value when this property is removed.
                    
                    label_format_for_grid_view:
                        type: string
                        description: >
                            Allows you to format your label, using the [[column_name]] syntax to reference
                            other columns.
                            
                            Defaults to "[[name]]", where "name" is the value you choose for your default_sort_column
                            above.
                        default: (defaults to the default_sort_column property)
                    label_format_for_picked_items:
                        type: string
                        description: >
                            This allows you to set a different label format for when an item is picked in
                            a Organizer Picker.
                        default: (defaults to the label_format_for_grid_view property)
                    label_format_for_popouts:
                        type: string
                        description: >
                            This allows you to set a different label format for when an item is displayed
                            in a floating "pop out" box.
                    bold_columns_in_list_view:
                        type: string
                        description: >
                            This allows you to set which columns appear in bold in list view.
                            You can pass the code-name of a column, or multiple code-names each
                            surrounded by double-square-brackets like in the "label_format" fields.
                        default: (defaults to the label_format_for_picked_items property)
                    
                    trash:
                        description: >
                            This creates a clickable "Trash can" icon at the bottom right of the panel in full mode.
                        
                        type: object
                        commented_out_description: >
                            This property provides a Trash can icon at the bottom right of the current Panel.
                            This can be clicked and navigated into just like a button.
                            
                            The Trash icon will not be visible in Select Mode.
                        anyOf:
                            -
                                required:
                                    - link
                            -
                                required:
                                    - panel
                        properties:
                            empty:
                                type: boolean
                                description: >
                                    Is the trash empty?
                            empty_css_class:
                                type: string
                                description: >
                                    A CSS class for the trash, when the <code>empty</code> property is set.
                                default: trash_button_empty
                            full_css_class:
                                type: string
                                description: >
                                    A CSS class for the trash, when the <code>empty</code> property is not set.
                                default: trash_button_full
                            empty_tooltip:
                                type: string
                                description: >
                                    A tooltip to show for the trash, when the <code>empty</code> property is set.
                                default: View Trash
                            full_tooltip:
                                type: string
                                description: >
                                    A tooltip to show for the trash, when the <code>empty</code> property is not set.
                                default: View Trash
                            
                            link:
                                type: object
                                static: true
                                required:
                                    - path
                                properties: *link_properties
                                description: >
                                    If you set a link on the trash can, an administrator will be taken to the
                                    specified location in Organizer when they click on it.
                            
                                    You would normally link to a refiner; e.g. a refiner that shows trashed/archived items.


                                    This property must be written in your .yaml file.
                                    It can't be changed in php.
                            
                            panel:
                                type: object
                                description: >
                                    If you set a panel on the trash can, an administrator will be taken
                                    into the panel when they click on it.
                                #properties: *panel_properties #This will be set in dev_tools.js instead
                    
                    xml:
                        type: object
                        properties:
                            outer_tag:
                                type: string
                                description: >
                                    The name of the wrapping outer property in XML.
                                default: Organizer
                            outer_tag_attributes:
                                type: object
                                description: >
                                    You can use this object to set attributes on the outer XML property.
                                additionalProperties:
                                    type: string
                                    description: >
                                        An attribute to be added to the outer XML property.
                            only_show_items_tag:
                                type: boolean
                                description: >
                                    If this is set, only the <code>items</code> of the panel will be outputted.
                            
                            allow_unauthenticated_xml_access:
                                type: boolean
                                static: true
                                description: >
                                    Setting this property allows data for a panel to be shown in XML form without
                                    checking to see if an Admin is logged in.


                                    This property must be written in your .yaml file.
                                    It can't be changed in php.
                        
                        description: |
                            Forces Organizer to output data in XML format, rather than in JSON format.
                        
                            This is deprecated functionality.
                    
                    allow_bypass:
                        type: boolean
                        description: >
                            If there is only one item in this panel, and the item has a double click link,
                            the client will skip this panel and go straight into the item.
                    return_if_empty:
                        type: boolean
                        description: >
                            If this property is set on a Panel, and the Panel is empty, an Admin will
                            automatically be returned to the previous panel.
                    no_return:
                        type: boolean
                        description: >
                            If this property is set on a Panel, when an Admin navigates using a link on said
                            Panel, (e.g. by double clicking on an item or by clicking on a toolbar button
                            with a link), they will not be able to return to the Panel by clicking
                            Organizer's back button.
                    
                            Note: this property does not disable the Browser's back button, nor does it stop
                            an Admin navigating by typing a path into the URL bar.
                    disable_periodic_refresh:
                        type: boolean
                        description: >
                            Allows you to disable the client automatic refreshing the panel.
                    
                            (The panel can still be refreshed manually by the admin using it.)
                    
                    back_link:
                        type: string
                        static: true
                        description: >
                            The tag-path that the Admin will be taken to if they click on the back-link.
                            If this property has an empty value then the back-button will not be shown.
                            
                            If this property is omitted then Zenario will try to work the correct path out
                            logically, so you normally don't need to set this property unless you wish to
                            overwrite the default behaviour.
                            
                            If the Admin arrives at a panel through a <code>link</code> with the <code>branch</code> property set,
                            the <code>back_link</code> will be ignored and they will be taken to their previous
                            location instead.
                            
                            This must be a tag-path; you may not enter a navigation path.


                            This property must be written in your .yaml file.
                            It can't be changed in php.
                        default: (intelligent default)
                    
                    wip_content_links:
                        type:
                            - array
                        description: >
                            An array of links to display. May include, for example, the home page or the last page visited.
                            
                            Each element should contain the type, title (which will be displayed as a label for the content link)
                            and href parameter.
                    
                    enabled_content_types:
                        type:
                            - array
                            - object
                        description: >
                            An array of all enabled content types on the site.
                            
                            It is auto-populated. Each element contains the content type, the label (singular and plural),
                            the default layout ID for that content type and a count of published content items.
                    
                #This will be merged with the properties property above in dev_tools.js
                merge:
                    collection_buttons:
                        additionalProperties:
                            properties:
                                ajax:
                                    properties:
                                        pass_matched_ids:
                                            type: boolean
                                            description: >
                                                This will put the id of each item in the current panel
                                                into your $ids variable.
                                                
                                                Items will be included even if they are not on the current page.
                                                
                                                Items will not be included if they do not match a filter/refiner/search
                                                on the current panel.
                                        
                                admin_box:
                                    properties:
                                        pass_matched_ids:
                                            type: boolean
                                            description: >
                                                This will put the id of each item in the current panel
                                                into your $box['key']['id'] variable.
                                                
                                                Items will be included even if they are not on the current page.
                                                
                                                Items will not be included if they do not match a filter/refiner/search
                                                on the current panel.
                    item_buttons:
                        additionalProperties:
                            properties:
                                combine_items:
                                    description: >
                                        A combine items button will display Organizer in select mode when clicked,
                                        and will let an Admin pick items from a panel.
                                
                                        For example, Admins can be viewing a list of Users, select a User, and then use a combine
                                        items button to make that user the child of a different User that they then select.
                                
                                        An AJAX request will be sent to the server after the admin picks something. You need to
                                        provide either the request or the ajax property, but not both.
                                    properties:
                                        many_to_one_choose_phrase:
                                            type: string
                                            description: >
                                                A phrase for the choose button if multiple items were selected initially.
                                            default: (defaults to the one_to_one_choose_phrase property)
                                        many_to_many_choose_phrase:
                                            type: string
                                            description: >
                                                A phrase for the choose button if multiple items were selected initially, and
                                                if multiple items are selected in Select Mode.
                                            default: (defaults to the many_to_one_choose_phrase property)
                                        many_to_one_choose_phrase:
                                            type: string
                                            description: >
                                                A phrase for the choose button if multiple items were selected initially, the
                                                <code>allow_no_selection</code> property is set, and if no items are selected in Select Mode.
                                            default: (defaults to the one_to_no_selection_choose_phrase property)
                                organizer_quick:
                                    properties:
                                        path:
                                            type: string
                                            description: >
                                                The path of the panel in Organizer that you wish to show.
                                        
                                                You may enter either a tag path or a navigation path, but if you enter a
                                                navigation path you cannot leave the min_path and target_path properties unset.
                                                
                                                If you need to use the id of the currently selected item in the path,
                                                you may use [[id]] to merge it in.
                                popout:
                                    type: object
                                    description: >
                                        This property allows you to open a Pop-out window when an Admin clicks on your button.
                                        A typical usage would be to display a bigger version of an image or movie.
                                
                                        This is implemented using the Colorbox library.
                            
                                        If a panel has column(s) called id, filename or checksum,
                                        the values of these columns for the currently selected item will
                                        be added onto the end of the URL specified in the <code>href</code> property as requests.
                    inline_buttons:
                        additionalProperties:
                            properties:
                                organizer_quick:
                                    properties:
                                        path:
                                            type: string
                                            description: >
                                                The path of the panel in Organizer that you wish to show.
                                        
                                                You may enter either a tag path or a navigation path, but if you enter a
                                                navigation path you cannot leave the min_path and target_path properties unset.
                                                
                                                If you need to use the id of the currently selected item in the path,
                                                you may use [[id]] to merge it in.
                                popout:
                                    type: object
                                    description: >
                                        This property allows you to open a Pop-out window when an Admin clicks on your button.
                                        A typical usage would be to display a bigger version of an image or movie.
                                
                                        This is implemented using the Colorbox library.
                            
                                        If a panel has column(s) called id, filename or checksum,
                                        the values of these columns for the currently selected item will
                                        be added onto the end of the URL specified in the <code>href</code> property as requests.
                    
                    
                    
                    hide_filter_warning:
                        type: boolean
                        description: >
                            Set this property to disable the "Item saved, but your filter prevents it from appearing" message
                            from appearing.
                            
                    _cms_page:
                        type: number
                        description: >
                            If pagination is being applied on the server, Zenario will put the current page number
                            into this variable.
                            
                            This might be different than the page you asked for, e.g. if you ask for page three but
                            there are only two pages.
                            
                    _cms_itemCount:
                        type: number
                        description: >
                            Zenario will put the count of the total number of items into this variable.
                            
                            This includes searches, filters and refiners, but does not include pagination
                            or the max_limit. I.e. it's a count of all of the *matched* rows.
                            
                    __item_parents__:
                        type: object
                        additionalProperties:
                            type: boolean
                        description: >
                            In hierarchy view, if lazy loading is enabled, Zenario will put an associative
                            array of which items do and do not have children into this variable.
                            
                    _cms_itemSortOrder:
                        type:
                            - array
                            - object
                        additionalProperties:
                            type: *stringy
                        description: >
                            If sorting is being done on the server, Zenario will put an array of ids
                            (sorted into the correct order) into this variable.
        
        
        data-intro:
            type: string
            description: >
                A HTML description to display when showing in the help tour.
        data-step:
            type: number
            description: >
                This controls the order in which this element will appear in the help tour.
                
                All of the step-numbers will be normalised before being displayed, so the number
                you see in the help tour may not be the exact number you enter here.
        data-position:
            type: string
            description: >
                The position (relative to the current element) to show the help tour.
                
                We recommend that you set this to "right".
        
        
        youtube_video_id:
            type: string
            description: >
                A youtube video URL about this panel. This will be showing in the help tour.
        youtube_thumbnail_title:
            type: string
            description: >
                The title of the youtube video thumbnail in the help tour.
                            



properties:
    top_right_buttons:
        type: object
        description: >
            These buttons appear at the top right of Organizer
        
        additionalProperties:
            type: object
            anyOf:
                -
                    required:
                        - admin_box
                -
                    required:
                        - alert
                -
                    required:
                        - navigation_path
                -
                    required:
                        - frontend_link
                -
                    required:
                        - help
                -
                    required:
                        - hide_when_children_are_not_visible
                -
                    required:
                        - link
                -
                    required:
                        - onclick
                -
                    required:
                        - popout
            properties:
                ord: *ord
                copy_of: *copy_of
                css_class: *css_class
                label:
                    type: string
                    description: >
                        A label for this button
                tooltip:
                    type: string
                    description: >
                        A tooltip for this button
                
                parent:
                    type: string
                    description: >
                        Enter the name of another collection button here to make your button appear
                        under the named button as a dropdown.
                        
                        There's a limit of 2 levels; you can't have a dropdown inside another dropdown.
                
                hidden: *hidden
                visible_if: *visible_if
                
                hide_when_children_are_not_visible:
                    type: boolean
                    description: >
                        If you set this property, the button will be hidden when it has no
                        visible children.
                
                disabled:
                    type: boolean
                    description: >
                        If you set this property, the button will be disabled.
                
                disabled_if: *disabled_if
                
                disabled_tooltip:
                    type: string
                    default: (defaults to the tooltip property)
                    description: >
                        A tooltip for this button if it is disabled.
                
                admin_box: *admin_box
                onclick: *onclick
                
                navigation_path:
                    type: string
                    description: >
                        This property allows you to create a button that takes you to a specified navigation path in Organizer when pressed.
                
                        Be aware that this will be a one-way link; as you are entering a navigation path, you will override any existing
                        navigation history with the history from the navigation path.
                frontend_link:
                    type: string
                    description: >
                        This property allows you to link to the front end by providing a URL.
                
                        You can provide an external URL (which will always open in a new window),
                        or an internal link relative to Zenario's root directory.
                
                help: *help
                alert: *alert
                
                link:
                    type: object
                    static: true
                    required:
                        - path
                    properties: *link_properties
                    description: >
                        If you set a link, an administrator will be taken to the
                        specified location in Organizer when they click on it.
                        
                        
                        This property must be written in your .yaml file.
                        It can't be changed in php.
        
                popout: *popout
                
                
                data-intro:
                    type: string
                    description: >
                        A HTML description to display when showing in the help tour.
                data-step:
                    type: number
                    description: >
                        This controls the order in which this element will appear in the help tour.
                
                        All of the step-numbers will be normalised before being displayed, so the number
                        you see in the help tour may not be the exact number you enter here.
                data-position:
                    type: string
                    description: >
                        The position (relative to the current element) to show the help tour.
                
                        We recommend that you set this to "right".
                            
            

    
    
    
commented_out_html_description: |
    <p>Organizer is built on static YAML files, written in the Tribal User Interface Language (TUIX), which describe and give structure to its navigable sections and panels of data.</p>
    <p>Zenario modules are written in the same language and using the same schema as Organizer.</p>
    <p>For a module to add functionality to Organizer, it must contain one or more YAML files in its&nbsp;<code>tuix/organizer&nbsp;</code>subdirectory.
        (There is no need to have multiple files, but if a module has multiple sections we recommend that it has one file per section.)</p>
    <p>The YAML files serve as a map or plan of what functionality a module adds to Organizer, and where.</p>
    <p>For example, a YAML property may define the buttons which are added to Organizer, or the top level links that appear at the left hand-side.</p>
    <p>The flow of the schema is as follows: YAML files are read by Zenario on the server and turned into a PHP array, which then passes them to the client as JSON. The client does not pass the JSON object back, but instead replies using <code>GET</code> or&nbsp;<code>POST</code> AJAX requests.</p>
    <h2>The top level items</h2>
    <p>The first things in the Organizer schema are the top level items. These add links to the left-hand panel in Organizer.</p>
    <p>Note: if you wish to include functionality in Organizer you must either create a top level item to contain it, or to place your functionality within another module's top level item.</p>

