%! import re %>
<%namespace file="/base/markup.html" name="markup" import="linkToOLDEntitites"/>
<%def name="formViewLong(form)">
% if 'restricted' not in [x.name for x in form.keywords] or \
session['user_role'] == u'administrator' or \
session['user_id'] in [x.id for x in app_globals.unrestrictedUsers]:
${self.displayPrimaryData(form, True)}
${self.displaySecondaryData(form, False)}
${self.displayAssociatedFiles(form, 'form')}
${self.displayFormButtons(form)}
% else:
${h.literal('Sorry, you are not authorized to view Form %s.
' % form.id)}
% endif
%def>
<%def name="formViewForMemory(form)">
<%self.displayPrimaryData(form)%>
<%self.displayFormButtonsForMemory(form)%>
%def>
<%def name="formViewForHistory(form)">
<%self.displayPrimaryData(form, True)%>
<%self.displaySecondaryData(form)%>
%def>
<%def name="formViewForAssociation(form)">
<%self.displayPrimaryData(form, True)%>
%def>
<%def name="displayPrimaryData(form, noID=False)">
% if form.morphemeGloss and form.morphemeBreak and len(form.transcription.split(' ')) == len(form.morphemeGloss.split(' ')) and len(form.transcription.split(' ')) == len(form.morphemeBreak.split(' ')):
<%self.alignWords(form, noID)%>
% else:
%def>
<%def name="alignWords(form, noID=False)">
<%doc>
listifyCoreData() method breaks up transcription, morphemeBreak and morphemeGloss
into lists of lists of shorter length. See lib/oldCoreObjects.py
%doc>
<% form.listifyCoreData() %>
% endif
% for i in range(len(form.transcriptionList)):
<%doc>
styleAttribute makes a dummy have a greater and greater width
on each iteration, thus creating the "upside down staircase effect"-->
%doc>
<%
styleAttribute = 'width: %sem;min-width: %sem; padding: 0;' % ((i * 2), (i * 2))
%>
% endfor
% for gloss in form.glosses:
%def>
<%def name="oneWordPerCell(wordList, lineType, form, subListIndex)">
% for ii in range(len(wordList)):
<%
word = wordList[ii]
%>
% if lineType == 'transcription' and ii == 0 and subListIndex == 0:
| ${form.grammaticality}${h.storageToOutputTranslate(word)} |
% elif lineType == 'transcription':
${h.storageToOutputTranslate(word)} |
% else:
${self.morphemesToLinks(word, lineType, form, subListIndex, ii)} |
% endif
% endfor
%def>
<%def name="morphemesToLinks(word, lineType, form, subListIndex, wordIndex)">
<%doc>
For each morpheme (or morpheme gloss), check if it has a list of IDs in
morphemeBreakIDs and, if so, convert the string representing the morpheme
into a link to the appropriate Forms. Links where the morpheme and morpheme
gloss have the class 'match' so that a color representation of the consistency
can be made via CSS.
%doc>
<%
morphDelimiters = app_globals.morphDelimiters
patt = '([%s])' % ''.join(morphDelimiters)
spacePatt = re.compile('([\t\n]| {2,})')
morphemeBreakWords = spacePatt.sub(' ', form.morphemeBreak.strip()).split()
morphemeGlossWords = spacePatt.sub(' ', form.morphemeGloss.strip()).split()
morphemes = [len(re.split(patt, x)) for x in morphemeBreakWords]
glosses = [len(re.split(patt, x)) for x in morphemeGlossWords]
if morphemes == glosses:
morphsAndDelimitersList = re.split(patt, word)
mbIDsList = form.morphemeBreakIDsList[subListIndex][wordIndex]
mgIDsList = form.morphemeGlossIDsList[subListIndex][wordIndex]
madList = []
for iii in range(len(morphsAndDelimitersList)):
el = morphsAndDelimitersList[iii]
if el in morphsAndDelimitersList[::2]:
if lineType == 'morphemeBreak':
elIDsList = mbIDsList[iii / 2]
otherIDsList = mgIDsList[iii / 2]
else:
elIDsList = mgIDsList[iii / 2]
otherIDsList = mbIDsList[iii / 2]
if [triple[0] for triple in elIDsList] == [triple[0] for triple in otherIDsList]:
klass = 'match'
else:
klass = 'nonmatch'
if len(elIDsList) > 0:
id = ','.join([str(triple[0]) for triple in elIDsList])
URL = url(controller='form', action='view', id=id)
title = '; '.join(['%s (%s)' % (triple[1], triple[2] or 'NULL') for triple in elIDsList])
madList.append('%s' % (klass, URL, title, el))
else:
id = None
madList.append(el)
else:
madList.append(el)
word = ''.join(madList)
%>
${h.literal(h.storageToOutputTranslate(word, True))}
%def>
<%def name="displaySecondaryData(form, noID=True)">
%def>
<%def name="displayFormButtons(form)">
%def>
<%def name="displayFormButtonsForMemory(form)">
%def>
<%def name="displayAssociatedFiles(entity, entityType)">
<%namespace file="/base/fileViews.html" name="fileViews" import="displayFile"/>
% for file in entity.files:
% try:
% if app_globals.allowedFileTypes[file.MIMEtype]:
<% fileType = app_globals.allowedFileTypes[file.MIMEtype] %>
% else:
<% fileType = file.MIMEtype.split('/')[0] %>
% endif
% except KeyError:
<% fileType = u'embedded media' %>
% endtry
Associated File ${file.id}:
${file.name} (${h.pretty_filesize(file.size)})
${displayFile(file, fileType)}
% endfor
%def>
<%def name="dictionaryView(form, languageToSortBy)">
% if 'restricted' not in [x.name for x in form.keywords] or \
session['user_role'] == u'administrator' or \
session['user_id'] in [x.id for x in app_globals.unrestrictedUsers]:
% if c.languageToSortBy == 'ol':
${h.storageToOutputTranslate(form.transcription)}
${', '.join([gloss.gloss for gloss in form.glosses if not gloss.glossGrammaticality])}
% elif c.languageToSortBy == 'ml':
${form.transcription}
${h.storageToOutputTranslate(form.gloss)}
% endif
% endif
%def>