<metal:queryResults define-macro="queryResult"
   tal:define="_            python: tool.translate;
               className    request/className;
               refInfo      tool/getRefInfo;
               refObject    python: refInfo[0];
               refField     python: refInfo[1];
               refUrlPart   python: refObject and ('&ref=%s:%s' % (refObject.UID(), refField))  or '';
               startNumber  request/startNumber|python:'0';
               startNumber  python: int(startNumber);
               searchName   request/search;
               labelId      python: searchName and ('%s_search_%s' % (className, searchName)) or '';
               labelId      python: (searchName == '_advanced') and 'search_results' or labelId;
               searchLabel  python: labelId and _(labelId) or '';
               severalTypes python: className and (className.find(',') != -1);
               sortKey      request/sortKey| python:'';
               sortOrder    request/sortOrder| python:'asc';
               filterKey    request/filterKey| python:'';
               filterValue  request/filterValue | python:'';
               queryResult  python: tool.executeQuery(className, searchName, startNumber, remember=True, sortBy=sortKey, sortOrder=sortOrder, filterKey=filterKey, filterValue=filterValue, refObject=refObject, refField=refField);
               objs         queryResult/objects;
               totalNumber  queryResult/totalNumber;
               batchSize    queryResult/batchSize;
               ajaxHookId   python:'queryResult';
               navBaseCall  python: 'askQueryResult(\'%s\',\'%s\',\'%s\',\'%s\',**v**)' % (ajaxHookId, tool.absolute_url(), className, searchName);
               newSearchUrl python: '%s/ui/search?className=%s%s' % (tool.absolute_url(), className, refUrlPart)">

 <tal:result condition="objs">

  <tal:comment replace="nothing">Display here POD templates if required.</tal:comment>
  <table tal:define="widgets python: tool.getResultPodFields(className);
                     layoutType python:'view'"
         tal:condition="python: objs and widgets"
         tal:attributes="align dright">
   <tr>
    <td tal:define="contextObj python: objs[0]" tal:repeat="widget widgets">
       <metal:pod use-macro="context/ui/widgets/show/macros/field"/>&nbsp;&nbsp;&nbsp;
    </td>
   </tr>
  </table>

  <tal:comment replace="nothing">The title of the search.</tal:comment>
  <p>
   <span tal:replace="structure python: test(searchName, searchLabel, test(severalTypes, _(tool.getAppName()), _('%s_plural' % className)))"/>
    (<span tal:replace="totalNumber"/>)
      <tal:newSearch condition="python: searchName == '_advanced'">
        &nbsp;&mdash;&nbsp;<i><a tal:attributes="href newSearchUrl"
        tal:content="python: _('search_new')"></a></i>
      </tal:newSearch>
  </p>
  <table width="100%">
   <tr>
    <tal:descr condition="searchName">
    <td tal:define="descr python: _('%s_descr' % labelId)"
        tal:condition="descr/strip">
     <span class="discreet" tal:content="descr"></span><br/>
    </td>
    </tal:descr>
    <td tal:attributes="align dright" width="25%">
     <tal:comment replace="nothing">Appy (top) navigation</tal:comment>
     <metal:nav use-macro="context/ui/navigate/macros/appyNavigate"/>
    </td>
   </tr>
  </table>

  <table tal:define="fieldNames python: tool.getResultColumnsNames(className, refInfo);
                       widgets python: objs[0].getAppyTypesFromNames(fieldNames);"
           class="list" width="100%">
    <tal:comment replace="nothing">Headers, with filters and sort arrows</tal:comment>
    <tr>
      <tal:header repeat="widget widgets">
       <th tal:define="sortable   python: tool.isSortable(widget['name'], className, 'search');
                       filterable widget/filterable|nothing;">
        <span tal:replace="structure python: tool.truncateText(_(widget['labelId']))"/>
        <metal:icons use-macro="context/ui/navigate/macros/sortAndFilter"/>
       </th>
      </tal:header>
      <tal:comment replace="nothing">Object type, shown if instances of several types are shown</tal:comment>
      <th tal:condition="severalTypes">
        <span tal:replace="python: _('root_type')"></span>
      </th>
      <tal:comment replace="nothing">Actions</tal:comment>
      <th tal:content="python: _('ref_actions')"></th>
    </tr>

    <tal:comment replace="nothing">Results</tal:comment>
    <tal:row repeat="obj objs">
    <tr id="query_row" tal:define="odd repeat/obj/odd"
        tal:attributes="class python:test(odd, 'even', 'odd')">

      <tal:fields repeat="widget widgets">
      <tal:comment replace="nothing">Title</tal:comment>
      <td id="field_title"
          tal:condition="python: widget['name'] == 'title'">
        <a tal:define="navInfo python:'search.%s.%s.%d.%d' % (className, searchName, repeat['obj'].number()+startNumber, totalNumber);"
           tal:content="obj/Title" tal:attributes="href python: obj.getUrl(nav=navInfo, page=obj.getDefaultViewPage())"></a>
      </td>

      <tal:comment replace="nothing">Workflow state</tal:comment>
      <td id="field_workflow_state"
          tal:condition="python: widget['name'] == 'state'"
          tal:content="python: _(obj.getWorkflowLabel())">
      </td>

      <tal:comment replace="nothing">Any other field</tal:comment>
      <td tal:condition="python: widget['name'] not in ('title', 'state')"
          tal:attributes="id python:'field_%s' % widget['name']">
        <tal:field define="contextObj python:obj;
                           layoutType python:'cell';
                           innerRef python:True"
                   condition="python: contextObj.showField(widget['name'], 'result')">
           <metal:field use-macro="context/ui/widgets/show/macros/field"/>
         </tal:field>
      </td>
      </tal:fields>

      <tal:comment replace="nothing">Column "Object type", shown if instances of several types are shown</tal:comment>
      <td tal:condition="severalTypes" id="field_root_type"
          tal:content="python: _(obj.portal_type)"></td>

      <tal:comment replace="nothing">Column "Actions"</tal:comment>
      <td tal:attributes="align dright">
        <table class="noStyle" tal:condition="obj/mayAct">
          <tr>
            <tal:comment replace="nothing">Edit the element</tal:comment>
            <td>
              <a tal:define="navInfo python:'search.%s.%s.%d.%d' % (className, searchName, repeat['obj'].number()+startNumber, totalNumber);"
                 tal:attributes="href python: obj.getUrl(mode='edit', page=obj.getDefaultEditPage(), nav=navInfo)"
                 tal:condition="obj/mayEdit">
                <img tal:attributes="src string: $appUrl/ui/edit.gif;
                                     title python: _('object_edit')"/>
            </a></td>
            <tal:comment replace="nothing">Delete the element</tal:comment>
            <td>
              <img tal:condition="obj/mayDelete" style="cursor:pointer"
                   tal:attributes="src string: $appUrl/ui/delete.png;
                                   title python: _('object_delete');
                                   onClick python:'onDeleteObject(\'%s\')' % obj.UID()"/>
            </td>
          </tr>
        </table>
      </td>
    </tr>
    </tal:row>
  </table>

  <tal:comment replace="nothing">Appy (bottom) navigation</tal:comment>
  <metal:nav use-macro="here/ui/navigate/macros/appyNavigate"/>
  </tal:result>

  <tal:noResult condition="not: objs">
    <span tal:replace="python: _('query_no_result')"/>
    <tal:newSearch condition="python: searchName == '_advanced'">
        <br/><i class="discreet"><a tal:attributes="href newSearchUrl"
        tal:content="python: _('search_new')"></a></i>
      </tal:newSearch>
  </tal:noResult>
</metal:queryResults>
