UNPKG

labo-components

Version:
628 lines (593 loc) 25.2 kB
import CollectionConfig from './CollectionConfig'; import RegexUtil from '../../util/RegexUtil'; import SearchAPI from '../../api/SearchAPI'; import NISV_GTAA_WIKIDATA from './entities/NISV_GTAA_WIKIDATA'; export default class NISVCatalogueConfig extends CollectionConfig { constructor(clientId, user, collectionId, collectionMetadata) { super(clientId, user, collectionId, collectionMetadata); this.FORBIDDEN_FACETS = [ //filter out carrier times & IDs "bg:carriers.bg:carrier.bg:carrier-endposition.keyword", "bg:carriers.bg:carrier.bg:carrier-startposition", "bg:carriers.bg:carrier.bg:carrierid", "bg:carriers.bg:carrier.bg:carrierreference", "bg:carriers.bg:carrier.bg:dmguid", "bg:carriers.bg:carrier.bg:sorting", "bg:carriers.bg:carrier.bg:endoncarrier", "bg:carriers.bg:carrier.bg:endtime.keyword", "bg:carriers.bg:carrier.bg:externalreference.keyword", "bg:carriers.bg:carrier.bg:parentcarrierid.keyword", "bg:carriers.bg:carrier.bg:starttime.keyword", "bga:segment.bg:carriers.bg:carrier.bg:sorting", "bga:segment.bg:carriers.bg:carrier.bg:sorting.keyword", "bga:segment.bg:carriers.bg:carrier.bg:starttime.keyword", "bga:segment.bg:carriers.bg:carrier.bg:carrier-endposition", "bga:segment.bg:carriers.bg:carrier.bg:carrier-startposition", "bga:segment.bg:carriers.bg:carrier.bg:carrierid", "bga:segment.bg:carriers.bg:carrier.bg:carrierreference", "bga:segment.bg:carriers.bg:carrier.bg:dmguid", "bga:segment.bg:carriers.bg:carrier.bg:endtime.keyword", //filter out all these titles "bg:maintitles.bg:title.keyword", "bga:segment.bg:maintitles.bg:title.keyword", "bg:subtitles.bg:title.keyword", "bga:segment.bg:subtitles.bg:title.keyword", "bg:publications.bg:publication.bg:title.keyword", "bga:season.bg:subtitles.bg:title.keyword", "bga:series.bg:maintitles.bg:title.keyword", //filter out time/date/number fields "bg:publications.bg:publication.bg:starttimestamp.keyword", "bga:segment.bg:recordings.bg:recording.bg:dateprecision", //filter out all the transcript fields "bg:transcripts.bg:transcript.@annotation.keyword", "bg:transcripts.bg:transcript.@endtime.keyword", "bg:transcripts.bg:transcript.@label.keyword", "bg:transcripts.bg:transcript.@rights.keyword", "bg:transcripts.bg:transcript.@sequencenumber.keyword", "bg:transcripts.bg:transcript.@source.keyword", "bg:transcripts.bg:transcript.@starttime.keyword", "bg:transcripts.bg:transcript.bg:text.keyword", "bga:segment.bg:transcripts.bg:transcript.@annotation.keyword", "bga:segment.bg:transcripts.bg:transcript.@endtime.keyword", "bga:segment.bg:transcripts.bg:transcript.@label.keyword", "bga:segment.bg:transcripts.bg:transcript.@rights.keyword", "bga:segment.bg:transcripts.bg:transcript.@source.keyword", "bga:segment.bg:transcripts.bg:transcript.@starttime.keyword", "bga:segment.bg:transcripts.bg:transcript.bg:text.keyword", //filter out these big text fields "bg:used-archivematerials.bg:used-archivematerial.keyword", "bga:segment.bg:museum-summary.keyword", "bga:series.bg:museum-summary.keyword", "bga:segment.bg:museum-description.keyword", "layer__asr.wordTimes.keyword" ]; this.ALLOWED_FACETS = [ "bg:availablecollections.bg:collection", "bg:carriers.bg:carrier.bg:archivestatus.keyword", "bg:carriers.bg:carrier.bg:audiotype.keyword", "bg:carriers.bg:carrier.bg:carrierclass.keyword", "bg:carriers.bg:carrier.bg:carriertype.keyword", "bg:carriers.bg:carrier.bg:depotstatus", "bg:carriers.bg:carrier.bg:format.keyword", "bg:carriers.bg:carrier.bg:location.keyword", "bg:carriers.bg:carrier.bg:metrage.keyword", "bg:carriers.bg:carrier.bg:origin.keyword", "bg:carriers.bg:carrier.bg:repository", "bg:carriers.bg:carrier.bg:storageunit", "bg:casts.bg:cast.bg:character.keyword", "bg:casts.bg:cast.bg:clarification.keyword", "bg:casts.bg:cast.bg:name.keyword", "bg:catalog.keyword", "bg:clearingstatus.keyword", "bg:context.bg:awards.keyword", "bg:context.bg:colour", "bg:context.bg:composition.keyword", "bg:context.bg:context.keyword", "bg:context.bg:occasion.keyword", "bg:context.bg:silent.keyword", "bg:contractors.bg:contractor.bg:name.keyword", "bg:creators.bg:creator.bg:clarification.keyword", "bg:creators.bg:creator.bg:name.keyword", "bg:creators.bg:creator.bg:roles.bg:role.keyword", "bg:deprecatedkeyword.bg:keyword.keyword", "bg:executives.bg:executive.bg:clarification.keyword", "bg:executives.bg:executive.bg:name.keyword", "bg:executives.bg:executive.bg:role.keyword", "bg:funders.bg:funder.bg:name.keyword", "bg:genres.bg:genre.keyword", "bg:keywords.bg:keyword.keyword", "bg:languages.bg:language.bg:language", "bg:languages.bg:language.bg:use", "bg:links.bg:link.keyword", "bg:locations.bg:location.keyword", "bg:museum-annotation.keyword", "bg:museum-genres.bg:genre.keyword", "bg:museum-keywords.bg:keyword.keyword", "bg:museum-locations.bg:location.keyword", "bg:museum-names.bg:name.keyword", "bg:museum-personnames.bg:personname.keyword", "bg:museum-themes.bg:theme.keyword", "bg:musicstyles.bg:musicstyle.keyword", "bg:names.bg:name.keyword", "bg:nationalities.bg:nationality.bg:country.keyword", "bg:nationalities.bg:nationality.bg:role.keyword", "bg:originalCreators.bg:creator.bg:clarification.keyword", "bg:originalCreators.bg:creator.bg:name.keyword", "bg:originalCreators.bg:creator.bg:role.keyword", "bg:part.keyword", "bg:personnames.bg:personname.keyword", "bg:producers.bg:producer.bg:name.keyword", "bg:productioncountries.bg:country.keyword", "bg:publications.bg:publication.bg:broadcasters.bg:broadcaster", "bg:publications.bg:publication.bg:broadcastnorm.keyword", "bg:publications.bg:publication.bg:dateprecision.keyword", "bg:publications.bg:publication.bg:distributionchannel", "bg:publications.bg:publication.bg:distributionformat.keyword", "bg:publications.bg:publication.bg:frequency.keyword", "bg:publications.bg:publication.bg:live.keyword", "bg:publications.bg:publication.bg:networks.bg:network", "bg:publications.bg:publication.bg:publication-annotation.keyword", "bg:publications.bg:publication.bg:rebroadcast.keyword", "bg:publications.bg:publication.bg:timecodestandard.keyword", "bg:publications.bg:publication.bg:type", "bg:publications.bg:publication.bg:ugstatus", "bg:publications.bg:publication.bg:weeknumber.keyword", "bg:qualification.bg:block.keyword", "bg:qualification.bg:license.keyword", "bg:qualification.bg:rights.keyword", "bg:qualification.bg:source.keyword", "bg:recordinglocations.bg:location", "bg:recordings.bg:recording.bg:withaudience.keyword", "bg:sourcecatalog", "bg:speakers.bg:speaker.bg:name.keyword", "bg:speakers.bg:speaker.bg:role.keyword", "bg:sponsors.bg:sponsor.bg:name.keyword", "bg:targetgroups.bg:targetgroup.keyword", "bg:themes.bg:theme.keyword", "bga:season.bg:casts.bg:cast.bg:character.keyword", "bga:season.bg:casts.bg:cast.bg:clarification.keyword", "bga:season.bg:casts.bg:cast.bg:name.keyword", "bga:season.bg:context.bg:awards.keyword", "bga:season.bg:context.bg:colour.keyword", "bga:season.bg:context.bg:context.keyword", "bga:season.bg:context.bg:occasion.keyword", "bga:season.bg:contractors.bg:contractor.bg:name.keyword", "bga:season.bg:creators.bg:creator.bg:clarification.keyword", "bga:season.bg:creators.bg:creator.bg:name.keyword", "bga:season.bg:creators.bg:creator.bg:roles.bg:role.keyword", "bga:season.bg:executives.bg:executive.bg:clarification.keyword", "bga:season.bg:executives.bg:executive.bg:name.keyword", "bga:season.bg:executives.bg:executive.bg:role.keyword", "bga:season.bg:funders.bg:funder.bg:name.keyword", "bga:season.bg:genres.bg:genre.keyword", "bga:season.bg:keywords.bg:keyword.keyword", "bga:season.bg:languages.bg:language.bg:language", "bga:season.bg:languages.bg:language.bg:use.keyword", "bga:season.bg:links.bg:link.keyword", "bga:season.bg:locations.bg:location.keyword", "bga:season.bg:maintitles.bg:title.keyword", "bga:season.bg:names.bg:name.keyword", "bga:season.bg:personnames.bg:personname.keyword", "bga:season.bg:producers.bg:producer.bg:name.keyword", "bga:season.bg:productioncountries.bg:country.keyword", "bga:season.bg:qualification.bg:block.keyword", "bga:season.bg:qualification.bg:license.keyword", "bga:season.bg:qualification.bg:rights.keyword", "bga:season.bg:qualification.bg:source.keyword", "bga:season.bg:recordinglocations.bg:location.keyword", "bga:season.bg:recordings.bg:recording.bg:withaudience.keyword", "bga:season.bg:speakers.bg:speaker.bg:name.keyword", "bga:season.bg:speakers.bg:speaker.bg:role.keyword", "bga:season.bg:sponsors.bg:sponsor.bg:name.keyword", "bga:season.bg:targetgroups.bg:targetgroup.keyword", "bga:segment.bg:availablecollections.bg:collection.keyword", "bga:segment.bg:carriers.bg:carrier.bg:archivestatus.keyword", "bga:segment.bg:carriers.bg:carrier.bg:audiotype.keyword", "bga:segment.bg:carriers.bg:carrier.bg:carrierclass", "bga:segment.bg:carriers.bg:carrier.bg:carriertype", "bga:segment.bg:carriers.bg:carrier.bg:depotstatus", "bga:segment.bg:carriers.bg:carrier.bg:format", "bga:segment.bg:carriers.bg:carrier.bg:location.keyword", "bga:segment.bg:carriers.bg:carrier.bg:metrage.keyword", "bga:segment.bg:carriers.bg:carrier.bg:origin.keyword", "bga:segment.bg:carriers.bg:carrier.bg:parentcarrierid.keyword", "bga:segment.bg:carriers.bg:carrier.bg:repository", "bga:segment.bg:carriers.bg:carrier.bg:storageunit", "bga:segment.bg:casts.bg:cast.bg:character.keyword", "bga:segment.bg:casts.bg:cast.bg:clarification.keyword", "bga:segment.bg:casts.bg:cast.bg:name.keyword", "bga:segment.bg:clearingstatus.keyword", "bga:segment.bg:context.bg:awards.keyword", "bga:segment.bg:context.bg:colour.keyword", "bga:segment.bg:context.bg:composition.keyword", "bga:segment.bg:context.bg:context.keyword", "bga:segment.bg:context.bg:occasion.keyword", "bga:segment.bg:context.bg:silent.keyword", "bga:segment.bg:contractors.bg:contractor.bg:name.keyword", "bga:segment.bg:creators.bg:creator.bg:clarification.keyword", "bga:segment.bg:creators.bg:creator.bg:name.keyword", "bga:segment.bg:creators.bg:creator.bg:roles.bg:role.keyword", "bga:segment.bg:deprecatedkeyword.bg:keyword.keyword", "bga:segment.bg:executives.bg:executive.bg:clarification.keyword", "bga:segment.bg:executives.bg:executive.bg:name.keyword", "bga:segment.bg:executives.bg:executive.bg:role.keyword", "bga:segment.bg:funders.bg:funder.bg:name.keyword", "bga:segment.bg:genres.bg:genre.keyword", "bga:segment.bg:keywords.bg:keyword.keyword", "bga:segment.bg:languages.bg:language.bg:language", "bga:segment.bg:languages.bg:language.bg:use.keyword", "bga:segment.bg:links.bg:link.keyword", "bga:segment.bg:locations.bg:location.keyword", "bga:segment.bg:museum-annotation.keyword", "bga:segment.bg:museum-languageid.keyword", "bga:segment.bg:museum-locations.bg:location.keyword", "bga:segment.bg:musicstyles.bg:musicstyle.keyword", "bga:segment.bg:names.bg:name.keyword", "bga:segment.bg:nationalities.bg:nationality.bg:country.keyword", "bga:segment.bg:nationalities.bg:nationality.bg:role.keyword", "bga:segment.bg:originalCreators.bg:creator.bg:clarification.keyword", "bga:segment.bg:originalCreators.bg:creator.bg:name.keyword", "bga:segment.bg:originalCreators.bg:creator.bg:role.keyword", "bga:segment.bg:personnames.bg:personname.keyword", "bga:segment.bg:producers.bg:producer.bg:name.keyword", "bga:segment.bg:qualification.bg:block.keyword", "bga:segment.bg:qualification.bg:license.keyword", "bga:segment.bg:qualification.bg:rights.keyword", "bga:segment.bg:qualification.bg:source.keyword", "bga:segment.bg:recordinglocations.bg:location.keyword", "bga:segment.bg:recordings.bg:recording.bg:withaudience.keyword", "bga:segment.bg:sourcecatalog", "bga:segment.bg:speakers.bg:speaker.bg:name.keyword", "bga:segment.bg:speakers.bg:speaker.bg:role.keyword", "bga:segment.bg:sponsors.bg:sponsor.bg:name.keyword", "bga:segment.bg:themes.bg:theme.keyword", "bga:segment.bg:type.keyword", "bga:series.bg:casts.bg:cast.bg:character.keyword", "bga:series.bg:casts.bg:cast.bg:clarification.keyword", "bga:series.bg:casts.bg:cast.bg:name.keyword", "bga:series.bg:catalog.keyword", "bga:series.bg:context.bg:awards.keyword", "bga:series.bg:context.bg:composition.keyword", "bga:series.bg:context.bg:context.keyword", "bga:series.bg:context.bg:occasion.keyword", "bga:series.bg:contractors.bg:contractor.bg:name.keyword", "bga:series.bg:creators.bg:creator.bg:clarification.keyword", "bga:series.bg:creators.bg:creator.bg:name.keyword", "bga:series.bg:creators.bg:creator.bg:roles.bg:role.keyword", "bga:series.bg:distributionchannel", "bga:series.bg:executives.bg:executive.bg:clarification.keyword", "bga:series.bg:executives.bg:executive.bg:name.keyword", "bga:series.bg:executives.bg:executive.bg:role.keyword", "bga:series.bg:funders.bg:funder.bg:name.keyword", "bga:series.bg:genres.bg:genre.keyword", "bga:series.bg:keywords.bg:keyword.keyword", "bga:series.bg:links.bg:link.keyword", "bga:series.bg:locations.bg:location.keyword", "bga:series.bg:museum-genres.bg:genre.keyword", "bga:series.bg:musicstyles.bg:musicstyle.keyword", "bga:series.bg:names.bg:name.keyword", "bga:series.bg:originalCreators.bg:creator.bg:clarification.keyword", "bga:series.bg:originalCreators.bg:creator.bg:name.keyword", "bga:series.bg:originalCreators.bg:creator.bg:role.keyword", "bga:series.bg:personnames.bg:personname.keyword", "bga:series.bg:producers.bg:producer.bg:name.keyword", "bga:series.bg:productioncountries.bg:country.keyword", "bga:series.bg:qualification.bg:block.keyword", "bga:series.bg:qualification.bg:license.keyword", "bga:series.bg:qualification.bg:rights.keyword", "bga:series.bg:qualification.bg:source.keyword", "bga:series.bg:recordinglocations.bg:location.keyword", "bga:series.bg:recordings.bg:recording.bg:withaudience.keyword", "bga:series.bg:speakers.bg:speaker.bg:name.keyword", "bga:series.bg:speakers.bg:speaker.bg:role.keyword", "bga:series.bg:sponsors.bg:sponsor.bg:name.keyword", "bga:series.bg:targetgroups.bg:targetgroup.keyword", "mediaType" ]; } getFacetSelectionList = allowHeavyFacets => { const kwFields = super.getFacetSelectionList(allowHeavyFacets) || []; return allowHeavyFacets ? kwFields : kwFields.filter(kw => this.FORBIDDEN_FACETS.indexOf(kw.value) == -1); }; getNamespace = () => 'http://av.beeldengeluid.nl/'; //the type varies for B&G getCollectionMediaTypes = () => []; //used to prevent graphs to blow up in case the minimum date is really low (because of incorrect data) getMinimumYear = () => 1875; getMaximumYear = () => 2018; //override so the annotation layer indices are ignored getCollectionIndices = () => [this.getCollectionId()]; //this means the resource viewer needs to request access to the content before it can show them requiresPlayoutAccess = () => true; getAnonymousUserRestrictions = () => ({ prohibitThumbnails : false, // show thumbnails in search results prohibitPlayout : true // playing content }); hideOffAirContent = () => true; getPreferredDateField = () => 'bg:publications.bg:publication.bg:sortdate'; // if there's a ; we assume multiple dates, so we split the string into an array and remove any extra spaces (trim) getFormattedDates = date => { if(date && typeof(date) === 'string') { const formatDateString = str => { const d = str.trim().split('-'); return d[2] + '-' + d[1] + '-' + d[0]; } if(date.indexOf(';') !== -1) { return date.split(';').map(formatDateString); } else { return [formatDateString(date)]; } } return null; }; //gets the fields for showing highlights in search snippets, in order of preference /*getPreferredHighlightFields = () => [ 'layer__asr.words', 'bg:description', 'bg:summary', 'bg:title', 'bg:museum-summary', 'bg:museum-description', 'bg:keyword', 'bg:name', 'bg:personname', 'bg:location', 'bg:used-archivematerial' ];*/ getForbiddenHighlightFields = () => ["bg:carriers", "bg:publications", "bg:context", "dcterms:isPartOf"]; getFieldsToExclude = () => [ 'layer__asr', 'bga:season.bg:transcripts', 'bg:transcripts', 'bga:segment.bg:transcripts' ]; //fields for ES highlighting getHighlightFields = () => [ 'layer__asr.words', //TODO extend with other fields that are currently excluded 'bga:season.bg:transcripts', 'bga:segment.bg:transcripts', 'bg:transcripts', 'bg:description', 'bg:title', 'bg:museum-summary', 'bg:museum-description', 'bg:summary', 'bg:used-archivematerial', '*.bg:description', '*.bg:summary', '*.bg:title', '*.bg:keyword', '*.bg:name', '*.bg:personname', '*.bg:location' ]; getFacets = () => [ { field: 'mediaType', title : 'mediaType', id : 'mediaType', type : 'string' }, { field: 'bg:publications.bg:publication.bg:broadcasters.bg:broadcaster', title : 'Broadcaster', id : 'broadcaster', type : 'string' }, { field: 'bga:series.bg:genres.bg:genre.keyword', title : 'Genre (series)', id : 'genre', type : 'string' }, { field: 'bg:keywords.bg:keyword.keyword', title : 'Keyword', id : 'keyword', type : 'string' } ]; getNestedSearchLayers = () => [{ path : 'layer__asr', fields : [ 'layer__asr.words' ] }]; getMetadataFieldCategories = () => [ { id : 'titles', label : 'Titles', fields : [ 'bga:series.bg:maintitles.bg:title', 'bga:season.bg:maintitles.bg:title', 'bga:segment.bg:maintitles.bg:title', 'bg:maintitles.bg:title' ] }, { id : 'descriptions', label : 'Descriptions', fields : [ 'bg:summary', 'bg:description', 'bga:segment.bg:description', 'bg:museum-description', 'bga:series.bg:museum-description', 'bga:segment.bg:museum-description' ] }, { id : 'subtitles', label : 'Keywords from Subtitles', fields : [ 'bg:transcripts.bg:transcript.bg:text', 'bga:segment.bg:transcripts.bg:transcript.bg:text' ] }, { id: 'subject', label: 'Subject keywords', fields: [ 'bg:keywords.bg:keyword', 'bga:season.bg:keywords.bg:keyword', 'bga:segment.bg:keywords.bg:keyword', 'bga:series.bg:keywords.bg:keyword' ] }, { id: 'person', label: 'Persons - all', fields: [ 'bg:cast.bg:name', 'bga:series.bg:cast.bg:name', 'bga:season.bg:cast.bg:name', 'bga:segment.bg:cast.bg:name', 'bg:creators.bg:creator.bg:name', 'bga:series.bg:creators.bg:creator.bg:name', 'bga:season.bg:creators.bg:creator.bg:name', 'bga:segment.bg:creators.bg:creator.bg:name', 'bg:originalCreators.bg:creator.bg:name', 'bga:series.bg:originalCreators.bg:creator.bg:name', 'bga:season.bg:originalCreators.bg:creator.bg:name', 'bga:segment.bg:originalCreators.bg:creator.bg:name', 'bg:executives.bg:executive.bg:name', 'bga:series.bg:executives.bg:executive.bg:name', 'bga:season.bg:executives.bg:executive.bg:name', 'bga:segment.bg:executives.bg:executive.bg:name', 'bg:speakers.bg:speaker.bg:name', 'bga:series.bg:speakers.bg:speaker.bg:name', 'bga:season.bg:speakers.bg:speaker.bg:name', 'bga:segment.bg:speakers.bg:speaker.bg:name', 'bg:personnames.bg:personname', 'bga:series.bg:personnames.bg:personname', 'bga:season.bg:personnames.bg:personname', 'bga:segment.bg:personnames.bg:personname', ] }, { id: 'production-person', label: 'Persons - production', fields: [ 'bg:cast.bg:name', 'bga:series.bg:cast.bg:name', 'bga:season.bg:cast.bg:name', 'bga:segment.bg:cast.bg:name', 'bg:creators.bg:creator.bg:name', 'bga:series.bg:creators.bg:creator.bg:name', 'bga:season.bg:creators.bg:creator.bg:name', 'bga:segment.bg:creators.bg:creator.bg:name', 'bg:originalCreators.bg:creator.bg:name', 'bga:series.bg:originalCreators.bg:creator.bg:name', 'bga:season.bg:originalCreators.bg:creator.bg:name', 'bga:segment.bg:originalCreators.bg:creator.bg:name', 'bg:executives.bg:executive.bg:name', 'bga:series.bg:executives.bg:executive.bg:name', 'bga:season.bg:executives.bg:executive.bg:name', 'bga:segment.bg:executives.bg:executive.bg:name', ] }, { id: 'guest-person', label: 'Persons - guests', fields: [ 'bg:speakers.bg:speaker.bg:name', 'bga:series.bg:speakers.bg:speaker.bg:name', 'bga:season.bg:speakers.bg:speaker.bg:name', 'bga:segment.bg:speakers.bg:speaker.bg:name', ] }, { id: 'discussed-person', label: 'Persons - subject of discussion', fields: [ 'bg:personnames.bg:personname', 'bga:series.bg:personnames.bg:personname', 'bga:season.bg:personnames.bg:personname', 'bga:segment.bg:personnames.bg:personname', ] }, { id : 'asr', label : 'Speech transcripts (ASR)', nestedPath : 'layer__asr', enrichment : true, fields : [ 'layer__asr.words' ] } ]; getEntityConfig = () => ({ person : { //currently only person entities are supported autocompleteConfig : { 'fieldClusters' : ["person", "production-person", "guest-person", "discussed-person"], //for which field category clusters autocomplete is offered 'autocompleteVocabulary' : 'gtaa-persons', //vocabulary to use for auto-complete 'autocompleteParams' : { //assumes the searchAPI.autocomplete is used 'ConceptScheme' : 'http://data.beeldengeluid.nl/gtaa/Persoonsnamen', //any other parameters 'Fields': [ '@graph.skos:prefLabel.@value', '@graph.skos:altLabel.@value', '@graph.skos:hiddenLabel.@value' ], 'Method': 'match', 'Lang': 'nl' } }, fetchEntityDetails : (entityUri, callback) => { SearchAPI.grlc( 'BENG-PERSON-LD', 'getPersonDataForGTAAId', {gtaa: entityUri}, //TODO make sure the calling code abstracts the gtaa ID to entity ID NISV_GTAA_WIKIDATA.formatPersonDetails, callback ); }, fetchEntitiesInResource : (resourceUri, callback) => { SearchAPI.grlc( 'BENG-LD', 'getPersonsAndRolesForProgramAndParts', {resource: resourceUri}, //TODO make sure the calling code abstracts the gtaa ID to entity ID NISV_GTAA_WIKIDATA.formatPersonsInResource, callback ); } } }); //gets the item's URI in the linked data store getResourceUri = resource => { return "http://data.rdlabs.beeldengeluid.nl/resource/program/" + resource["resourceId"].replace("@program", "") }; getItemDetailData = (result, currentDateField) => result; //in case the field name cannot be found in the field descriptions formatIndexFieldName = esFieldName => esFieldName === 'layer__asr.words' ? 'Speech transcript' : esFieldName; //override to add the level to each field (which will display in the FieldSelector) //at the same time, exclude the level from the pretty field name getAllFields = () => { const fields = super.getAllFields() fields.forEach(f => { const tmp = f.id.split('.'); let metadataLayer = 'program'; if (tmp[0].indexOf('bga:') !== -1) { metadataLayer = tmp[0].substring(tmp[0].indexOf(':') + 1); } f.level = metadataLayer; f.title = this.toPrettyFieldName(f.id, false); }); return fields }; usesLayeredModel = () => true; // Returns the first media object that matches the search term in the ASR transcript // If a media object is provided, only looks for matches within that media object findMatchingMediaFragments = (resource, searchTerm, activeMediaObject=null) => { if(!resource.rawData.layer__asr) return null; if(!resource.playableContent) return null; let regex = null; try { regex = RegexUtil.generateRegexForSearchTerm(searchTerm); } catch (err) { console.debug('invalid regex'); } const firstMatch = regex ? resource.rawData.layer__asr.find(phrase => { return phrase.words.search(regex) !== -1 && ( activeMediaObject ? activeMediaObject.assetId === phrase.carrierId : true ); }) : null; return firstMatch ? resource.playableContent.find(mo => mo.assetId === firstMatch.carrierId) : null; }; }