add publisher and duration_ms to model
authorymh <ymh.work@gmail.com>
Wed, 06 Jul 2016 14:22:24 +0200
changeset 229 744379451219
parent 228 a2497a2b6224
child 230 6e4cabc614ef
add publisher and duration_ms to model
cms/app-client/app/models/document.js
cms/app-client/app/templates/components/player-component.hbs
cms/app-client/app/templates/components/playlist-component.hbs
cms/app-client/app/templates/tabs/detail.hbs
cms/app-client/mirage/serializers/sparse-document.js
--- a/cms/app-client/app/models/document.js	Tue Jul 05 16:53:04 2016 +0200
+++ b/cms/app-client/app/models/document.js	Wed Jul 06 14:22:24 2016 +0200
@@ -8,6 +8,19 @@
     issued: DS.attr('date'),
     title: DS.attr('string'),
     language: DS.attr('string'),
+    duration_ms: DS.attr('number', {
+        defaultValue: function() {
+            var self = this;
+            var duration = 0;
+            Object.keys(this.get('mediaArray')).forEach(function(key) {
+                if (!duration && self.get('mediaArray')[key].extent_ms) {
+                    duration = self.get('mediaArray')[key].extent_ms;
+                }
+            });
+            return duration;
+        }
+    }),
+    publisher: DS.attr('string'),
     publishers: DS.attr({ defaultValue: function() { return []; } }),
     contributors: DS.attr({ defaultValue: function() { return []; } }),
     geoInfo: DS.attr({ defaultValue: function() { return {}; } }),
@@ -29,15 +42,12 @@
         return res;
     }),
 
-    duration: Ember.computed('mediaArray', function() {
-        var self = this;
-        var duration = 0;
-        Object.keys(this.get('mediaArray')).forEach(function(key) {
-            if (!duration && self.get('mediaArray')[key].extent_ms) {
-                duration = self.get('mediaArray')[key].extent_ms;
-            }
-        });
-        return duration / 1000;
+    duration: Ember.computed('duration_ms', function() {
+        return this.get('duration_ms')/1000;
+    }),
+
+    publishers_disp: Ember.computed('publisher', 'publishers', function() {
+        return this.get('publisher')?this.get('publisher'):this.get('publishers').join(', ');
     })
 
 });
--- a/cms/app-client/app/templates/components/player-component.hbs	Tue Jul 05 16:53:04 2016 +0200
+++ b/cms/app-client/app/templates/components/player-component.hbs	Wed Jul 06 14:22:24 2016 +0200
@@ -19,7 +19,7 @@
 			{{doc-language class="language" url=item.language}}
 		</p>
 		<p>
-			<span title="{{author item.publishers}}" class="author">{{author item.publishers}}</span>
+			<span title="{{item.publishers_disp}}" class="author">{{item.publishers_disp}}</span>
 			<span class="date">{{short-date item.issued}}</span>
 		</p>
 	</div>
--- a/cms/app-client/app/templates/components/playlist-component.hbs	Tue Jul 05 16:53:04 2016 +0200
+++ b/cms/app-client/app/templates/components/playlist-component.hbs	Wed Jul 06 14:22:24 2016 +0200
@@ -2,7 +2,7 @@
 <ul>
     {{#each documents as |document| }}
     <li id="{{document.id}}" class="{{if (eq player.item document.id) 'playing'}}{{if (eq document.id notice) 'notice'}}">
-        
+
         <div class="tools">
             <span class="time">
             {{#if (ifAnd (eq player.playing true) (eq player.item document.id))}}
@@ -15,8 +15,8 @@
             <button{{action 'displayNotice' document.id}} class="{{if (ifOr (ifAnd (eq player.window 'notice') (eq player.item document.id)) (eq document.id notice)) 'active'}}">Notice</button>
         </div>
         <span class="title">{{ document.title }}</span>
-        <span class="author">{{author document.publishers}}</span>
+        <span class="author">{{document.publishers_disp}}</span>
         {{doc-language class="language" url=document.language}}
     </li>
     {{/each}}
-</ul>
\ No newline at end of file
+</ul>
--- a/cms/app-client/app/templates/tabs/detail.hbs	Tue Jul 05 16:53:04 2016 +0200
+++ b/cms/app-client/app/templates/tabs/detail.hbs	Wed Jul 06 14:22:24 2016 +0200
@@ -6,7 +6,7 @@
     <p><b>Titre </b>{{model.title}}</p>
     <p><b>Langue </b>{{doc-language url=model.language}}</p>
     <p><b>Enregistré le </b>{{model.modified}}</p>
-    <p><b>Interviewer </b>{{model.publishers}}</p>
+    <p><b>Interviewer </b>{{model.publishers_disp}}</p>
     <p><b>Description </b>{{model.description}}</p>
     <p><b>Type de Discours </b>{{model.type}}</p>
     <p><b>Localisation </b>{{model.spatial}}</p>
--- a/cms/app-client/mirage/serializers/sparse-document.js	Tue Jul 05 16:53:04 2016 +0200
+++ b/cms/app-client/mirage/serializers/sparse-document.js	Wed Jul 06 14:22:24 2016 +0200
@@ -1,6 +1,24 @@
 // mirage/serializers/blog-post.js
 import BaseSerializer from './application';
+import _ from 'lodash';
 
 export default BaseSerializer.extend({
-    attrs: ['id', 'title', 'language', 'url', 'issued', 'modified', 'publishers', 'mediaArray']
+    attrs: ['id', 'title', 'language', 'url', 'issued', 'modified', 'publishers', 'mediaArray'],
+
+    serialize(response, request) {
+
+        console.log(request, response);
+        // This is how to call super, as Mirage borrows [Backbone's implementation of extend](http://backbonejs.org/#Model-extend)
+        let json = BaseSerializer.prototype.serialize.apply(this, arguments);
+
+        json['documents'] = _.map(json['documents'], function(doc) {
+            let res = _.omit(doc, ['publishers', 'mediaArray']);
+            res['publisher'] = doc['publishers'].join(', ');
+            res['duration_ms'] = doc['mediaArray']?doc['mediaArray'][_(Object.keys(doc['mediaArray'])).first()]['extent_ms']:0;
+            return res;
+        });
+
+        return json;
+    }
+
 });