# HG changeset patch # User Chloe Laisne # Date 1471780282 -7200 # Node ID eba9edbd8f46c9fd8bf4d8490c5eacef4f591ba9 # Parent 18f0c3ee9aa50cc8383b8bd67633c86ff3cc46a6 Add title to annotation Divide annotations in fragments when timestamp is the same diff -r 18f0c3ee9aa5 -r eba9edbd8f46 cms/app-client/app/components/playlist-component.js --- a/cms/app-client/app/components/playlist-component.js Thu Aug 18 17:02:02 2016 +0200 +++ b/cms/app-client/app/components/playlist-component.js Sun Aug 21 13:51:22 2016 +0200 @@ -62,7 +62,7 @@ this.get('player').play(id); }, - pause: function(id) { + pause: function() { this.get('player').pause(); }, diff -r 18f0c3ee9aa5 -r eba9edbd8f46 cms/app-client/app/components/transcript-component.js --- a/cms/app-client/app/components/transcript-component.js Thu Aug 18 17:02:02 2016 +0200 +++ b/cms/app-client/app/components/transcript-component.js Sun Aug 21 13:51:22 2016 +0200 @@ -15,7 +15,6 @@ }), didUpdate: function() { - var self = this; var target = Ember.$('.sentence.active'); if(this.get('autoscroll') && target.length) { Ember.$(this.get('autoscrollElement')).animate({ diff -r 18f0c3ee9aa5 -r eba9edbd8f46 cms/app-client/app/helpers/if-operator.js --- a/cms/app-client/app/helpers/if-operator.js Thu Aug 18 17:02:02 2016 +0200 +++ b/cms/app-client/app/helpers/if-operator.js Sun Aug 21 13:51:22 2016 +0200 @@ -4,16 +4,12 @@ switch(operator) { case '>': return value1 > value2; - break; case '>=': return value1 >= value2; - break; case '<=': return value1 <= value2; - break; case '<': return value1 < value2; - break; default: break; } diff -r 18f0c3ee9aa5 -r eba9edbd8f46 cms/app-client/app/serializers/transcript.js --- a/cms/app-client/app/serializers/transcript.js Thu Aug 18 17:02:02 2016 +0200 +++ b/cms/app-client/app/serializers/transcript.js Sun Aug 21 13:51:22 2016 +0200 @@ -2,34 +2,60 @@ export default JSONAPISerializer.extend({ - normalizeResponse: function(store, primaryModelClass, payload, id, requestType) { - var lang = false; + normalizeResponse: function(store, primaryModelClass, payload, id) { + var speakers = payload['resources'].find(resource => resource['id'] === 'speakers'); + 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 annotationObject = { - 'content': annotation.content.data.content, - 'start': annotation.begin, - 'end': annotation.end - }; - if(annotation.content.data.transl) { - annotationObject.translation = annotation.content.data.transl['@value']; - if (!lang) { - lang = annotation.content.data.transl['@language']; + 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'], + }; + var information = payload['annotation-types'].find(function(t) { return t['corpus:begin'] === annotation['begin'] && t['corpus:end'] === annotation['end']; }); + if(information) { + object.title = information['dc:title']; } + annotations.push(object); } - if(annotation.content.data.words) { - var words = []; - annotation.content.data.words.forEach(function(word) { - var wordObject = { - 'content': word.content, - 'translation': word.transl['@value'] - }; - words.push(wordObject); - }) - annotationObject.words = words; + if(!translationISO && annotation['content']['data']['transl']) { + translationISO = annotation['content']['data']['transl']['@language']; } - annotations.push(annotationObject); }); var response = { @@ -43,17 +69,17 @@ } }; - if(Array.isArray(payload.meta['dc:title'])) { - var original = payload.meta['dc:title'].find(function(title) { return title['@language'] !== lang; }); - var translation = payload.meta['dc:title'].find(function(title) { return title['@language'] === lang; }); + 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']; + response.data.attributes.title.original = payload['meta']['dc:title']['@value']; } diff -r 18f0c3ee9aa5 -r eba9edbd8f46 cms/app-client/app/styles/components/playlist-component.scss --- a/cms/app-client/app/styles/components/playlist-component.scss Thu Aug 18 17:02:02 2016 +0200 +++ b/cms/app-client/app/styles/components/playlist-component.scss Sun Aug 21 13:51:22 2016 +0200 @@ -28,6 +28,10 @@ color: $dark-grey; } +.playlist-component ul li:last-child { + border-bottom: none; +} + .playlist-component ul li:not(.playing) { cursor: pointer; diff -r 18f0c3ee9aa5 -r eba9edbd8f46 cms/app-client/app/styles/components/transcript-component.scss --- a/cms/app-client/app/styles/components/transcript-component.scss Thu Aug 18 17:02:02 2016 +0200 +++ b/cms/app-client/app/styles/components/transcript-component.scss Sun Aug 21 13:51:22 2016 +0200 @@ -57,6 +57,7 @@ .transcript-component .transcript .sentence.active { background-color: $grey-blue; color: $light-white; + pointer-events: none; } .transcript-component .transcript .sentence .words { @@ -119,6 +120,7 @@ } .transcript-component .transcript .sentence.active .fa-play { + pointer-events: all; border-color: $light-blue; color: $light-blue; opacity: 1; @@ -131,4 +133,20 @@ .transcript-component .transcript .sentence p { margin: 0; line-height: 24px; +} + +.transcript-component .transcript .sentence .speaker { + font-weight: bold; +} + +.transcript-component .transcript .sentence .title { + float: right; + line-height: 24px; + padding-left: 20px; + color: $grey-blue; + font-weight: bold; +} + +.transcript-component .transcript .sentence.active .title { + color: $light-white; } \ No newline at end of file diff -r 18f0c3ee9aa5 -r eba9edbd8f46 cms/app-client/app/templates/components/transcript-component.hbs --- a/cms/app-client/app/templates/components/transcript-component.hbs Thu Aug 18 17:02:02 2016 +0200 +++ b/cms/app-client/app/templates/components/transcript-component.hbs Sun Aug 21 13:51:22 2016 +0200 @@ -1,44 +1,38 @@

- {{player.transcript.title.original}} + {{player.transcript.title.original}} {{#if player.transcript.title.translation}} - {{player.transcript.title.translation}} + {{player.transcript.title.translation}} {{/if}}

    {{#each player.transcript.annotations as |annotation|}} -{{log 'each-annotation'}} - {{#if (if-and (if-operator player.progress '>=' annotation.start) (if-operator player.progress '<' annotation.end))}} -
  1. - Play - {{#if annotation.content}}

    {{annotation.content}}

    {{/if}} - {{#if annotation.words}} -
    - {{#each annotation.words as |word|}} -
    -

    {{word.content}}

    -

    {{word.translation}}

    -
    - {{/each}} -
    - {{/if}} - {{#if annotation.translation}}

    {{annotation.translation}}

    {{/if}} -
  2. - {{else}} -
  3. - Play - {{#if annotation.content}}

    {{annotation.content}}

    {{/if}} - {{#if annotation.words}} -
    - {{#each annotation.words as |word|}} -
    -

    {{word.content}}

    -

    {{word.translation}}

    -
    - {{/each}} -
    - {{/if}} - {{#if annotation.translation}}

    {{annotation.translation}}

    {{/if}} -
  4. - {{/if}} +
  5. + Play + {{#if annotation.title}}{{annotation.title}}{{/if}} + {{#each annotation.fragments as |fragment|}} +
    + + {{#if fragment.original}} +

    + {{#if fragment.speaker}}{{fragment.speaker}} :{{/if}} + {{fragment.original}} +

    + {{/if}} + {{#if fragment.literal}} +
    + {{#each fragment.literal as |word|}} +
    +

    {{word.original}}

    +

    {{word.translation}}

    +
    + {{/each}} +
    + {{/if}} + {{#if fragment.translation}} +

    {{fragment.translation}}

    + {{/if}} +
    + {{/each}} +
  6. {{/each}}
\ No newline at end of file