162 lines
8.5 KiB
XML
162 lines
8.5 KiB
XML
<tal:comment replace="nothing">Macro for displaying a search</tal:comment>
|
|
<div metal:define-macro="search" class="portletSearch">
|
|
<a tal:attributes="href python: '%s?className=%s&search=%s' % (queryUrl, rootClass, search['name']);
|
|
title search/translatedDescr;
|
|
class python: test(search['name'] == currentSearch, 'portletCurrent', '');"
|
|
tal:content="search/translated">
|
|
</a>
|
|
</div>
|
|
|
|
<tal:comment replace="nothing">Macro for displaying a group of searches</tal:comment>
|
|
<metal:group define-macro="group"
|
|
tal:define="expanded python: request.get(widget['labelId'], 'collapsed') == 'expanded'">
|
|
<tal:comment replace="nothing">Group name</tal:comment>
|
|
<div class="portletGroup">
|
|
<img style="cursor:pointer; margin-right: 3px"
|
|
tal:attributes="id python: '%s_img' % widget['labelId'];
|
|
src python:test(expanded, 'ui/collapse.gif', 'ui/expand.gif');
|
|
onClick python:'toggleCookie(\'%s\')' % widget['labelId'];
|
|
align dleft"/>
|
|
<span tal:condition="not: widget/translated" tal:replace="python: _(widget['labelId'])"/>
|
|
<span tal:condition="widget/translated" tal:replace="widget/translated"/>
|
|
</div>
|
|
<tal:comment replace="nothing">Group content</tal:comment>
|
|
<div tal:define="display python:test(expanded, 'display:block', 'display:none')"
|
|
tal:attributes="id widget/labelId;
|
|
style python: 'padding-left: 10px;; %s' % display">
|
|
<tal:searchRows repeat="searches widget/widgets">
|
|
<tal:searchElem repeat="searchElem searches">
|
|
<tal:comment replace="nothing">An inner group within this group</tal:comment>
|
|
<tal:group condition="python: searchElem['type'] == 'group'">
|
|
<tal:g define="widget searchElem">
|
|
<metal:s use-macro="app/ui/portlet/macros/group"/>
|
|
</tal:g>
|
|
</tal:group>
|
|
<tal:search condition="python: searchElem['type'] != 'group'">
|
|
<tal:s define="search searchElem">
|
|
<metal:s use-macro="app/ui/portlet/macros/search"/>
|
|
</tal:s>
|
|
</tal:search>
|
|
</tal:searchElem>
|
|
</tal:searchRows>
|
|
</div>
|
|
</metal:group>
|
|
|
|
<tal:comment replace="nothing">Macro displaying the whole portlet</tal:comment>
|
|
<metal:portlet define-macro="portlet"
|
|
tal:define="queryUrl python: '%s/ui/query' % tool.absolute_url();
|
|
toolUrl tool/absolute_url;
|
|
app tool/getApp;
|
|
appUrl app/absolute_url;
|
|
currentSearch req/search|nothing;
|
|
currentClass req/className|nothing;
|
|
rootClasses tool/getRootClasses;
|
|
phases python: contextObj and contextObj.getAppyPhases() or None">
|
|
|
|
<tal:phases condition="python: contextObj and phases and contextObj.mayNavigate()">
|
|
<metal:phases use-macro="app/ui/portlet/macros/phases"/>
|
|
</tal:phases>
|
|
|
|
<tal:comment replace="nothing">One section for every searchable root class.</tal:comment>
|
|
<tal:section repeat="rootClass python: [rc for rc in rootClasses if tool.userMaySearch(rc)]">
|
|
|
|
<tal:comment replace="nothing">A separator if required</tal:comment>
|
|
<div class="portletSep" tal:define="nb repeat/rootClass/number"
|
|
tal:condition="python: (nb != 1) or ((nb == 1) and phases)"></div>
|
|
|
|
<div class="portletContent" tal:define="searchInfo python: tool.getGroupedSearches(rootClass)">
|
|
<tal:comment replace="nothing">Section title (link triggers the default search), with action icons</tal:comment>
|
|
<a tal:define="queryParam python: searchInfo['default'] and searchInfo['default']['name'] or ''"
|
|
tal:attributes="href python: '%s?className=%s&search=%s' % (queryUrl, rootClass, queryParam);
|
|
class python:test(not currentSearch and (currentClass==rootClass), 'portletCurrent', '')"
|
|
tal:content="structure python: _(rootClass + '_plural')">
|
|
</a>
|
|
<span tal:define="addPermission python: '%s: Add %s' % (appName, rootClass);
|
|
userMayAdd python: user.has_permission(addPermission, appFolder);
|
|
createMeans python: tool.getCreateMeans(rootClass)">
|
|
<tal:comment replace="nothing">Create a new object from a web form</tal:comment>
|
|
<a tal:condition="python: ('form' in createMeans) and userMayAdd"
|
|
tal:attributes="href python: '%s/do?action=Create&className=%s' % (toolUrl, rootClass);
|
|
title python: _('query_create')">
|
|
<img tal:attributes="src string: $appUrl/ui/plus.png"/>
|
|
</a>
|
|
<tal:comment replace="nothing">Create (a) new object(s) by importing data</tal:comment>
|
|
<a tal:condition="python: ('import' in createMeans) and userMayAdd"
|
|
tal:attributes="href python: '%s/ui/import?className=%s' % (toolUrl, rootClass);
|
|
title python: _('query_import')">
|
|
<img tal:attributes="src string: $appUrl/ui/import.png"/>
|
|
</a>
|
|
<tal:comment replace="nothing">Search objects of this type</tal:comment>
|
|
<a tal:define="showSearch python: tool.getAttr('enableAdvancedSearchFor%s' % rootClass)"
|
|
tal:condition="showSearch"
|
|
tal:attributes="href python: '%s/ui/search?className=%s' % (toolUrl, rootClass);
|
|
title python: _('search_objects')">
|
|
<img tal:attributes="src string: $appUrl/ui/search.gif"/>
|
|
</a>
|
|
</span>
|
|
<tal:comment replace="nothing">Searches for this content type</tal:comment>
|
|
<tal:widget repeat="widget searchInfo/searches">
|
|
<tal:group condition="python: widget['type'] == 'group'">
|
|
<metal:s use-macro="app/ui/portlet/macros/group"/>
|
|
</tal:group>
|
|
<tal:search condition="python: widget['type'] != 'group'">
|
|
<tal:s define="search widget">
|
|
<metal:s use-macro="app/ui/portlet/macros/search"/>
|
|
</tal:s>
|
|
</tal:search>
|
|
</tal:widget>
|
|
</div>
|
|
</tal:section>
|
|
</metal:portlet>
|
|
|
|
<tal:comment replace="nothing">
|
|
This macro displays, within the portlet, the navigation tree for the
|
|
currently shown object, made of phases and contained pages.
|
|
</tal:comment>
|
|
<table metal:define-macro="phases" class="portletContent"
|
|
tal:define="singlePhase python: phases and (len(phases) == 1);
|
|
page python: req.get('page', 'main');
|
|
mayEdit contextObj/mayEdit">
|
|
<tal:phase repeat="phase phases">
|
|
<tal:comment replace="nothing">The box containing phase-related information</tal:comment>
|
|
<tr tal:define="singlePage python: len(phase['pages']) == 1">
|
|
<td tal:define="label python:'%s_phase_%s' % (contextObj.meta_type, phase['name'])">
|
|
<tal:comment replace="nothing">The title of the phase</tal:comment>
|
|
<div class="portletGroup" tal:condition="python: not singlePhase and not singlePage"
|
|
tal:content="structure python: _(label)">
|
|
</div>
|
|
<tal:comment replace="nothing">The page(s) within the phase</tal:comment>
|
|
<tal:page repeat="aPage phase/pages">
|
|
<tal:comment replace="nothing">First line: page name and icons</tal:comment>
|
|
<div tal:condition="python: not (singlePhase and singlePage)"
|
|
tal:attributes="class python: test(aPage == page, 'portletCurrent portletPage', 'portletPage')">
|
|
<a tal:attributes="href python: contextObj.getUrl(page=aPage)"
|
|
tal:content="structure python: _('%s_page_%s' % (contextObj.meta_type, aPage))">
|
|
</a>
|
|
<tal:icons define="locked python: contextObj.isLocked(user, aPage);
|
|
editable python: mayEdit and phase['pagesInfo'][aPage]['showOnEdit']">
|
|
<a tal:condition="python: editable and not locked"
|
|
tal:attributes="href python: contextObj.getUrl(mode='edit', page=aPage)">
|
|
<img tal:attributes="src string: $appUrl/ui/edit.png;
|
|
title python: _('object_edit')"/>
|
|
</a>
|
|
<a tal:condition="python: editable and locked">
|
|
<img style="cursor: help"
|
|
tal:define="lockDate python: tool.formatDate(locked[1]);
|
|
lockMsg python: _('page_locked', mapping={'user':tool.getUserName(locked[0]), 'date': lockDate})"
|
|
tal:attributes="src string: $appUrl/ui/locked.png; title lockMsg"/>
|
|
</a>
|
|
</tal:icons>
|
|
</div>
|
|
<tal:comment replace="nothing">Next lines: links</tal:comment>
|
|
<tal:links define="links python: phase['pagesInfo'][aPage].get('links')" tal:condition="links">
|
|
<div tal:repeat="link links">
|
|
<a tal:content="link/title" tal:attributes="href link/url"></a>
|
|
</div>
|
|
</tal:links>
|
|
</tal:page>
|
|
</td>
|
|
</tr>
|
|
</tal:phase>
|
|
</table>
|