comparison documentViewer.py @ 526:3f375a048402

moved search and dict into separate layers. removed search_template. added tocMode=concordance. fixed bug with paging tocs.
author casties
date Tue, 10 Apr 2012 19:41:44 +0200
parents 70c3ae5eac7c
children f8a5f63eafc0
comparison
equal deleted inserted replaced
525:70c3ae5eac7c 526:3f375a048402
14 import logging 14 import logging
15 import math 15 import math
16 import urlparse 16 import urlparse
17 import re 17 import re
18 import string 18 import string
19 import json
19 20
20 from SrvTxtUtils import getInt, utf8ify, getText, getHttpData, refreshingImageFileIndexHtml 21 from SrvTxtUtils import getInt, utf8ify, getText, getHttpData, refreshingImageFileIndexHtml
21 22
22 def serializeNode(node, encoding="utf-8"): 23 def serializeNode(node, encoding="utf-8"):
23 """returns a string containing node as XML""" 24 """returns a string containing node as XML"""
121 viewer_text = PageTemplateFile('zpt/viewer_text', globals()) 122 viewer_text = PageTemplateFile('zpt/viewer_text', globals())
122 viewer_xml = PageTemplateFile('zpt/viewer_xml', globals()) 123 viewer_xml = PageTemplateFile('zpt/viewer_xml', globals())
123 viewer_images = PageTemplateFile('zpt/viewer_images', globals()) 124 viewer_images = PageTemplateFile('zpt/viewer_images', globals())
124 viewer_index = PageTemplateFile('zpt/viewer_index', globals()) 125 viewer_index = PageTemplateFile('zpt/viewer_index', globals())
125 # available layer types 126 # available layer types
126 availableLayers = {'text': ['dict','search','gis','annotator'], 127 builtinLayers = {'text': ['dict','search','gis','annotator'],
127 'xml': None, 'images': None, 'index': None} 128 'xml': None, 'images': None, 'index': None}
129 availableLayers = builtinLayers;
128 # layer templates 130 # layer templates
131 layer_text_dict = PageTemplateFile('zpt/layer_text_dict', globals())
132 layer_text_search = PageTemplateFile('zpt/layer_text_search', globals())
129 layer_text_annotator = PageTemplateFile('zpt/layer_text_annotator', globals()) 133 layer_text_annotator = PageTemplateFile('zpt/layer_text_annotator', globals())
130 layer_text_gis = PageTemplateFile('zpt/layer_text_gis', globals()) 134 layer_text_gis = PageTemplateFile('zpt/layer_text_gis', globals())
131 # toc templates 135 # toc templates
132 toc_thumbs = PageTemplateFile('zpt/toc_thumbs', globals()) 136 toc_thumbs = PageTemplateFile('zpt/toc_thumbs', globals())
133 toc_text = PageTemplateFile('zpt/toc_text', globals()) 137 toc_text = PageTemplateFile('zpt/toc_text', globals())
134 toc_figures = PageTemplateFile('zpt/toc_figures', globals()) 138 toc_figures = PageTemplateFile('zpt/toc_figures', globals())
139 toc_concordance = PageTemplateFile('zpt/toc_concordance', globals())
135 toc_none = PageTemplateFile('zpt/toc_none', globals()) 140 toc_none = PageTemplateFile('zpt/toc_none', globals())
136 # other templates 141 # other templates
137 common_template = PageTemplateFile('zpt/common_template', globals()) 142 common_template = PageTemplateFile('zpt/common_template', globals())
138 search_template = PageTemplateFile('zpt/search_template', globals())
139 info_xml = PageTemplateFile('zpt/info_xml', globals()) 143 info_xml = PageTemplateFile('zpt/info_xml', globals())
140 docuviewer_css = ImageFile('css/docuviewer.css',globals()) 144 docuviewer_css = ImageFile('css/docuviewer.css',globals())
141 # make ImageFile better for development 145 # make ImageFile better for development
142 docuviewer_css.index_html = refreshingImageFileIndexHtml 146 docuviewer_css.index_html = refreshingImageFileIndexHtml
143 jquery_js = ImageFile('js/jquery.js',globals()) 147 jquery_js = ImageFile('js/jquery.js',globals())
406 410
407 def getLinkAmp(self, param=None, val=None, params=None, baseUrl=None, duplicates='comma'): 411 def getLinkAmp(self, param=None, val=None, params=None, baseUrl=None, duplicates='comma'):
408 """link to documentviewer with parameter param set to val""" 412 """link to documentviewer with parameter param set to val"""
409 return self.getLink(param=param, val=val, params=params, baseUrl=baseUrl, paramSep='&', duplicates=duplicates) 413 return self.getLink(param=param, val=val, params=params, baseUrl=baseUrl, paramSep='&', duplicates=duplicates)
410 414
415
416 def setAvailableLayers(self, newLayerString=None):
417 """sets availableLayers to newLayerString or tries to autodetect available layers.
418 assumes layer templates have the form layer_{m}_{l} for layer l in mode m.
419 newLayerString is parsed as JSON."""
420 if newLayerString is not None:
421 try:
422 layers = json.loads(newLayerString)
423 if 'text' in layers and 'images' in layers:
424 self.availableLayers = layers
425 return
426 except:
427 pass
428
429 logging.error("invalid layers=%s! autodetecting..."%repr(newLayerString))
430
431 # start with builtin layers
432 self.availableLayers = self.builtinLayers.copy()
433 # add layers from templates
434 for t in self.template:
435 if t.startswith('layer_'):
436 try:
437 (x, m, l) = t.split('_', 3)
438 if m not in self.availableLayers:
439 # mode m doesn't exist -> new list
440 self.availableLayers[m] = [l]
441
442 else:
443 # m exists -> append
444 if l not in self.availableLayers[m]:
445 self.availableLayers[m].append()
446
447 except:
448 pass
449
450 def getAvailableLayersJson(self):
451 """returns available layers as JSON string."""
452 return json.dumps(self.availableLayers)
453
411 454
412 def getInfo_xml(self,url,mode): 455 def getInfo_xml(self,url,mode):
413 """returns info about the document as XML""" 456 """returns info about the document as XML"""
414 if not self.digilibBaseUrl: 457 if not self.digilibBaseUrl:
415 self.digilibBaseUrl = self.findDigilibUrl() or "http://digilib.mpiwg-berlin.mpg.de/digitallibrary" 458 self.digilibBaseUrl = self.findDigilibUrl() or "http://digilib.mpiwg-berlin.mpg.de/digitallibrary"
835 if start > 1: 878 if start > 1:
836 batch['prevStart'] = max(start - grpsize, 1) 879 batch['prevStart'] = max(start - grpsize, 1)
837 else: 880 else:
838 batch['prevStart'] = None 881 batch['prevStart'] = None
839 882
840 if start + grpsize < maxIdx: 883 if start + grpsize <= maxIdx:
841 batch['nextStart'] = start + grpsize 884 batch['nextStart'] = start + grpsize
842 else: 885 else:
843 batch['nextStart'] = None 886 batch['nextStart'] = None
844 887
845 batch['pages'] = pages 888 batch['pages'] = pages
861 904
862 batch['batches'] = batches 905 batch['batches'] = batches
863 # list of elements in this batch 906 # list of elements in this batch
864 this = [] 907 this = []
865 j = 0 908 j = 0
866 for i in range(start, min(start+size, end)): 909 for i in range(start, min(start+size, end+1)):
867 if data: 910 if data:
868 if fullData: 911 if fullData:
869 d = data[i] 912 d = data.get(i, None)
870 else: 913 else:
871 d = data[j] 914 d = data.get(j, None)
872 j += 1 915 j += 1
873 916
874 else: 917 else:
875 d = i+1 918 d = i+1
876 919
885 if start + size < end: 928 if start + size < end:
886 batch['nextStart'] = start + size 929 batch['nextStart'] = start + size
887 else: 930 else:
888 batch['nextStart'] = None 931 batch['nextStart'] = None
889 932
933 logging.debug("getBatch start=%s size=%s end=%s batch=%s"%(start,size,end,repr(batch)))
890 return batch 934 return batch
891 935
892 936
893 security.declareProtected('View management screens','changeDocumentViewerForm') 937 security.declareProtected('View management screens','changeDocumentViewerForm')
894 changeDocumentViewerForm = PageTemplateFile('zpt/changeDocumentViewer', globals()) 938 changeDocumentViewerForm = PageTemplateFile('zpt/changeDocumentViewer', globals())
895 939
896 def changeDocumentViewer(self,title="",digilibBaseUrl=None,thumbrows=2,thumbcols=5,authgroups='mpiwg',RESPONSE=None): 940 def changeDocumentViewer(self,title="",digilibBaseUrl=None,thumbrows=2,thumbcols=5,authgroups='mpiwg',availableLayers=None,RESPONSE=None):
897 """init document viewer""" 941 """init document viewer"""
898 self.title=title 942 self.title=title
899 self.digilibBaseUrl = digilibBaseUrl 943 self.digilibBaseUrl = digilibBaseUrl
900 self.thumbrows = thumbrows 944 self.thumbrows = thumbrows
901 self.thumbcols = thumbcols 945 self.thumbcols = thumbcols
903 try: 947 try:
904 # assume MetaDataFolder instance is called metadata 948 # assume MetaDataFolder instance is called metadata
905 self.metadataService = getattr(self, 'metadata') 949 self.metadataService = getattr(self, 'metadata')
906 except Exception, e: 950 except Exception, e:
907 logging.error("Unable to find MetaDataFolder 'metadata': "+str(e)) 951 logging.error("Unable to find MetaDataFolder 'metadata': "+str(e))
952
953 self.setAvailableLayers(availableLayers)
908 954
909 if RESPONSE is not None: 955 if RESPONSE is not None:
910 RESPONSE.redirect('manage_main') 956 RESPONSE.redirect('manage_main')
911 957
912 def manage_AddDocumentViewerForm(self): 958 def manage_AddDocumentViewerForm(self):