version 1.175.2.23, 2011/08/10 19:18:03
|
version 1.175.2.28, 2011/08/17 15:00:31
|
Line 1
|
Line 1
|
from OFS.Folder import Folder |
from OFS.Folder import Folder |
|
from OFS.Image import File |
from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate |
from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate |
from Products.PageTemplates.PageTemplateFile import PageTemplateFile |
from Products.PageTemplates.PageTemplateFile import PageTemplateFile |
from AccessControl import ClassSecurityInfo |
from AccessControl import ClassSecurityInfo |
Line 122 class documentViewer(Folder):
|
Line 123 class documentViewer(Folder):
|
"""MetaDataFolder instance""" |
"""MetaDataFolder instance""" |
|
|
# templates and forms |
# templates and forms |
|
viewer_text = PageTemplateFile('zpt/viewer_text', globals()) |
|
viewer_images = PageTemplateFile('zpt/viewer_images', globals()) |
viewer_main = PageTemplateFile('zpt/viewer_main', globals()) |
viewer_main = PageTemplateFile('zpt/viewer_main', globals()) |
toc_thumbs = PageTemplateFile('zpt/toc_thumbs', globals()) |
toc_thumbs = PageTemplateFile('zpt/toc_thumbs', globals()) |
toc_text = PageTemplateFile('zpt/toc_text', globals()) |
toc_text = PageTemplateFile('zpt/toc_text', globals()) |
Line 134 class documentViewer(Folder):
|
Line 137 class documentViewer(Folder):
|
page_main_xml = PageTemplateFile('zpt/page_main_xml', globals()) |
page_main_xml = PageTemplateFile('zpt/page_main_xml', globals()) |
page_main_pureXml = PageTemplateFile('zpt/page_main_pureXml', globals()) |
page_main_pureXml = PageTemplateFile('zpt/page_main_pureXml', globals()) |
head_main = PageTemplateFile('zpt/head_main', globals()) |
head_main = PageTemplateFile('zpt/head_main', globals()) |
docuviewer_css = PageTemplateFile('css/docuviewer.css', globals()) |
|
info_xml = PageTemplateFile('zpt/info_xml', globals()) |
info_xml = PageTemplateFile('zpt/info_xml', globals()) |
|
# TODO: can this be nicer? |
|
docuviewer_css = File('docuviewer_css','',open(os.path.join(package_home(globals()),'css/docuviewer.css')), content_type='text/css') |
|
|
|
|
thumbs_main_rss = PageTemplateFile('zpt/thumbs_main_rss', globals()) |
thumbs_main_rss = PageTemplateFile('zpt/thumbs_main_rss', globals()) |
Line 209 class documentViewer(Folder):
|
Line 213 class documentViewer(Folder):
|
"""get all gis places """ |
"""get all gis places """ |
return self.template.fulltextclient.getAllGisPlaces(**args) |
return self.template.fulltextclient.getAllGisPlaces(**args) |
|
|
def getTranslate(self, **args): |
def getWordInfo(self, **args): |
"""get translate""" |
"""get translate""" |
return self.template.fulltextclient.getTranslate(**args) |
return self.template.fulltextclient.getWordInfo(**args) |
|
|
def getLemma(self, **args): |
def getLemma(self, **args): |
"""get lemma""" |
"""get lemma""" |
Line 310 class documentViewer(Folder):
|
Line 314 class documentViewer(Folder):
|
|
|
# stringify viewType |
# stringify viewType |
if isinstance(viewType, list): |
if isinstance(viewType, list): |
|
logging.debug("index_html: viewType is list:%s"%viewType) |
viewType = ','.join([t for t in viewType if t]) |
viewType = ','.join([t for t in viewType if t]) |
|
|
pageinfo = self.getPageinfo(start=start, current=pn, docinfo=docinfo, viewMode=viewMode, viewType=viewType, tocMode=tocMode) |
pageinfo = self.getPageinfo(start=start, current=pn, docinfo=docinfo, viewMode=viewMode, viewType=viewType, tocMode=tocMode) |
Line 346 class documentViewer(Folder):
|
Line 351 class documentViewer(Folder):
|
url = self.template.zogilib.getDLBaseUrl() |
url = self.template.zogilib.getDLBaseUrl() |
return url |
return url |
|
|
|
def getScalerUrl(self, fn=None, pn=None, dw=100, dh=100, docinfo=None): |
|
"""returns URL to digilib Scaler with params""" |
|
url = None |
|
if docinfo is not None: |
|
url = docinfo.get('imageURL', None) |
|
|
|
if url is None: |
|
url = "%s/servlet/Scaler?"%self.digilibBaseUrl |
|
if fn is None and docinfo is not None: |
|
fn = docinfo.get('imagePath','') |
|
|
|
url += "fn=%s"%fn |
|
|
|
if pn: |
|
url += "&pn=%s"%pn |
|
|
|
url += "&dw=%s&dh=%s"%(dw,dh) |
|
return url |
|
|
def getDocumentViewerURL(self): |
def getDocumentViewerURL(self): |
"""returns the URL of this instance""" |
"""returns the URL of this instance""" |
return self.absolute_url() |
return self.absolute_url() |
|
|
def getStyle(self, idx, selected, style=""): |
def getStyle(self, idx, selected, style=""): |
"""returns a string with the given style and append 'sel' if path == selected.""" |
"""returns a string with the given style and append 'sel' if idx == selected.""" |
#logger("documentViewer (getstyle)", logging.INFO, "idx: %s selected: %s style: %s"%(idx,selected,style)) |
#logger("documentViewer (getstyle)", logging.INFO, "idx: %s selected: %s style: %s"%(idx,selected,style)) |
if idx == selected: |
if idx == selected: |
return style + 'sel' |
return style + 'sel' |
else: |
else: |
return style |
return style |
|
|
def getParams(self, param=None, val=None, params=None): |
def getParams(self, param=None, val=None, params=None, duplicates=None): |
"""returns dict with URL parameters. |
"""returns dict with URL parameters. |
|
|
Takes URL parameters and additionally param=val or dict params. |
Takes URL parameters and additionally param=val or dict params. |
Line 375 class documentViewer(Folder):
|
Line 399 class documentViewer(Folder):
|
|
|
# change more params |
# change more params |
if params is not None: |
if params is not None: |
for k in params.keys(): |
for (k, v) in params.items(): |
v = params[k] |
|
if v is None: |
if v is None: |
# val=None removes param |
# val=None removes param |
if newParams.has_key(k): |
if newParams.has_key(k): |
Line 385 class documentViewer(Folder):
|
Line 408 class documentViewer(Folder):
|
else: |
else: |
newParams[k] = v |
newParams[k] = v |
|
|
|
if duplicates: |
|
# eliminate lists (coming from duplicate keys) |
|
for (k,v) in newParams.items(): |
|
if isinstance(v, list): |
|
if duplicates == 'comma': |
|
# make comma-separated list of non-empty entries |
|
newParams[k] = ','.join([t for t in v if t]) |
|
elif duplicates == 'first': |
|
# take first non-empty entry |
|
newParams[k] = [t for t in v if t][0] |
|
|
return newParams |
return newParams |
|
|
def getLink(self, param=None, val=None, params=None, baseUrl=None, paramSep='&'): |
def getLink(self, param=None, val=None, params=None, baseUrl=None, paramSep='&', duplicates='comma'): |
"""returns URL to documentviewer with parameter param set to val or from dict params""" |
"""returns URL to documentviewer with parameter param set to val or from dict params""" |
urlParams = self.getParams(param=param, val=val, params=params) |
urlParams = self.getParams(param=param, val=val, params=params, duplicates=duplicates) |
# quote values and assemble into query string (not escaping '/') |
# quote values and assemble into query string (not escaping '/') |
ps = paramSep.join(["%s=%s"%(k,urllib.quote_plus(unicode(v),'/')) for (k, v) in urlParams.items()]) |
ps = paramSep.join(["%s=%s"%(k,urllib.quote_plus(unicode(v),'/')) for (k, v) in urlParams.items()]) |
if baseUrl is None: |
if baseUrl is None: |
Line 398 class documentViewer(Folder):
|
Line 432 class documentViewer(Folder):
|
url = "%s?%s"%(baseUrl, ps) |
url = "%s?%s"%(baseUrl, ps) |
return url |
return url |
|
|
def getLinkAmp(self, param=None, val=None, params=None, baseUrl=None): |
def getLinkAmp(self, param=None, val=None, params=None, baseUrl=None, duplicates='comma'): |
"""link to documentviewer with parameter param set to val""" |
"""link to documentviewer with parameter param set to val""" |
return self.getLink(param, val, params, baseUrl, '&') |
return self.getLink(param=param, val=val, params=params, baseUrl=baseUrl, paramSep='&', duplicates=duplicates) |
|
|
|
|
def getInfo_xml(self,url,mode): |
def getInfo_xml(self,url,mode): |
Line 522 class documentViewer(Folder):
|
Line 556 class documentViewer(Folder):
|
# override image path from texttool with url |
# override image path from texttool with url |
docinfo['imagePath'] = url.replace('/mpiwg/online/', '', 1) |
docinfo['imagePath'] = url.replace('/mpiwg/online/', '', 1) |
|
|
|
|
|
|
# number of images from digilib |
# number of images from digilib |
if docinfo.get('imagePath', None): |
if docinfo.get('imagePath', None): |
docinfo['imageURL'] = self.digilibBaseUrl + "/servlet/Scaler?fn=" + docinfo['imagePath'] |
docinfo['imageURL'] = self.digilibBaseUrl + "/servlet/Scaler?fn=" + docinfo['imagePath'] |
Line 686 class documentViewer(Folder):
|
Line 718 class documentViewer(Folder):
|
return docinfo |
return docinfo |
|
|
|
|
def getPageinfo(self, current, start=None, rows=None, cols=None, docinfo=None, viewMode=None, viewType=None, tocMode=None): |
def getPageinfo(self, current=None, start=None, rows=None, cols=None, docinfo=None, viewMode=None, viewType=None, tocMode=None): |
"""returns pageinfo with the given parameters""" |
"""returns pageinfo with the given parameters""" |
|
logging.debug("getPageInfo(current=%s, start=%s, rows=%s, cols=%s, viewMode=%s, viewType=%s, tocMode=%s)"%(current,start,rows,cols,viewMode,viewType,tocMode)) |
pageinfo = {} |
pageinfo = {} |
pageinfo['viewMode'] = viewMode |
pageinfo['viewMode'] = viewMode |
pageinfo['viewType'] = viewType |
pageinfo['viewType'] = viewType |
Line 695 class documentViewer(Folder):
|
Line 728 class documentViewer(Folder):
|
|
|
current = getInt(current) |
current = getInt(current) |
pageinfo['current'] = current |
pageinfo['current'] = current |
|
pageinfo['pn'] = current |
rows = int(rows or self.thumbrows) |
rows = int(rows or self.thumbrows) |
pageinfo['rows'] = rows |
pageinfo['rows'] = rows |
cols = int(cols or self.thumbcols) |
cols = int(cols or self.thumbcols) |
Line 705 class documentViewer(Folder):
|
Line 739 class documentViewer(Folder):
|
start = getInt(start, default=(math.ceil(float(current)/float(grpsize))*grpsize-(grpsize-1))) |
start = getInt(start, default=(math.ceil(float(current)/float(grpsize))*grpsize-(grpsize-1))) |
# int(current / grpsize) * grpsize +1)) |
# int(current / grpsize) * grpsize +1)) |
pageinfo['start'] = start |
pageinfo['start'] = start |
pn = self.REQUEST.get('pn','1') |
|
pageinfo['pn'] = pn |
|
np = int(docinfo.get('numPages', 0)) |
np = int(docinfo.get('numPages', 0)) |
if np == 0: |
if np == 0: |
# numPages unknown - maybe we can get it from text page |
# numPages unknown - maybe we can get it from text page |
if docinfo.get('textURLPath', None): |
if docinfo.get('textURLPath', None): |
# cache text page as well |
# cache text page as well |
pageinfo['textPage'] = self.getTextPage(mode=viewType, pn=pn, docinfo=docinfo, pageinfo=pageinfo) |
pageinfo['textPage'] = self.getTextPage(mode=viewType, pn=current, docinfo=docinfo, pageinfo=pageinfo) |
np = int(docinfo.get('numPages', 0)) |
np = int(docinfo.get('numPages', 0)) |
|
|
pageinfo['numgroups'] = int(np / grpsize) |
pageinfo['numgroups'] = int(np / grpsize) |
Line 724 class documentViewer(Folder):
|
Line 757 class documentViewer(Folder):
|
# add zeroth page for two columns |
# add zeroth page for two columns |
pageZero = (cols == 2 and (pageFlowLtr != oddScanLeft)) |
pageZero = (cols == 2 and (pageFlowLtr != oddScanLeft)) |
pageinfo['pageZero'] = pageZero |
pageinfo['pageZero'] = pageZero |
pageinfo['pageList'] = self.getPageList(start=start, rows=rows, cols=cols, pageFlowLtr=pageFlowLtr, pageZero=pageZero, minIdx=1, maxIdx=np) |
pageinfo['pageBatch'] = self.getPageBatch(start=start, rows=rows, cols=cols, pageFlowLtr=pageFlowLtr, pageZero=pageZero, minIdx=1, maxIdx=np) |
|
|
|
# TODO: do we need this here? |
pageinfo['characterNormalization'] = self.REQUEST.get('characterNormalization','reg') |
pageinfo['characterNormalization'] = self.REQUEST.get('characterNormalization','reg') |
pageinfo['query'] = self.REQUEST.get('query','') |
pageinfo['query'] = self.REQUEST.get('query','') |
pageinfo['queryType'] = self.REQUEST.get('queryType','') |
pageinfo['queryType'] = self.REQUEST.get('queryType','') |
Line 751 class documentViewer(Folder):
|
Line 785 class documentViewer(Folder):
|
return pageinfo |
return pageinfo |
|
|
|
|
def getPageList(self, start=None, rows=None, cols=None, pageFlowLtr=True, pageZero=False, minIdx=1, maxIdx=0): |
def getPageBatch(self, start=1, rows=10, cols=2, pageFlowLtr=True, pageZero=False, minIdx=1, maxIdx=0): |
"""returns array of page informations for one screenfull of thumbnails""" |
"""returns dict with array of page informations for one screenfull of thumbnails""" |
|
batch = {} |
|
grpsize = rows * cols |
if maxIdx == 0: |
if maxIdx == 0: |
maxIdx = start + rows * cols |
maxIdx = start + grpsize |
|
|
|
nb = int(math.ceil(maxIdx / float(grpsize))) |
|
# list of all batch start and end points |
|
batches = [] |
|
if pageZero: |
|
ofs = 0 |
|
else: |
|
ofs = 1 |
|
|
|
for i in range(nb): |
|
s = i * grpsize + ofs |
|
e = min((i + 1) * grpsize + ofs - 1, maxIdx) |
|
batches.append({'start':s, 'end':e}) |
|
|
|
batch['batches'] = batches |
|
|
pages = [] |
pages = [] |
if pageZero and start == 1: |
if pageZero and start == 1: |
Line 779 class documentViewer(Folder):
|
Line 830 class documentViewer(Folder):
|
|
|
pages.append(row) |
pages.append(row) |
|
|
logging.debug("getPageList returns=%s"%(pages)) |
if start > 1: |
return pages |
batch['prevStart'] = max(start - grpsize, 1) |
|
else: |
|
batch['prevStart'] = None |
|
|
|
if start + grpsize < maxIdx: |
|
batch['nextStart'] = start + grpsize |
|
else: |
|
batch['nextStart'] = None |
|
|
|
batch['pages'] = pages |
|
return batch |
|
|
|
def getBatch(self, start=1, size=10, end=0, data=None, fullData=True): |
|
"""returns dict with information for one screenfull of data.""" |
|
batch = {} |
|
if end == 0: |
|
end = start + size |
|
|
|
nb = int(math.ceil(end / float(size))) |
|
# list of all batch start and end points |
|
batches = [] |
|
for i in range(nb): |
|
s = i * size + 1 |
|
e = min((i + 1) * size, end) |
|
batches.append({'start':s, 'end':e}) |
|
|
|
batch['batches'] = batches |
|
# list of elements in this batch |
|
this = [] |
|
j = 0 |
|
for i in range(start, min(start+size, end)): |
|
if data: |
|
if fullData: |
|
d = data[i] |
|
else: |
|
d = data[j] |
|
j += 1 |
|
|
|
else: |
|
d = i+1 |
|
|
|
this.append(d) |
|
|
|
batch['this'] = this |
|
if start > 1: |
|
batch['prevStart'] = max(start - size, 1) |
|
else: |
|
batch['prevStart'] = None |
|
|
|
if start + size < end: |
|
batch['nextStart'] = start + size |
|
else: |
|
batch['nextStart'] = None |
|
|
|
return batch |
|
|
|
|
security.declareProtected('View management screens','changeDocumentViewerForm') |
security.declareProtected('View management screens','changeDocumentViewerForm') |