浏览代码

fixes the items ordering + add number of items in the tab view

damien 11 年前
父节点
当前提交
7fe3cb5013

+ 27 - 7
pboard/pboard/model/data.py 查看文件

12
 """
12
 """
13
 import os
13
 import os
14
 import re
14
 import re
15
+import datetime as datetimeroot
15
 from datetime import datetime
16
 from datetime import datetime
16
 from hashlib import sha256
17
 from hashlib import sha256
17
 __all__ = ['User', 'Group', 'Permission']
18
 __all__ = ['User', 'Group', 'Permission']
143
   Comment = 'comment'
144
   Comment = 'comment'
144
 
145
 
145
 
146
 
147
+MINIMUM_DATE = datetimeroot.date(datetimeroot.MINYEAR, 1, 1)
148
+
146
 class PBNode(DeclarativeBase):
149
 class PBNode(DeclarativeBase):
147
 
150
 
148
   def __init__(self):
151
   def __init__(self):
188
 
191
 
189
   _oParent = relationship('PBNode', remote_side=[node_id], backref='_lAllChildren')
192
   _oParent = relationship('PBNode', remote_side=[node_id], backref='_lAllChildren')
190
 
193
 
191
-  def getChildrenOfType(self, plNodeTypeList, plSortingCriteria):
194
+  def getChildrenOfType(self, plNodeTypeList, poKeySortingMethod=None, pbDoReverseSorting=False):
192
     """return all children nodes of type 'data' or 'node' or 'folder'"""
195
     """return all children nodes of type 'data' or 'node' or 'folder'"""
193
     llChildren = []
196
     llChildren = []
194
     for child in self._lAllChildren:
197
     for child in self._lAllChildren:
195
       if child.node_type in plNodeTypeList:
198
       if child.node_type in plNodeTypeList:
196
         llChildren.append(child)
199
         llChildren.append(child)
200
+    if poKeySortingMethod!=None:
201
+      llChildren = sorted(llChildren, key=poKeySortingMethod, reverse=pbDoReverseSorting)
197
     return llChildren
202
     return llChildren
198
-    # return DBSession.query(PBNode).filter(PBNode.parent_id==self.node_id).filter(PBNode.node_type.in_(plNodeTypeList)).order_by(plSortingCriteria).all()
199
   
203
   
200
   def getChildNbOfType(self, plNodeTypeList):
204
   def getChildNbOfType(self, plNodeTypeList):
201
     """return all children nodes of type 'data' or 'node' or 'folder'"""
205
     """return all children nodes of type 'data' or 'node' or 'folder'"""
211
 
215
 
212
   def getChildren(self):
216
   def getChildren(self):
213
     """return all children nodes of type 'data' or 'node' or 'folder'"""
217
     """return all children nodes of type 'data' or 'node' or 'folder'"""
214
-    return self.getChildrenOfType([PBNodeType.Node, PBNodeType.Folder, PBNodeType.Data], PBNode.node_order.asc())
218
+    return self.getChildrenOfType([PBNodeType.Node, PBNodeType.Folder, PBNodeType.Data])
215
 
219
 
216
   def getContacts(self):
220
   def getContacts(self):
217
     """return all children nodes of type 'data' or 'node' or 'folder'"""
221
     """return all children nodes of type 'data' or 'node' or 'folder'"""
218
-    return self.getChildrenOfType([PBNodeType.Contact], PBNode.data_label.asc())
222
+    return self.getChildrenOfType([PBNodeType.Contact], PBNode.getSortingKeyForContact)
223
+
224
+  def getContactNb(self):
225
+    """return all children nodes of type 'data' or 'node' or 'folder'"""
226
+    return self.getChildNbOfType([PBNodeType.Contact])
227
+
228
+  @classmethod
229
+  def getSortingKeyBasedOnDataDatetime(cls, poDataNode):
230
+    return poDataNode.data_datetime or MINIMUM_DATE
231
+    
232
+  @classmethod
233
+  def getSortingKeyForContact(cls, poDataNode):
234
+    return poDataNode.data_label or ''
235
+
236
+  @classmethod
237
+  def getSortingKeyForComment(cls, poDataNode):
238
+    return poDataNode.data_datetime or ''
219
 
239
 
220
   def getEvents(self):
240
   def getEvents(self):
221
-    return self.getChildrenOfType([PBNodeType.Event], PBNode.data_datetime.desc())
241
+    return self.getChildrenOfType([PBNodeType.Event], PBNode.getSortingKeyBasedOnDataDatetime, True)
222
     
242
     
223
   def getFiles(self):
243
   def getFiles(self):
224
-    return self.getChildrenOfType([PBNodeType.File], PBNode.data_datetime.desc())
244
+    return self.getChildrenOfType([PBNodeType.File])
225
 
245
 
226
   def getComments(self):
246
   def getComments(self):
227
-    return self.getChildrenOfType([PBNodeType.Comment], PBNode.data_datetime.desc())
247
+    return self.getChildrenOfType([PBNodeType.Comment], PBNode.getSortingKeyBasedOnDataDatetime, True)
228
 
248
 
229
   def getIconClass(self):
249
   def getIconClass(self):
230
     laIconClass = dict()
250
     laIconClass = dict()

+ 4 - 4
pboard/pboard/templates/document.mak 查看文件

148
       <div class="tabbable">
148
       <div class="tabbable">
149
         <ul class="nav nav-tabs">
149
         <ul class="nav nav-tabs">
150
             <li class="active"><a href="#tags" data-toggle="tab" title="${_('Tags')}"><i class='icon-g-tags'></i></a></li>
150
             <li class="active"><a href="#tags" data-toggle="tab" title="${_('Tags')}"><i class='icon-g-tags'></i></a></li>
151
-            <li><a href="#events" data-toggle="tab" title="History"><i class="icon-g-history"></i></a></li>
152
-            <li><a href="#contacts" data-toggle="tab" title="Contacts"><i class="icon-g-user""></i> </a></li>
153
-            <li><a href="#comments" data-toggle="tab" title="Comments"><i class="icon-g-conversation"></i> </a></li>
154
-            <li><a href="#files" data-toggle="tab" title="Files"><i class="icon-g-attach"></i> </a></li>
151
+            <li><a href="#events" data-toggle="tab" title="History"><i class="icon-g-history"></i>${POD.ItemNb(current_node.getEvents())}</a></li>
152
+            <li><a href="#contacts" data-toggle="tab" title="Contacts"><i class="icon-g-user""></i>${POD.ItemNb(current_node.getContacts())}</a></li>
153
+            <li><a href="#comments" data-toggle="tab" title="Comments"><i class="icon-g-conversation"></i>${POD.ItemNb(current_node.getComments())}</a></li>
154
+            <li><a href="#files" data-toggle="tab" title="Files"><i class="icon-g-attach"></i>${POD.ItemNb(current_node.getFiles())}</a></li>
155
         </ul>
155
         </ul>
156
         <div class="tab-content">
156
         <div class="tab-content">
157
             ################################
157
             ################################

+ 5 - 0
pboard/pboard/templates/master.mak 查看文件

64
   top: 0;
64
   top: 0;
65
 }
65
 }
66
 
66
 
67
+.pod-item-nb-sup-block {
68
+  color: #3a87ad;
69
+  font-weight: bold;
70
+}
71
+
67
 h3:Hover div.pod-toolbar {
72
 h3:Hover div.pod-toolbar {
68
   visibility: visible;
73
   visibility: visible;
69
 }
74
 }

+ 6 - 0
pboard/pboard/templates/pod.mak 查看文件

17
 <%def name='Badge(psLabel, psCssClass="")'>
17
 <%def name='Badge(psLabel, psCssClass="")'>
18
   <span class='badge ${psCssClass}'>${psLabel}</span>
18
   <span class='badge ${psCssClass}'>${psLabel}</span>
19
 </%def>
19
 </%def>
20
+
21
+<%def name='ItemNb(plItemList)'>
22
+  % if len(plItemList)>0:
23
+  <sup class="pod-item-nb-sup-block"> ${len(plItemList)}</sup>
24
+  % endif
25
+</%def>