-
-
+
+
+ var2="nb = loop.row.nb + 1;
+ suffix='%s_%d_%d' % (field.name, nb, lenFields);
+ tabId='tab_%s' % suffix">
|
-
- :_('%s_col%d' % (field.labelId, rowNb))
+ |
+ :_('%s_col%d' % (field.labelId, nb))
|
|
@@ -277,8 +276,9 @@ class UiGroup:
+ var2="nb=loop.row.nb + 1"
+ id=":'tabcontent_%s_%d_%d' % (field.name, nb, lenFields)"
+ style=":(nb == 1) and 'display:table-row' or 'display:none'">
:field.pxView
:field.pxRender
@@ -286,7 +286,7 @@ class UiGroup:
|
''')
diff --git a/fields/phase.py b/fields/phase.py
index 5d78edd..8858167 100644
--- a/fields/phase.py
+++ b/fields/phase.py
@@ -23,19 +23,16 @@ class Phase:
'''A group of pages.'''
pxView = Px('''
-
-
-
-
- ::_(label)
-
+ ''')
+
+ # "Static" PX that displays all phases of a given object.
+ pxAllPhases = Px('''
+
+ :phase.pxView
+
+
+
+
+
+
+ |
+
+
+ :phase.pxView |
+
+
+
+
+ ''')
def __init__(self, name, obj):
self.name = name
diff --git a/fields/search.py b/fields/search.py
index d5571fe..4e1ba26 100644
--- a/fields/search.py
+++ b/fields/search.py
@@ -148,7 +148,7 @@ class UiSearch:
''')
diff --git a/gen/mixins/ToolMixin.py b/gen/mixins/ToolMixin.py
index 7e04e2f..8cf2d5c 100644
--- a/gen/mixins/ToolMixin.py
+++ b/gen/mixins/ToolMixin.py
@@ -749,6 +749,14 @@ class ToolMixin(BaseMixin):
# advanced search.
return klass.searchAdvanced.isShowable(klass, self.appy())
+ def portletBottom(self, klass):
+ '''Is there a custom zone to display at the bottom of the portlet zone
+ for p_klass?'''
+ if not hasattr(klass, 'getPortletBottom'): return ''
+ res = klass.getPortletBottom(self.appy())
+ if not res: return ''
+ return res
+
def getQueryUrl(self, contentType, searchName, startNumber=None):
'''This method creates the URL that allows to perform a (non-Ajax)
request for getting queried objects from a search named p_searchName
diff --git a/gen/mixins/__init__.py b/gen/mixins/__init__.py
index b96fd83..e2c5c28 100644
--- a/gen/mixins/__init__.py
+++ b/gen/mixins/__init__.py
@@ -896,14 +896,28 @@ class BaseMixin:
def getSupTitle(self, navInfo=''):
'''Gets the html code (icons,...) that can be shown besides the title
of an object.'''
- appyObj = self.appy()
- if hasattr(appyObj, 'getSupTitle'): return appyObj.getSupTitle(navInfo)
+ obj = self.appy()
+ if hasattr(obj, 'getSupTitle'): return obj.getSupTitle(navInfo)
return ''
def getSubTitle(self):
'''Gets the content that must appear below the title of an object.'''
- appyObj = self.appy()
- if hasattr(appyObj, 'getSubTitle'): return appyObj.getSubTitle()
+ obj = self.appy()
+ if hasattr(obj, 'getSubTitle'): return obj.getSubTitle()
+ return ''
+
+ def getSupBreadCrumb(self):
+ '''Gets the html code that can be shown besides the title of an object
+ in the breadcrumb.'''
+ obj = self.appy()
+ if hasattr(obj, 'getSupBreadCrumb'): return obj.getSupBreadCrumb()
+ return ''
+
+ def getSubBreadCrumb(self):
+ '''Gets the content that must appear below the title of an object in the
+ breadcrumb.'''
+ obj = self.appy()
+ if hasattr(obj, 'getSubBreadCrumb'): return obj.getSubBreadCrumb()
return ''
# Workflow methods ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/gen/model.py b/gen/model.py
index 54cec55..d1881a5 100644
--- a/gen/model.py
+++ b/gen/model.py
@@ -257,8 +257,8 @@ class Tool(ModelClass):
users = gen.Ref(User, multiplicity=(0,None), add=True, link=False,
back=gen.Ref(attribute='toTool', show=False), page=userPage,
queryable=True, queryFields=('title', 'login'),
- show=isManager,
- showHeaders=True, shownInfo=('title', 'login', 'roles'))
+ show=isManager, showHeaders=True,
+ shownInfo=('title', 'login*120px', 'roles*120px'))
def computeConnectedUsers(self): pass
connectedUsers = gen.Computed(method=computeConnectedUsers, page=userPage,
plainText=False, show=isManager)
@@ -266,7 +266,8 @@ class Tool(ModelClass):
back=gen.Ref(attribute='toTool2', show=False),
page=gen.Page('groups', show=isManager), show=isManager,
queryable=True, queryFields=('title', 'login'),
- showHeaders=True, shownInfo=('title', 'login', 'roles'))
+ showHeaders=True,
+ shownInfo=('title', 'login*120px', 'roles*120px'))
pt = gen.Page('translations', show=isManager)
translations = gen.Ref(Translation, multiplicity=(0,None), add=False,
link=False, show='view', page=pt,
diff --git a/gen/ui/appy.css b/gen/ui/appy.css
index 198cf72..d26244b 100644
--- a/gen/ui/appy.css
+++ b/gen/ui/appy.css
@@ -52,6 +52,7 @@ img { border: 0; vertical-align: middle }
.xhtml img { margin-right: 5px }
.xhtml p { margin: 3px 0 7px 0 }
.clickable { cursor: pointer }
+.refLink { font-style: italic; padding-left: 5px; font-size: 90%; color: grey }
.main { width: 900px; height: 95%; box-shadow: 3px 3px 3px #A9A9A9;
border-style: solid; border-width: 1px; border-color: grey}
.top { height: 89px; margin-left: 3em; vertical-align: top;
@@ -62,9 +63,7 @@ img { border: 0; vertical-align: middle }
.userStripText { padding: 0 0.3em 0 0.3em; color: white }
.userStrip a { color: #e7e7e7 }
.userStrip a:visited { color: #e7e7e7 }
-.navigate { border-bottom: 1px solid #5F7983; height: 100%;
- background-color: #dbdde1; font-weight: bold }
-.navigate td { padding: 4px 9px }
+.breadcrumb { font-size: 11pt }
.login { margin: 3px; color: black }
input.button { color: #666666; height: 20px; width: 130px;
cursor:pointer; font-size: 90%; padding: 1px 0 0 10px;
@@ -84,26 +83,25 @@ input.buttonSmall { width: 100px !important; font-size: 85%; height: 18px;
.focus td { padding: 4px 0px 4px 4px }
.discreet { font-size: 90%; color: grey }
.title { color: #BA9440 }
-.breadcrumb { color: #BA9440; font-size: 13px }
.lostPassword { font-size: 90%; color: white; padding-left: 1em }
+.current { font-weight: bold }
.portlet { width: 150px; border-right: 1px solid #5F7983;
background-color: #ededed }
.portletContent { margin: 4px 9px }
.portletTitle { font-size: 110%; margin-bottom: 4px }
-.portletCurrent { font-weight: bold; color: grey }
.portletSep { border-top: 1px solid #5F7983; margin-top: 2px }
-.portletPage { font-style: italic }
.portletGroup { font-variant: small-caps; font-weight: bold; font-size: 110%;
margin: 0.1em 0 0.3em ; border-bottom: 1px dashed grey }
.portletSearch { font-size: 90%; font-style: italic }
.inputSearch { height: 15px; width: 132px; margin: 3px 3px 2px 3px !important }
td.search { padding-top: 8px }
-.content { padding: 14px 14px 9px 15px; background-color: #f1f1f1 }
+.content { padding: 9px; background-color: #f1f1f1 }
.popup { display: none; position: absolute; top: 30%; left: 35%;
width: 350px; z-index : 100; background: white; padding: 8px;
border: 1px solid grey; box-shadow: 2px 2px 2px #888888}
.dropdown { display:none; position: absolute; border: 1px solid #cccccc;
- background-color: white; padding: 3px 4px 0 }
+ background-color: white; padding: 3px 4px 0; font-size: 8pt;
+ font-weight: normal }
.dropdownMenu { cursor: pointer; padding-right: 4px; font-size: 93% }
.dropdown a:hover { text-decoration: underline }
.list { margin-bottom: 3px }
@@ -130,18 +128,20 @@ td.search { padding-top: 8px }
color: white }
.even { background-color: #f9f9f9 }
.odd { background-color: #f4f4f4 }
-.summary { margin-bottom: 5px; background-color: #f9f9f9;
- border-bottom: 1px dashed #cccccc; border-top: 1px dashed #cccccc; }
-.objectTitle { font-size: 11pt; border-bottom: 3px solid grey;
- font-weight: bold }
+.summary { margin-bottom: 5px; background-color: #f9f9f9 }
.by { padding: 5px; color: grey; font-size: 97% }
.underline { border-bottom: 1px dotted grey }
.state { font-weight: bold; border-bottom: 1px dashed grey }
.historyLabel { font-variant: small-caps; font-weight: bold }
-.history td { border-top: 1px solid grey; padding: 0 5px 0 5px }
+.history td { border-top: 1px solid #e6e6e6; padding: 0 5px 0 5px }
.history th { font-style: italic; text-align: left; padding: 0 5px 0 5px }
.topSpace { margin-top: 15px }
.bottomSpace { margin-bottom: 15px }
+.phase { background-color: white; border: 1px solid #d0d0d0;
+ box-shadow: 2px 2px 2px #888888; margin-bottom: 7px }
+.phase td { padding: 3px 7px 3px 7px; border-right: 1px solid #d0d0d0;
+ font-size: 96% }
+.currentPage { background-color: #e6e6e6 }
.pageLink { margin-right: 8px }
.footer { font-size: 95%; height: 100% }
.footer td { background-color: #CBCBC9; border-top: 1px solid grey;
@@ -159,3 +159,6 @@ td.search { padding-top: 8px }
.podName { font-size: 90% }
.podTable { margin-left: 15px }
.cbCell { width: 10px; text-align: center}
+.tabs { position:relative; bottom:-2px }
+.tab { padding: 0 10px 0 10px; text-align: center; font-size: 90%;
+ font-weight: bold}
diff --git a/gen/ui/tabBg.png b/gen/ui/tabBg.png
index fd50a47..d5e9fa3 100644
Binary files a/gen/ui/tabBg.png and b/gen/ui/tabBg.png differ
diff --git a/gen/ui/tabBgu.png b/gen/ui/tabBgu.png
index f65935e..61c23af 100644
Binary files a/gen/ui/tabBgu.png and b/gen/ui/tabBgu.png differ
diff --git a/gen/ui/tabLeft.png b/gen/ui/tabLeft.png
index 939ad14..f824be8 100644
Binary files a/gen/ui/tabLeft.png and b/gen/ui/tabLeft.png differ
diff --git a/gen/ui/tabLeftu.png b/gen/ui/tabLeftu.png
index a9425c9..b5f1a89 100644
Binary files a/gen/ui/tabLeftu.png and b/gen/ui/tabLeftu.png differ
diff --git a/gen/ui/tabRight.png b/gen/ui/tabRight.png
index a8f8043..aed966b 100644
Binary files a/gen/ui/tabRight.png and b/gen/ui/tabRight.png differ
diff --git a/gen/ui/tabRightu.png b/gen/ui/tabRightu.png
index 3714349..d7b4a78 100644
Binary files a/gen/ui/tabRightu.png and b/gen/ui/tabRightu.png differ
diff --git a/gen/wrappers/ToolWrapper.py b/gen/wrappers/ToolWrapper.py
index 21dabdb..dcc0bde 100644
--- a/gen/wrappers/ToolWrapper.py
+++ b/gen/wrappers/ToolWrapper.py
@@ -154,24 +154,14 @@ class ToolWrapper(AbstractWrapper):
currentSearch=req.get('search', None);
currentClass=req.get('className', None);
currentPage=req['PATH_INFO'].rsplit('/',1)[-1];
- rootClasses=ztool.getRootClasses();
- phases=zobj and zobj.getAppyPhases() or None">
-
-
+ rootClasses=ztool.getRootClasses()">
-
+
::_(className + '_plural')
+ 'current' or ''">::_(className + '_plural')
@@ -220,7 +210,7 @@ class ToolWrapper(AbstractWrapper):
''')
diff --git a/gen/wrappers/__init__.py b/gen/wrappers/__init__.py
index 670f86a..780078c 100644
--- a/gen/wrappers/__init__.py
+++ b/gen/wrappers/__init__.py
@@ -48,10 +48,13 @@ class AbstractWrapper(object):
''')
pxNavigationStrip = Px('''
-
+
-
+ |
+ ::sup
@@ -59,11 +62,15 @@ class AbstractWrapper(object):
:bc.title
+ ::sub
|
:obj.pxNavigateSiblings |
- ''')
+
+
+ :phases[0].pxAllPhases''')
# The template PX for all pages.
pxTemplate = Px('''
@@ -267,19 +274,22 @@ class AbstractWrapper(object):
|
|
-
-
-