# $URL$ # $Id$ drilldownFieldNames = { 'drilldown.norm.date.year': {'en':'Year', 'nl':'Jaar'}, 'drilldown.norm.date.decennium': {'en':'Decennium', 'nl':'Decennium'}, 'drilldown.norm.date.centennium': {'en':'Centennium', 'nl':'Centennium'}, 'drilldown.norm.name.oneinitial': {'en':'Name', 'nl':'Naam'}, 'drilldown.norm.name.lastname': {'en':'Top 10 Names', 'nl':'Top 10 Namen'}, 'drilldown.meta.repository.id': {'en':'Repository', 'nl':'Repository'}, 'drilldown.meta.repository.repositoryGroupId': {'en':'Source', 'nl':'Bron'}, 'drilldown.mods.classification': {'en':'Classification', 'nl':'Classificatie'}, 'drilldown.mods.genre': {'en':'Genre', 'nl':'Genre'}, 'drilldown.mods.language.languageTerm': {'en':'Language', 'nl':'Taal'}, 'drilldown.mods.relatedItem.titleInfo.title': {'en':'Journal/series', 'nl':'Tijdschrift/reeks'}, 'drilldown.mods.subject.topic': {'en':'Subject', 'nl':'Onderwerp'} } drilldownFields = [ ##### ##### TP: (field, number, sorted) ##### number == 0: all items? ('drilldown.mods.genre', 0, True), ('drilldown.mods.subject.topic', 10, True), ##### #('drilldown.mods.name.namePart', 20, False), #('drilldown.norm.name.oneinitial', 20, False), #('drilldown.meta.repository.id', 10, False), ('drilldown.meta.repository.repositoryGroupId', 10, True), ('drilldown.mods.classification', 10, True), ('drilldown.mods.language.languageTerm', 10, True), ('drilldown.mods.relatedItem.titleInfo.title', 10, True) ] drilldownFieldsNoMultiLevel = [] drilldownFieldsNoMultiLevel.extend(drilldownFields) drilldownFieldsNoMultiLevel.insert(0, ('drilldown.norm.name.lastname', 10, False)) drilldownFieldsNoMultiLevel.insert(0, ('drilldown.norm.date.centennium', 10, False)) groupName = { 'ir-uvt-nl': {'en': 'Tilburg University Repository', 'nl': 'Tilburg University Repository'}, 'kuleuven-be': {'en': 'EO: KU Leuven', 'nl': 'EO: KU Leuven'}, 'lse-ac-uk': {'en': 'EO: London School of Economics', 'nl': 'EO: London School of Economics'}, 'opc-uvt-nl': {'en': 'Catalogue', 'nl': 'Catalogus'}, 'repec-org': {'en': 'RePEc', 'nl': 'RePEc'}, 'repub-eur-nl': {'en': 'EO: Erasmus University Rotterdam', 'nl': 'EO: Erasmus Universiteit Rotterdam'}, 'tilburguniversity-nl': {'en': 'EO: Tilburg University', 'nl': 'EO: Universiteit van Tilburg'}, 'ulb-ac-be': {'en': 'EO: Universite Libre de Bruxelles', 'nl': 'EO: Universite Libre de Bruxelles'}, 'unimaas-nl': {'en': 'EO: Maastricht University', 'nl': 'EO: Universiteit Maastricht'}, } space = " " def fieldAndTermSplit(fieldAndTerm): return fieldAndTerm.split(':', 1) def fieldAndTermJoin(field, term): return '%s:%s' % (field, term) def shrink(aString, maxLength=160): if len(aString) > maxLength: return aString[:maxLength] + '...' return aString def createDrilldownQuery(drilldownArgs, httpQuery, sortKeys): newArguments = [('query', httpQuery)] if sortKeys: newArguments.append(('sortKeys', sortKeys)) for existing in drilldownArgs: newArguments.append(('drilldown', existing)) return urlencode(newArguments) def displayLabel(label): return '
%s
' % label def displayTerm(term, fieldName, language, maxLength=25): if fieldName == 'drilldown.mods.genre': term = term.replace('info:eu-repo/semantics/', '') elif (fieldName == 'drilldown.meta.repository.repositoryGroupId'): term = groupName.get(term, {'en':term, 'nl':term})[language] return shrink(term, maxLength) def displayDrilldownFields(total, bitMatrixRow, httpQuery, arguments, language): yield '\n' + space + '
' sortKeys = arguments.get('sortKeys', [''])[0] if total < 500000: ####### TP: result set is not too large, multilevel results will be calculated multilevelResults = any.multiLevelDrilldown(bitMatrixRow, ['date', 'author']) for (fieldName, levelField), termCounts in multilevelResults: label = drilldownFieldNames.get(levelField, {'en':levelField, 'nl':levelField})[language] yield '\n' + space + ' %s' % displayLabel(label) yield '\n' + space + ' ' fields = drilldownFields else: ####### TP: result set is too large, only one level of the multilevel facests will be calculated. fields = drilldownFieldsNoMultiLevel # fields = drilldownFields drilldownResults = any.drilldown(bitMatrixRow, fields) drilldownResultsAsDict = dict(drilldownResults) for fieldName, number, sorted in fields: termCounts = drilldownResultsAsDict.get(fieldName,[]) label = drilldownFieldNames.get(fieldName, {'en':fieldName, 'nl':fieldName})[language] if termCounts == []: continue yield '\n' + space + ' %s' % displayLabel(label) yield '\n' + space + ' ' yield """ %(space)s
%(space)s """ % {'space': space} #def main(hits, httpQuery, arguments, path='', *args, **kwargs): def main(total, bitMatrixRow, httpQuery, arguments, path='', *args, **kwargs): language = path.startswith('/en/') and 'en' or 'nl' yield '\n' + space + '
' selectedFacets = arguments.get('drilldown', []) sortKeys = arguments.get('sortKeys', [''])[0] if selectedFacets: yield '\n' + space + '
' yield '\n' + space + '

%s

' % {'nl':'Geselecteerde facetten', 'en':'Selected Facets'}[language] yield '\n %(space)s
%(space)s """ % {'space': space} if total > 0: yield displayDrilldownFields(total, bitMatrixRow, httpQuery, arguments, language)