Mercurial > hg > documentViewer
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): |