Mercurial > hg > MPIWGThesaurus
changeset 20:82e72e034b0b
Merge with 1252aeadcd2939146e19e7423e5cdd856db5e152
author | dwinter |
---|---|
date | Wed, 29 Feb 2012 09:29:17 +0100 |
parents | 5840fad81f12 (diff) 1252aeadcd29 (current diff) |
children | d801453fd85f |
files | MPIWGThesaurus.py |
diffstat | 7 files changed, 756 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/.pydevproject Fri Jan 06 10:58:49 2012 +0100 +++ b/.pydevproject Wed Feb 29 09:29:17 2012 +0100 @@ -2,7 +2,7 @@ <?eclipse-pydev version="1.0"?> <pydev_project> -<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">python2.4</pydev_property> +<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">python2.4 - zope</pydev_property> <pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python 2.4</pydev_property> <pydev_pathproperty name="org.python.pydev.PROJECT_SOURCE_PATH"> <path>/MPIWGThesaurus</path>
--- a/MPIWGThesaurus.py Fri Jan 06 10:58:49 2012 +0100 +++ b/MPIWGThesaurus.py Wed Feb 29 09:29:17 2012 +0100 @@ -27,6 +27,19 @@ import urllib2 import urllib + + +class projectHolder: + projectHolder="" + projectName="" + projectID="" + persons="" + tags={} + + def __init__(self,ID): + self.projectID=ID + self.tags={} + #Entry beschreibt jeweils einen Tag mit dem Namen "title", entries enthaelt eine Liste von Subtags (der Klasse Entry), die diesem Tag untergeordnet sind. class Entry: """publicClass""" @@ -78,14 +91,16 @@ virtuosoDAVPW="w3s45us3" virtuosoGraph="file://newpersonsFromProjects" + logpathDefault="/var/tmp/tagchanges.log" + #BTrees fuer die Tags projectPersons= OOBTree() #project --> personen IDs - projectObjects= OOBTree() + projectObjects= OOBTree() #project --> objects projectHistoricalPlaces= OOBTree() projectSuggestedTags= OOBTree() persons2Projects= OOBTree() #personenID --> projects - objects2Projects=OOBTree() + objects2Projects=OOBTree() #objects --> projects historicalPlaces2Projects=OOBTree() suggestedTags2Projects=OOBTree() personIDtoNames=OOBTree() # weist den personenIDs Klartextnamen aus dem Triplestore zu @@ -163,6 +178,7 @@ manage_options = Folder.manage_options+( {'label':'Thesaurus entries','action':'changeMPIWGThesaurusForm'}, {'label':'Manage Thesaurus','action':'manageMPIWGThesaurus'}, + {'label':'Thesaurus Log','action':'manageMPIWGThesaurusLogs'}, #{'label':'Change Publications Special','action':'changePublications_specialForm'}, ) @@ -189,6 +205,20 @@ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','manageMPIWGThesaurus.zpt')).__of__(self) return pt() + security.declareProtected('View management screens','manageMPIWGThesaurusLogs') + def manageMPIWGThesaurusLogs(self): + """form for changing the project""" + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','manageMPIWGThesaurusLog.zpt')).__of__(self) + return pt() + + def changeMPIWGThesaurusLog(self,logpath,RESPONSE=None): + """change log file path""" + self.logpath=logpath + + if RESPONSE is not None: + redirect(RESPONSE,'manage_main') + + security.declareProtected('View management screens','changeMPIWGThesaurus') def changeMPIWGThesaurus(self,approachesTxt,disciplinesTxt,periodsTxt,spacesTxt,technologiesTxt,knowledgeTransfersTxt,RESPONSE=None): """change it""" @@ -201,7 +231,124 @@ if RESPONSE is not None: redirect(RESPONSE,'manage_main') - + + + def getProjectsAndTags(self): + """projekte und tags""" + + + projectTags={} + for tag in self.tags.keys(): + logging.debug("getProjectsAndTags:"+tag) + # <div class="level1_projects" tal:repeat="proj + # python:here.getProjectsWithTag('approaches',here.getTitle(level1))"><a tal:attributes="href + # python:proj[0]"><span tal:content="python:proj[1]">my proj</span><tal:x define="person python:proj[2]"><span + # class="person_projects" tal:content="person"/></tal:x></a></div> + #</div> + + for subTag in self.tags.get(tag): + projs = self.getProjectsWithTag(tag,subTag) + if not isinstance(projs, ListType): + projs=[projs] + + for proj in projs: + + projectID=proj[0] + logging.debug("PTS"+repr(projectTags)) + project=projectTags.get(projectID,projectHolder(projectID)) + project.projectName=proj[1] + project.persons=proj[2] + logging.debug(project) + logging.debug(tag) + logging.debug("PROTS"+repr(project.tags)) + tagsOfType=project.tags.get(tag,OOSet()) + logging.debug(tagsOfType) + tagsOfType.add(subTag.decode('utf-8')) + + logging.debug("Adding %s to %s"%(subTag,projectID)) + project.tags[tag]=tagsOfType + + projectTags[projectID]=project + logging.debug("Saved %s to %s"%(repr(list(tagsOfType)),projectID)) + logging.debug(projectTags) + + + + return projectTags + + def getProjectsAndTagsTSV(self): + """get the projects as tab""" + ret="" + + #genereate headers + headers=['date','projectPath','projectName','researchers resp'] + headers.extend(list(self.tags.keys())) + ret+="\t".join(headers)+"\n" + + projectTags = self.getProjectsAndTags() + for projectID in projectTags.keys(): + retarray=[] + splitted = projectID.split("/") # hiern nur die eingetliche ID ohne den Pfad + if len(splitted)>0: + projectIDShort=splitted[-1] + retarray.append(self.lastChangeInThesaurus.get(projectIDShort,'')) + else: + retarray.append('') + retarray.append(projectID) + project = projectTags.get(projectID) + retarray.append(project.projectName) + retarray.append(project.persons) + + + + for tagType in self.tags.keys(): + tags = project.tags.get(tagType,['']) + retarray.append(";".join(tags)) + + + ret+="\t".join(retarray)+"\n" + + return ret + + def getLogpath(self): + return getattr(self,"logpath",self.logpathDefault) + + def getLogfile(self,projectID="",date=""): + + # logfile format : YYYY-MM-TT HH:mm:ss\tUSER\ttype\tprojectid\CHANGED_TAG_or_OBJECT_or_PERSON + if not os.path.exists(self.getLogpath()): + return "" + + fh = open(self.getLogpath(),"r") + lines=fh.readlines() + + if (projectID!=""): + ret=[] + for line in lines: + splitted=line.split("\t") + if splitted[3]==projectID: + ret.append(line) + + lines=ret[0:] + + if (date!=""): + ret=[] + for line in lines: + splitted=line.split("\t") + if splitted[0]>=date: + ret.append(line) + + + lines=ret[0:] + + txt= "".join(lines) + fh.close() + + + + + return txt + #In der Anzeige soll der Name der zitierten Personen in Klartext angezeigt werden, ausserdem die Varianten, wie sie tatsaechlich #in den Projekten benutzt werden @@ -450,21 +597,23 @@ for tag in tagsStored.keys(): #gehe durch alle gespeichteren tags logging.debug("checking:"+tag) - currentApproach = tagsStored.get(tag,None) - logging.debug(currentApproach) - if currentApproach is None: - currentApproach=OOSet() + projectsOfTag = tagsStored.get(tag,None) + logging.debug(projectsOfTag) + if projectsOfTag is None: + projectsOfTag=OOSet() if tag in tagList: #dieser ist getagged - currentApproach.update([projectID]); + projectsOfTag.update([projectID]); + self.storeChange("added",projectID,tag) tagList.remove(tag); else: - if currentApproach.has_key(projectID): - currentApproach.remove(projectID); - - tagsStored.update({tag:currentApproach}); + if projectsOfTag.has_key(projectID): + projectsOfTag.remove(projectID); + self.storeChange("remove",projectID,tag) + + tagsStored.update({tag:projectsOfTag}); - for tag in tagList: # alle die nich nicht abearbeitet worden muessen noch angelegt werden + for tag in tagList: # alle Tags, die nicht abgearbeitet worden sind, muessen noch angelegt werden logging.debug("adding:"+tag) newApproach=OOSet() newApproach.update([projectID]); @@ -477,7 +626,17 @@ def getTitle(self,entry): return entry.title + def getEntriesFormatted(self,entries,formatType): + errorString="<H1>template with name <em>levelFormatted</em> does not exist in the thesaurus folder!" + if not hasattr(self,'levelFormatted'): + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','levelFormatted.zpt')).__of__(self) + return pt(level1_entries=entries,type=formatType) + + + return self.levelFormatted(level1_entries=entries,type=formatType) + def getEntries(self,entry): + logging.debug("GETENTRY:"+repr(entry)) return entry.entries #nimmt ein eine Text der Form @@ -711,6 +870,9 @@ """remove""" logging.debug("remove:"+projectID+":"+value); + + self.storeChange("removeObject",projectID,value) + objects = self.getObjectsFromProject(projectID) for object in objects.keys(): @@ -719,6 +881,16 @@ logging.debug("---removed!") objects.remove(object) + #now also delete the project from the object. + objectsOfPerson=self.objects2Projects.get(object[0]) + + + if projectID in list(objectsOfPerson): + objectsOfPerson.remove(projectID) + #self.persons2Projects.update({person:projectsList}) + if (len(objectsOfPerson)==0): #loesche person aus der liste wenn keine Projekte dazu existieren. + del self.objects2Projects[object[0]] + self.projectObjects.update({projectID:objects}) retstring = self.getObjectsFromProjectAsHTML(projectID) logging.debug(retstring) @@ -728,6 +900,7 @@ def removePersonFromProject(self,projectID,value): """remove a person from the projeckt""" logging.debug("remove:"+projectID+":"+value); + self.storeChange("removePerson",projectID,value) persons = self.getPersonsFromProject(projectID) # hole alle personen die mit dem Projekt verbunden sind. for person in persons.keys(): @@ -768,6 +941,8 @@ security.declareProtected('View management screens','addPersonToProject') def addPersonToProject(self,projectID,value,label): """ add a person so the project""" + self.storeChange("addPerson",projectID,value+":"+label) + persons=self.getPersonsFromProject(projectID); logging.debug("adding:"+projectID+":"+value+":"+label); @@ -1056,8 +1231,16 @@ ret[HistoricalPlace]=list[0:] return ret + def getObjectsWithProjectIDsSortedkeys(self): + + def sortF(x,y): + return cmp(x.lower(),y.lower()) + keys = [x for x in self.getObjectsWithProjectIDs().keys()] + keys.sort(sortF) + return keys + def getObjectsWithProjectIDs(self): - """holt die getaggted Personen mit Projekten""" + """holt die getagten Personen mit Projekten""" objects = self.objects2Projects; ret={} logging.debug("Check Object:"+repr(objects.keys())) @@ -1173,6 +1356,7 @@ logging.debug("adding:"+projectID+":"+value); + self.storeChange("addObject",projectID,value) #TODO: Im moment noch keine Zuordnung zu einer ID. objects.insert([value,value]) @@ -1349,6 +1533,28 @@ return + + # self.storeChange("removePerson",projectID,value) + def storeChange(self,typeString,projectID,value): + + from time import gmtime,strftime + + + + + + + fl = open(self.getLogpath(),"a") + person = self.REQUEST.AUTHENTICATED_USER.getId() + date = strftime("%Y-%m-%d %H:%M:%S", gmtime()) + writeString ="\t".join((date,person,typeString,projectID,value)) + fl.write(writeString+"\n") + fl.flush() + fl.close() + + lastChangeInThesaurus = getattr(self,'lastChangeInThesaurus',OOBTree()) + lastChangeInThesaurus.update({projectID:date}) + self.lastChangeInThesaurus=lastChangeInThesaurus def redirect(RESPONSE,url): """mache ein redirect mit einem angehaengten time stamp um ein reload zu erzwingen"""
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/main.html Wed Feb 29 09:29:17 2012 +0100 @@ -0,0 +1,288 @@ +<!DOCTYPE html> +<!-- editing page for tags --> +<html tal:define="projectID + python:here.REQUEST.get('project','') "> + <head> + <meta http-equiv="Content-Type" content="text/html; +charset=iso-8859-1" /> +<base tal:attributes="href python:here.MPIWGrootURL()+'/thesaurus/'"/> +<title>Project tagger</title> + <link type="text/css" href="./jquery-ui/css/ui-lightness/jquery-ui-1.8.11.custom.css" rel="stylesheet" /> + <script type="text/javascript" src="./jquery-ui/js/jquery-1.5.1.min.js"></script> + <script type="text/javascript" src="./jquery-ui/js/jquery-ui-1.8.11.custom.min.js"></script> + <script type="text/javascript" src="./thesaurus.js"></script> + <link type="text/css" href="./tagging.css" rel="stylesheet" /> + </head> + <body> + <h3> The MPIWG's tagger - BETA - Version </h3> + <form method="get" action="changeTags"> + <input type="hidden" name="projectID" id="projectID" tal:attributes="value python:projectID"/> + <h1>Tagging:<tal:x content="python:projectID"/></h1> + <div id="tagView"> You have selected <span id="numberOfTags">0</span> + of <span id="maximumNumberOfTags">8</span> + + <div id="tagText">You have selected toomany tags!</div> + <br/><br/> + <div>Selected Tags: <span id="showTags"></span></div> + <input id="saveTags" type="submit" value="save tags"/> + </div> + <!-- Accordion --> + <h2 class="demoHeaders">Project Categories</h2> + + <div id="accordion"> + <div> + <h3><a href="#">Approches</a></h3> + <div> + <p><a href="#" id="approachesHelp_link" class="helpLink ui-state-default + ui-corner-all"><span class="ui-icon + ui-icon-help"></span>Help</a></p> + <div class="level1" tal:repeat="level1 + python:here.getApproaches()"><input class="tags approache" type="checkbox" + tal:attributes="value + python:here.getTitle(level1)" name="approaches"/><tal:x tal:content="python:here.getTitle(level1)">Lorem</tal:x> + <tal:y condition="python:len(here.getEntries(level1))>0"> + <div class="level2" tal:repeat="level2 + python:here.getEntries(level1)"><input class="tags" type="checkbox" + tal:attributes="value + python:here.getTitle(level1)+'_'+here.getTitle(level2)" name="approaches"/><tal:x tal:content="python:here.getTitle(level2)">Lor</tal:x></div> + </tal:y> + </div> + <!-- Dialog approaches --> + <p><a href="#" id="dialog_link_approaches" class="ui-state-default + ui-corner-all dialog_link"><span class="ui-icon + ui-icon-newwin"></span>Suggest new tag</a></p> + </div> + </div> + <div> + <div> + <h3><a href="#">Disciplines</a></h3> + + <div> + <div class="level1" tal:repeat="level1 + python:here.getDisciplines()"><input class="tags" + type="checkbox" + tal:attributes="value + python:here.getTitle(level1)" name="disciplines"/><tal:x tal:content="python:here.getTitle(level1)">Lorem</tal:x> + <tal:y condition="python:len(here.getEntries(level1))>0"> + <div class="level2" tal:repeat="level2 + python:here.getEntries(level1)"><input type="checkbox" + tal:attributes="value + python:here.getTitle(level1)+'_'+here.getTitle(level2)" name="disciplines"/><tal:x tal:content="python:here.getTitle(level2)">Lor</tal:x></div> + </tal:y> + <!-- Dialog approaches --> + + </div> + <p><a href="#" id="dialog_link_disciplines" class="ui-state-default + ui-corner-all dialog_link"><span class="ui-icon + ui-icon-newwin"></span>Suggest new tag</a></p> + </div> + <div> + + <h3><a href="#">Periods</a></h3> + + <div> + + <div class="level1" tal:repeat="level1 + python:here.getPeriods()"><input type="checkbox" + tal:attributes="value + python:here.getTitle(level1)" name="periods"/><tal:x tal:content="python:here.getTitle(level1)">Lorem</tal:x> + <tal:y condition="python:len(here.getEntries(level1))>0"> + <div class="level2" tal:repeat="level2 + python:here.getEntries(level1)"><input class="tags" + type="checkbox" + tal:attributes="value + python:here.getTitle(level1)+'_'+here.getTitle(level2)" name="periods"/><tal:x tal:content="python:here.getTitle(level2)">Lor</tal:x></div> + </tal:y> + </div> + <p><a href="#" id="dialog_link_periods" class="ui-state-default + ui-corner-all dialog_link"><span class="ui-icon + ui-icon-newwin"></span>Suggest new tag</a></p> + </div> + <div> + <h3><a href="#">People</a></h3> + <div> + <p>Currently attached to the project</p> + <div id="persons">replace</div> + <div class="ui-widget"> + <label for="personAdd">Add person to the project: </label> + <input id="personAdd"/> + <input type="button" id="personSearchButton" value="search"> + <div id="personInfo"/> + </div> + </div> + </div> + <div> + + <h3><a href="#">Spaces</a></h3> + <div> + <p><a href="#" id="spacesHelp_link" class="helpLink ui-state-default + ui-corner-all"><span class="ui-icon + ui-icon-help"></span>Help</a></p> + + <div class="level1" tal:repeat="level1 + python:here.getSpaces()"><input type="checkbox" class="tags" + tal:attributes="value + python:here.getTitle(level1)" name="spaces"/><tal:x tal:content="python:here.getTitle(level1)">Lorem</tal:x> + <tal:y condition="python:len(here.getEntries(level1))>0"> + <div class="level2" tal:repeat="level2 + python:here.getEntries(level1)"><input type="checkbox" class="tags" + tal:attributes="value + python:here.getTitle(level1)+'_'+here.getTitle(level2)" name="spaces"/><tal:x tal:content="python:here.getTitle(level2)">Lor</tal:x></div> + </tal:y> + </div> + <p><a href="#" id="dialog_link_spaces" class="ui-state-default + ui-corner-all dialog_link"><span class="ui-icon + ui-icon-newwin"></span>Suggest + new + tag</a></p> + + <div> + <p>Free Text for <em>Historical places</em> (only + displayed if the tag <em>Historical terms</em> above + is set.</p> + <p>Currently attached to the project</p> + <div id="historicalPlaces">replace</div> + <div class="ui-widget"> + <label for="Add">Add place to the project: </label> + <input id="historicalPlaceAdd"/> + <input type="button" id="historicalPlaceAddButton" value="add"> + </div> + </div> + </div> + <div> + <h3><a href="#">Objects</a></h3> + <div> + <p><a href="#" id="objectsHelp_link" class="helpLink ui-state-default + ui-corner-all"><span class="ui-icon + ui-icon-help"></span>Help</a></p> + + <p>Currently attached to the project</p> + <div id="objects">replace</div> + <div class="ui-widget"> + <label for="objectAdd">Add object to the project: </label> + <input id="objectAdd"/> + <input type="button" id="objectAddButton" value="add"> + </div> + </div> + </div> + + <div> + + <h3><a href="#">Technologies</a></h3> + + <div> + <div class="level1" tal:repeat="level1 + python:here.getTechnologies()"><input type="checkbox" class="tags" + tal:attributes="value + python:here.getTitle(level1)" name="technologies"/><tal:x tal:content="python:here.getTitle(level1)">Lorem</tal:x> + <tal:y condition="python:len(here.getEntries(level1))>0"> + <div class="level2" tal:repeat="level2 + python:here.getEntries(level1)"><input type="checkbox" class="tags" + tal:attributes="value + python:here.getTitle(level1)+'_'+here.getTitle(level2)" name="technologies"/><tal:x tal:content="python:here.getTitle(level2)">Lor</tal:x></div> + </tal:y> + </div> + <p><a href="#" id="dialog_link_technologies" class="ui-state-default + ui-corner-all dialog_link"><span class="ui-icon + ui-icon-newwin"></span>Suggest new tag</a></p> + </div> + <div> + + <h3><a href="#">Knowledge Transfers</a></h3> + <div> + <p><a href="#" id="transfersHelp_link" class="helpLink ui-state-default + ui-corner-all"><span class="ui-icon + ui-icon-help"></span>Help</a></p> + + <div class="level1" tal:repeat="level1 + python:here.getKnowledgeTransfers()"><input type="checkbox" class="tags" + tal:attributes="value + python:here.getTitle(level1)" name="transfers"/><tal:x tal:content="python:here.getTitle(level1)">Lorem</tal:x> + <tal:y condition="python:len(here.getEntries(level1))>0"> + <div class="level2" tal:repeat="level2 + python:here.getEntries(level1)"><input type="checkbox" class="tags" + tal:attributes="value + python:here.getTitle(level1)+'_'+here.getTitle(level2)" name="transfers"/><tal:x tal:content="python:here.getTitle(level2)">Lor</tal:x></div> + </tal:y> + </div> + <p><a href="#" id="dialog_link_transfers" class="ui-state-default + ui-corner-all dialog_link"><span class="ui-icon + ui-icon-newwin"></span>Suggest new tag</a></p> + </div> + </div> + + <!-- ui-dialog tags--> + <div id="dialog" title="New Tag"> + <p>Suggest a new tag</p> + <input type="hidden" id="suggest_newTag_type"/> + <table> + <tr> + <td>TagName:</td><td> <input size="30" + id="suggest_newTag"/></td> + </tr> + <tr> + <td>Comment:</td><td> <textarea rows="10" cols="30" id="suggest_newTag_comment"></textarea></td> + </tr> + <tr> + <td>Entered by:</td><td><input type="text" id="suggest_newTag_userName" + tal:attributes="value + user/getUserName"/></td><td>Your MPIWG + username (will not be published + anywhere)</td> + </tr> + </table> + </div> + + <!-- ui-dialog persons--> + <div id="dialogPersons" title="New Person"> + <p>Create a new person</p> + <table> + <tr> + <td>Name of the Person:</td><td> <input size="30" + id="suggest_newPerson"/></td> + <td> Write the name in the way it + should be displayed</td> + <tr> + <td>Comment:</td><td> <textarea rows="10" + cols="30" + id="suggest_newPerson_comment"></textarea></td><td>Some + remarks to identify the person or a link to + a website describing the person.</td> + </tr> + <tr> + <td>Entered by:</td><td><input type="text" id="suggest_newPerson_userName" + tal:attributes="value + user/getUserName"/></td><td>Your MPIWG + username (will not be published + anywhere)</td> + </tr> + </table> + </div> + + <div id="approachesHelp" title="Help Approaches" class="helpWindow"> + <h5>Methodological approaches</h5> + <p>Others than History of Science</p> + <h5>Historical epistemology approaches</h5> + <p>This category reflects the main MPIWG-themes of the past and current research</p> + </div> + + <div id="spacesHelp" title="Help Space" class="helpWindow"> + <p>Is the geographical area important to your project, does it deal with specific sites, institutions or spaces of knowledge? </p> + </div> + + <div id="objectsHelp" title="Help Objects" class="helpWindow"> + <p>Are specific natural or artificial objects important to your research project? </p> + </div> + + <div id="transfersHelp" title="Help Objects" class="helpWindow"> + <p>How are scientific findings recorded, how is knowledge conveyed + how does it circulate? Are these aspects important to your + research topic? </p> + <h5>Modes of communication</h5> + <p>e.g. language, braille, etc.</p> + <h5>Science education </h5> + <p>e.g. academic and non-academic</p> + </div> + </form> + </body> +</html> \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/show2.html Wed Feb 29 09:29:17 2012 +0100 @@ -0,0 +1,197 @@ +<!DOCTYPE html> +<!-- display the tags --> +<html metal:use-macro="here/pro_sec_template/macros/page"> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> + <title>MPIWG Tags</title> + <tal:block metal:fill-slot="head"> + <!--<link type="text/css" + href="./jquery-ui/css/ui-lightness/jquery-ui-1.8.11.custom.css" + rel="stylesheet" /> --> + <link type="text/css" href="./jquery-mpiwg.css" rel="stylesheet" /> + <script type="text/javascript" src="./jquery-ui/js/jquery-1.5.1.min.js"></script> + <script type="text/javascript" src="./jquery-ui/js/jquery-ui-1.8.11.custom.min.js"></script> + <script type="text/javascript"> + + // open and close the tags + + jQuery(document).ready(function(){ + $('#accordion h3').click(function() { + $(this).next().toggle('slow'); + return false; + }).next().hide(); + }); + + $(function(){ + + + + // Accordion + //$("#accordion").accordion({ header: "h3" }); + + + $('.projectsWindow').hide(); + + + //open and close the projects + $('.showApproach').click(function(){ + + var tp = $(this).parent(); + var wd= $(tp).find('div.projectsWindow'); + wd.toggle(); + /*$(tp).find('span.ui-icon').toggleClass('ui-icon-triangle-1-s');*/ + + return false; + }); + + }); + + + </script> + <style type="text/css"> + /*demo page css*/ + body{ font: 62.5% "Trebuchet MS", sans-serif; margin: 50px;} + + .level1 { + margin-left: 6em; + } + + .demoHeaders { + margin-top: 2em; + } + + #dialog_link {padding: .4em 1em .4em 20px;text-decoration: none;position: relative;} + #dialog_link span.ui-icon {margin: 0 5px 0 0;position: + absolute;left: .2em;top: 50%;margin-top: -8px;} + + .helpLink {padding: .4em 1em .4em 20px;text-decoration: none;position: relative;} + .helpLink span.ui-icon {margin: 0 5px 0 0;position: + absolute;left: .2em;top: 50%;margin-top: -8px;} + + .level2 {margin-left:10pt} + ul#icons {margin: 0; padding: 0;} + ul#icons li {margin: 2px; position: relative; padding: 4px 0; cursor: pointer; float: left; list-style: none;} + ul#icons span.ui-icon {float: left; margin: 0 4px;} + + .level1_projects {margin-left: 50pt; + background: url(../images/arr_right.gif) no-repeat #f5daaf; + padding: 6px 6px 6px 20px; + border-bottom: 1px solid #f3be7c; + width:500px; + + .arrowC +} + + + + .level2_projects {margin-left:50pt; + background: url(../images/arr_right.gif) no-repeat #f5daaf; + padding: 6px 6px 6px 20px; + border-bottom: 1px solid #f3be7c; + width:500px; +} + + + .level1_projects a{ + + + } + + + .person_projects { + padding-left:5pt; + font-style:italic + } + + .showApproach { + color:#EA8500; + cursor:pointer; + } + + .showApproach:hover { + text-decoration: underline; + } + </style> + </tal:block> + </head> + <body> + <div class="main" metal:fill-slot="center"> + <div class="center_wide dept"> + + <!-- Accordion --> + <h3>This overview is currently under construction!</h3> + <h2 class="demoHeaders">Project Categories</h2> + + <div id="accordion"> + <div> + <h3><a href="#">Approaches</a></h3> + <div> + <tal:x replace="structure python:here.getEntriesFormatted(here.getApproaches(),'approaches')"/> + </div> + + <h3><a href="#">Disciplines</a></h3> + <div> + <tal:x replace="structure python:here.getEntriesFormatted(here.getDisciplines(),'disciplines')"/> + </div> + + + <h3><a href="#">Periods</a></h3> + <div> + <tal:x replace="structure python:here.getEntriesFormatted(here.getPeriods(),'periods')"/> + </div> + + + <h3><a href="#">People</a></h3> + <div> + <div class="level1" tal:repeat="level1 python:here.getPersonsWithProjectIDs()[1]"><span class="showApproach" tal:content="python:here.getNamesFromID(level1)">Lorem</span> + <div class="projectsWindow"> + <div class="level1_projects" tal:repeat="proj python:here.getPersonsWithProjectIDs()[0][level1]"> + <a tal:attributes="href python:proj[0]" tal:content="python:proj[1]">my proj</a> + <tal:x define="person + python:proj[2]"><span class="person_projects" + tal:content="person"/></tal:x> + </div> + </div> + + </div> + </div> + + <h3><a href="#">Spaces</a></h3> + <div> + <tal:x replace="structure python:here.getEntriesFormatted(here.getSpaces(),'spaces')"/> + </div> + + + <h3><a href="#">Objects</a></h3> + <div> + <div class="level1" tal:repeat="level1 python:here.getObjectsWithProjectIDsSortedkeys()"><span class="showApproach" tal:content="python:level1">Lorem</span> + <div title="Projects" class="projectsWindow"> + + <div class="level1_projects" tal:repeat="proj python:here.getObjectsWithProjectIDs()[level1]"> + <a tal:attributes="href python:proj[0]" tal:content="python:proj[1]">my proj</a> + <tal:x define="person + python:proj[2]"><span class="person_projects" + tal:content="person"/></tal:x> + </div> + </div> + + </div> + </div> + + <h3><a href="#">Technologies</a></h3> + <div> + <tal:x replace="structure python:here.getEntriesFormatted(here.getTechnologies(),'technologies')"/> + </div> + + + <h3><a href="#">Knowledge Transfers</a></h3> + <div> + <tal:x replace="structure python:here.getEntriesFormatted(here.getKnowledgeTransfers(),'transfers')"/> + </div> + + </div> + </div> + </div> + </div> + </body> +</html> \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/zpt/levelFormatted.zpt Wed Feb 29 09:29:17 2012 +0100 @@ -0,0 +1,31 @@ +<!-- exmample for level template --> + +<div class="level1" tal:repeat="level1 + python:options['level1_entries']"> + <span class="showApproach" tal:content="python:here.getTitle(level1) +'('+ str(len(here.getProjectsWithTag(options['type'],here.getTitle(level1)))) +')' ">Lorem</span> + <div class="projectsWindow"> + <div class="level1_projects" tal:repeat="proj + python:here.getProjectsWithTag(options['type'],here.getTitle(level1))"><a tal:attributes="href + python:proj[0]"><span tal:content="python:proj[1]">my proj</span></a><tal:x define="person python:proj[2]"><span + class="person_projects" tal:content="person"/></tal:x></div> + </div> + <tal:y condition="python:len(here.getEntries(level1))>0"> + + <div class="level2" tal:repeat="level2 + python:here.getEntries(level1)"> + <tal:x define="subitems + python:here.getProjectsWithTag(options['type'],here.getTitle(level1)+'_'+here.getTitle(level2))" + condition="python:len(subitems)>0"> + <span class="showApproach" + tal:content="python:here.getTitle(level2) +' + ('+str(len(subitems))+')'">Lor</span> + <div class="projectsWindow"> + <div class="level2_projects" tal:repeat="proj python:subitems"> + <a tal:attributes="href python:proj[0]"><span tal:content="python:proj[1]">my proj</span></a> + <tal:x define="person python:proj[2]"><span class="person_projects" tal:content="person"/></tal:x></div> + </div> + + </tal:x> + </div> + </tal:y> +</div> \ No newline at end of file
--- a/zpt/manageMPIWGThesaurus.zpt Fri Jan 06 10:58:49 2012 +0100 +++ b/zpt/manageMPIWGThesaurus.zpt Wed Feb 29 09:29:17 2012 +0100 @@ -7,6 +7,9 @@ <li><a href="getPersonsWithProjectIDs?check=bool:True">Hole all Personen mit ProjectIDs, raeumt zu gleich den Cache Persone-->ProjectID auf</a></li> <li><a href="rearangePersonIDsHTML">Ordne neue IDs vorhandenen Personen zu, insbesondere ersetze temporaere IDs durch GND oder andere,</a></li> <li><a href="getUnifyPersonsList">Ordne GND ids zu, falls bisher IDs aus anderen Kontexten vergeben wurden.</a></li> + +<h3>Overview</h3> +<li><a href="getProjectsAndTagsTSV">Uebersicht ueber alle vergebenenen Tags (TAB-getrennte Liste) </a></li> </ul> </body> </html> \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/zpt/manageMPIWGThesaurusLog.zpt Wed Feb 29 09:29:17 2012 +0100 @@ -0,0 +1,16 @@ +<html> +<body> +<h3>Tag log file</h3> +<div> +<form action="changeMPIWGThesaurusLog"> +logfile <input len="30" tal:attributes="value here/getLogpath" name="logpath"/><input type="submit"/> +</form> +</div> + +<form> +Date: <input tal:attributes="value python:here.REQUEST.get('date','')" name="date"/> ProjectID: <input name="project" tal:attributes="value python:here.REQUEST.get('project','')"/> <input type="submit" value="filter"/> +</form> +<textarea rows="40" cols="100" tal:content="python:here.getLogfile(here.REQUEST.get('project',''),here.REQUEST.get('date',''))"></textarea> + +</body> +</html> \ No newline at end of file