[% subjects = [ { label => l('Subject: '), xpath => '//*[@tag="600" or @tag="610" or @tag="611" or @tag="630" or @tag="650" or @tag="651"]' }, { label => l('Genre: '), xpath => '//*[@tag="655"]|//*[@tag="659"]' }, { label => l('Topic Heading: '), xpath => '//*[@tag="690"]' }, { label => l('Geographic Setting: '), xpath => '//*[@tag="691"]' }, { label => l('Biographical Subject: '), xpath => '//*[@tag="692"]' }, { label => l('Character Attributes: '), xpath => '//*[@tag="693"]' }, { label => l('Setting: '), xpath => '//*[@tag="698"]' }, { label => l('Time Period: '), xpath => '//*[@tag="699"]' } ]; BLOCK render_subject; xpath = xpath || '//*[starts-with(@tag,"6")]'; FOR node IN ctx.marc_xml.findnodes(xpath); all_terms = []; graphics = []; FOR subfield IN node.childNodes; NEXT UNLESS subfield.nodeName == "subfield"; code = subfield.getAttribute('code'); IF code == '6'; linked_fields = [subfield.textContent()]; target_field = node.getAttribute('tag'); get_linked_880s; END; NEXT UNLESS code.match('[a-z]'); IF code.match('[vxyz]'); " > "; END; # at this point, we actually have a partial term to use. single_term = subfield.textContent | html; all_terms.push(subfield.textContent.replace('\-', ' ').replace('[#"^$\+,\.:;&|\[\]()]', '')); total_term = all_terms.join(" ").replace('\s+$', ''); %] [% single_term %] [%- END; IF all_terms.size; "
"; END; FOREACH link880 IN graphics; '
'; link880.value | html; '
'; END; END; END %] [% BLOCK render_all_subjects; FOREACH subj IN subjects; content = PROCESS render_subject(xpath=subj.xpath); IF content.match('\S'); %]
[% subj.label %] [% content %]
[%- END; %] [%- END; %] [%- END %] [%- subject_html = PROCESS render_all_subjects; IF subject_html.length > 0; %] [%- subject_html %] [%- END %]