{#-
       Licensed to the Apache Software Foundation (ASF) under one
       or more contributor license agreements.  See the NOTICE file
       distributed with this work for additional information
       regarding copyright ownership.  The ASF licenses this file
       to you under the Apache License, Version 2.0 (the
       "License"); you may not use this file except in compliance
       with the License.  You may obtain a copy of the License at

         http://www.apache.org/licenses/LICENSE-2.0

       Unless required by applicable law or agreed to in writing,
       software distributed under the License is distributed on an
       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
       KIND, either express or implied.  See the License for the
       specific language governing permissions and limitations
       under the License.
-#}
<!-- post_thread -->
<li>
{{widget.parent_widget.widgets.post.display(
    value=value, show_subject=show_subject, indent=indent,
    page=page, limit=limit, primary_artifact=primary_artifact)}}
    <!-- post_thread replies -->
    <ul>
      {%- if children %}
      {%- for child in children %}
      {{widget.display(value=child.post, children=child.children, indent=indent+1, primary_artifact=primary_artifact)}}
      {%- endfor %}
      {%- endif %}
    </ul>
    <!-- post_thread /replies -->
</li>
<!-- /post_thread -->
