<%! 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 name="formViewForMemory(form)"> <%self.displayPrimaryData(form)%> <%self.displayFormButtonsForMemory(form)%>
<%def name="formViewForHistory(form)"> <%self.displayPrimaryData(form, True)%>
<%self.displaySecondaryData(form)%> <%def name="formViewForAssociation(form)"> <%self.displayPrimaryData(form, True)%> <%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: % if not noID: % endif % for gloss in [gloss for gloss in form.glosses if not gloss.glossGrammaticality]: % endfor % for gloss in [gloss for gloss in form.glosses if gloss.glossGrammaticality]: % endfor % endif
ID${form.id}
transcription${form.grammaticality}${h.storageToOutputTranslate(form.transcription)}
morph break${h.storageToOutputTranslate(form.morphemeBreak, True)}
morph gloss${form.morphemeGloss}
gloss‘${gloss.glossGrammaticality}${gloss.gloss}’
gloss‘${gloss.glossGrammaticality}${gloss.gloss}’
<%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 <% form.listifyCoreData() %> % if not noID:
ID${form.id}
% 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"--> <% styleAttribute = 'width: %sem;min-width: %sem; padding: 0;' % ((i * 2), (i * 2)) %> ${self.oneWordPerCell(form.transcriptionList[i], 'transcription', form, i)}${self.oneWordPerCell(form.morphemeBreakList[i], 'morphemeBreak', form, i)}${self.oneWordPerCell(form.morphemeGlossList[i], 'morphemeGloss', form, i)}
transcription
morph break
morph gloss
% endfor % for gloss in form.glosses: % endfor
gloss‘${gloss.glossGrammaticality}${gloss.gloss}’
<%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 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. <% 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 name="displaySecondaryData(form, noID=True)"> % if form.phoneticTranscription: % endif % if form.comments: <% comments = h.literal(capture(linkToOLDEntitites, form.comments)) %> % endif % if form.speakerComments: % endif % if form.speaker: % endif % if form.elicitor: % endif % if form.source: % endif % if form.enterer: % endif % if form.verifier: % endif % if form.dateElicited: % endif % if form.datetimeEntered: % endif % if form.datetimeModified: % endif % if form.keywords: % endif % if form.syntacticCategory: % endif % if form.syntacticCategoryString: % endif % if form.elicitationMethod: % endif % if not noID: % endif
phonetic transcription ${form.phoneticTranscription}
comments${h.storageToOutputTranslateOLOnly(comments)}
speaker comments${h.storageToOutputTranslateOLOnly(h.literal(form.speakerComments))}
speaker${form.speaker.firstName} ${form.speaker.lastName} (${form.speaker.dialect})
elicitor${form.elicitor.firstName} ${form.elicitor.lastName}
source${form.source.authorLastName} (${form.source.year})
enterer${form.enterer.firstName} ${form.enterer.lastName}
verifier${form.verifier.firstName} ${form.verifier.lastName}
date elicited${h.pretty_date(form.dateElicited)}
time entered${h.pretty_date(form.datetimeEntered)}
last updated${h.pretty_date(form.datetimeModified)}
keywords ${', '.join([keyword.name for keyword in form.keywords])}
category${form.syntacticCategory.name}
category string${form.syntacticCategoryString}
method${form.elicitationMethod.name}
ID${form.id}
<%def name="displayFormButtons(form)">
update delete history associate remember export
<%def name="displayFormButtonsForMemory(form)">
view export forget
<%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)})
disassociate view
${displayFile(file, fileType)}
% endfor <%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