import JSONAPISerializer from 'ember-data/serializers/json-api';
export default JSONAPISerializer.extend({
normalizeResponse: function(store, primaryModelClass, payload, id) {
var speakers = payload['resources'].find(resource => resource['id'] === 'speakers');
var topics = payload['resources'].find(resource => resource['id'] === 'topics');
var translationISO = false;
var buildFragment = function(annotation) {
var fragment = {
'original': annotation['content']['data']['content']
};
if(annotation['content']['data']['transl']) {
fragment['translation'] = annotation['content']['data']['transl']['@value'];
}
if(annotation['content']['data']['words']) {
var words = [];
annotation['content']['data']['words'].forEach(function(word) {
words.push({
'original': word['content'],
'translation': word['transl']['@value']
});
});
fragment['literal'] = words;
}
if(annotation['content']['data']['speaker']) {
if(typeof annotation['content']['data']['speaker'] === 'object') {
var speaker = speakers['content']['data'].find(speaker => speaker['id'] === annotation['content']['data']['speaker']['id-ref']);
if(speaker) {
fragment['speaker'] = speaker['name'];
}
} else {
fragment['speaker'] = annotation['content']['data']['speaker'];
}
}
return fragment;
};
var annotations = [];
payload['annotations'].forEach(function(annotation) {
var previous = annotations[annotations.length - 1];
if(previous && annotation['begin'] === previous.begin && annotation['end'] === previous.end) {
previous.fragments.push(buildFragment(annotation));
} else {
var object = {
'fragments': [buildFragment(annotation)],
'begin': annotation['begin'],
'end': annotation['end'],
};
annotations.push(object);
}
if(!translationISO && annotation['content']['data']['transl']) {
translationISO = annotation['content']['data']['transl']['@language'];
}
});
if(payload['annotation-types'].length) {
var types = [];
payload['annotation-types'].forEach(function(t) {
var object = {
'title': t['dc:title'],
'begin': t['corpus:begin'],
'end': t['corpus:end']
};
var fragments = annotations.find(function(annotation) { return annotation['begin'] === t['corpus:begin'] && annotation['end'] === t['corpus:end']; });
if(fragments) {
object['fragments'] = fragments['fragments'];
}
types.push(object);
});
annotations = types;
}
if(payload['lists'].length) {
var sections = [];
var lists = [];
payload['lists'].forEach(function(list) {
var topic = topics['content']['data'].find(topic => topic.id === list['meta']['corpus:topic']['id-ref']);
sections.push({
'title': topic['desc'],
'begin': list['meta']['corpus:begin'],
'end': list['meta']['corpus:end']
});
lists.push(annotations.filter(annotation => annotation['begin'] >= list['meta']['corpus:begin'] && annotation['end'] <= list['meta']['corpus:end']));
});
annotations = lists;
console.log(sections);
} else {
annotations = [annotations];
}
var response = {
'data': {
'id': id,
'type': 'transcript',
'attributes': {
'title': {},
'annotations': annotations
}
}
};
if(sections) {
response.data.attributes.sections = sections;
}
if(Array.isArray(payload['meta']['dc:title'])) {
var original = payload['meta']['dc:title'].find(function(title) { return title['@language'] !== translationISO; });
if(original) {
response.data.attributes.title.original = original['@value'];
}
var translation = payload['meta']['dc:title'].find(function(title) { return title['@language'] === translationISO; });
if(translation) {
response.data.attributes.title.translation = translation['@value'];
}
} else {
response.data.attributes.title.original = payload['meta']['dc:title']['@value'];
}
return response;
}
});