changeset 271:690d5dea34bd

Merge with d672a6f6c9029a93614d45aa5c0f5e4b977f7a87
author casties
date Tue, 30 Sep 2014 13:59:13 +0200
parents 761869998ad0 (current diff) d672a6f6c902 (diff)
children 66f86cb8f69b 79f3f6492ec9
files zpt/www/main_template.zpt
diffstat 9 files changed, 156 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- a/HashTree.py	Fri Sep 05 11:44:40 2014 +0200
+++ b/HashTree.py	Tue Sep 30 13:59:13 2014 +0200
@@ -211,7 +211,7 @@
         """
         keys = self._splitkey(key)
         node = self.root
-        logging.debug("hashtree.add: keys=%s value=%s"%(repr(keys), repr(value)))
+        #logging.debug("hashtree.add: keys=%s value=%s"%(repr(keys), repr(value)))
         for k in keys:
             nextnode = node.getNode(k)
             if nextnode is None:
--- a/MPIWGDepartment.py	Fri Sep 05 11:44:40 2014 +0200
+++ b/MPIWGDepartment.py	Tue Sep 30 13:59:13 2014 +0200
@@ -146,7 +146,7 @@
         proj = pf.getProject(projectNumber=self.getProjectNumber())
         return proj
 
-    def getProjects(self, count=0, active=0, archived=0, depthFirst=True):
+    def getProjects(self, count=0, active=0, archived=0, depthFirst=True, filter=None):
         """returns a list of projects of this department.
         
         active = 0 : all projects
@@ -158,7 +158,7 @@
         archived = 2 : archived projects
         """
         pf = self.getMPIWGRoot().getProjectFolder()
-        projects = pf.getProjectsAsList(self.getProjectNumber(), active=active, archived=archived, depthFirst=depthFirst)
+        projects = pf.getProjectsAsList(self.getProjectNumber(), active=active, archived=archived, depthFirst=depthFirst, filter=filter)
         #logging.debug("getProjects projects=%s"%repr(projects))
         if count > 0:
             return projects[:count]
--- a/MPIWGProjects.py	Fri Sep 05 11:44:40 2014 +0200
+++ b/MPIWGProjects.py	Tue Sep 30 13:59:13 2014 +0200
@@ -350,6 +350,9 @@
                     self.items[int(n)][t] = form[k]
                 except:
                     logging.error("InfoBlock editItems: error changing item %s!"%k)
+                    
+            if k == 'block_title':
+                self.title = form[k]
                  
         self._p_changed = True
         if RESPONSE is not None:
@@ -563,6 +566,16 @@
             return t
         
         
+    def getProjectType(self):
+        """returns the type of project"""
+        t = getattr(self, 'projectType', None)
+        return t
+        
+    def setProjectType(self, s):
+        """set the type of project"""
+        self.projectType = s
+
+        
     def getMPIWGProject(self):
         """Return this project for acquisition."""
         return self
@@ -631,10 +644,10 @@
         return tree.getAncestorsOf(self.getNumber())
     
 
-    def getSubProjects(self, active=1):
+    def getSubProjects(self, active=1, archived=1, filter=None):
         """returns a list of child projects"""
         tree = self.getProjectTree()
-        return [p for p in tree.getChildrenOf(self.getNumber()) if p.checkActive(active)]
+        return [p for p in tree.getChildrenOf(self.getNumber()) if (filter is None or filter(p)) and p.checkActive(active) and p.checkArchived(archived)]
     
               
     def getRelatedDigitalSources(self):
@@ -1516,6 +1529,12 @@
         else:
             self.setActiveFlag(False)
         
+        if formdata.has_key('projectType'):
+            if formdata.get('projectType'):
+                self.projectType = formdata.get('projectType')
+            else:
+                self.projectType = None
+        
         # make dict of responsible scientists
         checkedScientists = {}
         names = {}
@@ -1921,7 +1940,7 @@
             tree = HashTree(keySeparator='.', keyFn=getInt)
             for p in self.objectValues(spec='MPIWGProject'):
                 # add all projects
-                logging.debug("add to project tree: %s, %s"%(repr(p.getNumber()),p))
+                #logging.debug("add to project tree: %s, %s"%(repr(p.getNumber()),p))
                 tree.add(p.getNumber(), p)
                 
             self._v_projectTree = tree
@@ -1930,7 +1949,7 @@
         return tree
     
     
-    def getProjectsAsList(self, start=None, active=1, archived=1, depthFirst=True):
+    def getProjectsAsList(self, start=None, active=1, archived=1, depthFirst=True, filter=None):
         """Return flattened list of projects, starting from start.
 
         active = 0 : all projects
@@ -1951,7 +1970,8 @@
         #logging.debug("getProjectsAsList: node=(%s,%s) pl=%s"%(node.key,node.value,repr(pl)))
         #logging.debug("getProjectsAsList: node=(%s,%s) pl=%s"%(node.key,node.value,[p.getNumber() for p in pl]))
         # return filtered list
-        return [p for p in pl if (p.checkActive(active) and p.checkArchived(archived))]     
+        return [p for p in pl if ((filter is None or filter(p)) and p.checkActive(active) and p.checkArchived(archived))]     
+        #return [p for p in pl if (p.checkActive(active) and p.checkArchived(archived))]     
     
 
     def getProject(self, projectNumber=None):
--- a/MPIWGStaff.py	Fri Sep 05 11:44:40 2014 +0200
+++ b/MPIWGStaff.py	Tue Sep 30 13:59:13 2014 +0200
@@ -100,7 +100,7 @@
 
 
     def getMemberList(self, department=None, sortBy='last_name', onlyCurrent=False, arrivedWithin=None, 
-                      onlyPublished=True, onlyWithEmail=True, onlyScholar=True, limit=0):
+                      onlyPublished=True, onlyWithEmail=True, onlyScholar=True, status=None, limit=0):
         """Return the list of members.
         
         Returns a list of MPIWGStaffMember objects.
@@ -128,6 +128,10 @@
         if arrivedWithin is not None:
             wheres.append("date_from > CURRENT_DATE - interval %s")
             args.append(arrivedWithin)
+            
+        if status is not None:
+            wheres.append("status ilike %s")
+            args.append('%%%s%%'%status)
         
         # assemble query
         query = "SELECT * FROM personal_www_list"
--- a/css/mpiwg.css	Fri Sep 05 11:44:40 2014 +0200
+++ b/css/mpiwg.css	Tue Sep 30 13:59:13 2014 +0200
@@ -349,7 +349,7 @@
 div.subnav h2.subnavhead {
     background-color: white;
     color: #d45a00;
-    border-bottom: 1px solid #dccbae;
+    /* border-bottom: 1px solid #dccbae; */
     font-size: 11px;
     font-weight: bold;
     margin: 0;
@@ -363,6 +363,25 @@
     text-indent: -14px;
 }
 
+div.subnav li.dept.lv1 {
+    padding-left: 3em;
+}
+div.subnav li.dept.lv2 {
+    padding-left: 4em;
+}
+div.subnav li.dept.lv3 {
+    padding-left: 5em;
+}
+div.subnav li.dept.lv4 {
+    padding-left: 6em;
+}
+div.subnav li.dept.lv5 {
+    padding-left: 7em;
+}
+div.subnav li.dept.lv6 {
+    padding-left: 8em;
+}
+
 div.subnav li.dept .type {
     font-style: italic;
     color: #6a4d3c;
@@ -1425,6 +1444,22 @@
     color: #333;
 }
 
+div.subnav .proj_switcher {
+	background-color: white;
+	text-align: right;
+	padding: 2px 0;
+}
+div.subnav .proj_switcher .proj_state {
+	padding: 2px 6px;
+	border-top: 1px solid #DCCBAE;
+	border-left: 1px solid #DCCBAE;
+	border-right: 1px solid #DCCBAE;
+}
+div.subnav .proj_switcher .proj_state.on {
+	background-color: #FCF2DF;
+}
+
+
 /*
  * special sideblocks
  */
@@ -1494,6 +1529,21 @@
 }
 
 /*
+ * sub row (between main and foot)
+ */
+#subrow {
+	display: table;
+}
+#subrow .leftbox {
+	border-top: 0;	
+}
+#subrow .main {
+	min-width: 690px;
+	padding: 0 20px;
+	border-top: 0;
+}
+
+/*
  * footer
  */
 #footservices {
--- a/js/mpiwg.js	Fri Sep 05 11:44:40 2014 +0200
+++ b/js/mpiwg.js	Tue Sep 30 13:59:13 2014 +0200
@@ -38,9 +38,6 @@
 				$content.animate({'left':'-='+settings.scrollBy}, 'fast');
 			}).css('cursor', 'pointer');
 		});
-		
-	
-	
 	};
 }(jQuery));
 
--- a/zpt/project/edit_basic.zpt	Fri Sep 05 11:44:40 2014 +0200
+++ b/zpt/project/edit_basic.zpt	Tue Sep 30 13:59:13 2014 +0200
@@ -37,14 +37,19 @@
         <tr>
           <td>Started at:</td>
           <td><input tal:attributes="name python:'startedAt';
-								   value python:here.getStartedAt()" type="text" len="15" />
+								   value python:here.getStartedAt()" type="text" size="10" />
             (format dd.mm.yyyy or mm.yyyy or yyyy)</td>
         </tr>
         <tr>
           <td>Completed at:</td>
           <td><input tal:attributes="name python:'completedAt';
                    value python:here.getCompletedAt()"
-            type="text" len="15" /> (format dd.mm.yyyy or mm.yyyy or yyyy)</td>
+            type="text" size="10" /> (format dd.mm.yyyy or mm.yyyy or yyyy)</td>
+        </tr>
+        <tr>
+          <td>Type of project page:</td>
+          <td><input name="projectType" tal:attributes="value here/getProjectType"
+            type="text" size="20" /></td>
         </tr>
       </table>
 
--- a/zpt/project/project_index_html.zpt	Fri Sep 05 11:44:40 2014 +0200
+++ b/zpt/project/project_index_html.zpt	Tue Sep 30 13:59:13 2014 +0200
@@ -9,7 +9,23 @@
   <tal:block 
     tal:define="global proBaseUrl string:$root/${secmap/research}/projects;
       global images here/getImageList;
-      global dept here/getDepartmentId;" />
+      global dept here/getDepartmentId;
+      global pNum here/getNumber;" />
+      <script tal:content="string:var sliderUrl = 'api/subProjects_slider_html?pro=$pNum';">
+      </script>
+      <script>
+      $(window).on('load', function () {
+          $('.ajaxSlider').each(function () {
+              var $this = $(this);
+              $this.AjaxSlider({
+                  dataUrl : sliderUrl,
+                  dataSel : 'div.center>div',
+                  scrollBy: '130px',
+              });
+          });
+          initialize_swipe(".ajaxSlider");
+      });
+      </script>
 </metal:block>
 </head>
 <body>
@@ -70,15 +86,17 @@
   <div class="sidebar" metal:fill-slot="sidebar">
 
     <!-- this project is part of -->
+    <tal:block tal:condition="oldnav">
     <div class="sideblock"
       tal:define="parents here/getSuperProjects;" tal:condition="parents">
       <div class="project parent">
         Part of:
         <a tal:define="parent python:parents[-1]" tal:content="parent/getLabel"
-           tal:attributes="href python:parent.getUrl(baseUrl=proBaseUrl)+test(here.isArchivedProject(),'?showArchive=yes','')" />
+           tal:attributes="href python:parent.getUrl(baseUrl=proBaseUrl)+test(here.isArchivedProject(),'?archived=2','')" />
       </div>
       <!-- end parent -->
     </div>
+    </tal:block>
     <!-- sideblock -->
 
     <!-- related projects -->
@@ -136,34 +154,35 @@
     <!-- related publications -->
 
     <!-- projects covered -->
+    <tal:block tal:condition="oldnav">
     <div class="sideblock"
-         tal:define="showArchive python:(request.get('showArchive','no')=='yes');
-                     children here/getSubProjects;"
+         tal:define="children python:here.getSubProjects(archived=archived);"
          tal:condition="children">
       <h2>
         Projects
         <span class="proj_state">
-          <a href="?" tal:omit-tag="python:not (here.isArchivedProject() or showArchive)">current</a>
+          <a href="?" tal:omit-tag="python:not (here.isArchivedProject() or archived==2)">current</a>
           &nbsp; 
-          <a href="?showArchive=yes" tal:omit-tag="python:here.isArchivedProject() or showArchive">completed</a>
+          <a href="?archived=2" tal:omit-tag="python:here.isArchivedProject() or archived==2">completed</a>
         </span>
       </h2>
       <tal:y tal:repeat="child children">
-        <tal:x tal:condition="python:not (child.isArchivedProject() or showArchive)">
+        <tal:x tal:condition="python:not child.isArchivedProject()">
           <div class="project">
             <a tal:content="child/getLabel"
               tal:attributes="href python:child.getUrl(baseUrl=proBaseUrl)" />
           </div>
         </tal:x>
-        <tal:x tal:condition="python:child.isArchivedProject() and (here.isArchivedProject() or showArchive)">
+        <tal:x tal:condition="python:child.isArchivedProject()">
           <div class="project inactive" tal:define="started child/getStartedAt">
             <a tal:content="child/getLabel"
-              tal:attributes="href python:child.getUrl(baseUrl=proBaseUrl)" /> 
+              tal:attributes="href python:child.getUrl(baseUrl=proBaseUrl)+'?archived=2'" /> 
             (<span tal:condition="started" tal:content="string:$started-"/><tal:x tal:condition="not:started">Completed: </tal:x><span tal:content="child/getCompletedAt"/>)
           </div>
         </tal:x>
       </tal:y>
     </div>
+    </tal:block>
     <!-- projects covered -->
 
     <!-- custom info blocks -->
@@ -230,5 +249,40 @@
   </div>
   <!-- sidebar -->
 
+  <!-- subrow -->
+  <div id="subrow" metal:fill-slot="subrow"
+    tal:define="projects python:here.getProjectsAsList(start=pNum, filter=lambda p:p.getNumber()!=pNum and p.getProjectType()=='Project');"
+    tal:condition="projects">
+    <div class="leftbox"></div>
+    <div class="main">
+      <!-- sub-project thumbs -->
+      <div class="box">
+        <div tal:attributes="class python:test(len(projects)>5, 'ajaxSlider', None);">
+          <div class="row quintuple">
+            <div class="col" tal:repeat="project python:projects[:5]">
+              <div class="mini project"
+                tal:define="url python:project.getUrl(baseUrl=proBaseUrl)">
+                <div class="thumb">
+                  <a tal:attributes="href url"><img
+                    tal:attributes="src python:project.getThumbUrl(default=root+'/images/dummy_thumb.jpg')" /></a>
+                </div>
+                <div class="title">
+                  <a tal:attributes="href url"
+                    tal:content="project/getLabel"> Mental Models in
+                    the History of Knowledge </a>
+                </div>
+                <div class="author"
+                  tal:content="python:project.getContent('xdata_01')">
+                  Matteo Valleriani, Jürgen Renn</div>
+              </div>
+            </div>
+          </div>
+          <!-- /row -->
+        </div>
+        <!-- /item -->
+      </div>
+    </div>
+  </div>
+
 </body>
 </html>
\ No newline at end of file
--- a/zpt/www/main_template.zpt	Fri Sep 05 11:44:40 2014 +0200
+++ b/zpt/www/main_template.zpt	Tue Sep 30 13:59:13 2014 +0200
@@ -100,6 +100,8 @@
       <metal:block metal:define-slot="sidebar" /><!-- /sidebar -->
 
     </div><!-- /maincontent -->
+    
+    <metal:block metal:define-slot="subrow"/>
 
     <div id="footservices">
       <div class="text">