server/bo_client/app/models/document.js
author ymh <ymh.work@gmail.com>
Thu, 25 Feb 2016 10:20:01 +0100
changeset 130 fac22d8c2df8
parent 32 9765cf7cf817
child 137 1baa7c6bd370
permissions -rw-r--r--
add subjects to model + simple display on bo + add command to downloads documents to fixtures for test

import DS from 'ember-data';
import Ember from 'ember';
import _ from 'lodash/lodash';

export default DS.Model.extend({
  //id: attr('string'),
  uri: DS.attr('string'),

  title: DS.attr('string'),

  language: DS.attr('string'),

  publishers: DS.attr({defaultValue: function() { return []; }}),

  contributors: DS.attr({defaultValue: function() { return []; }}),

  subjects: DS.attr({defaultValue: function() { return []; }}),

  mediaArray: DS.attr({defaultValue: function() { return []; }}),

  mediaList: Ember.computed('mediaArray', function() {
    var res = [];
    var mp3 = null;
    _.forEach(this.get('mediaArray'), function(m) {
      if(m.format === 'audio/mpeg') {
        mp3 = m;
      } else if (m.format.startsWith('audio/')) {
        res.push(m);
      }
    });
    if(mp3) {
      res.unshift(mp3);
    }
    return res;
  }),

  addContributor: function(contrib_def) {
    var contributors = this.get('contributors');
    if(_.findIndex(contributors, function(c) { return _.isEqual(c, contrib_def);}) < 0) {
      contributors.pushObject(contrib_def);
    }
    // must set dirty
    this.set('contributors', _.clone(this.get('contributors')));
  },
  removeContributor: function(contrib_def) {
    var contributors = this.get('contributors');
    var index = _.findIndex(contributors, function(c) { return _.isEqual(c, contrib_def);});
    if(index >= 0) {
      contributors.removeAt(index);
    }
    //must set dirty
    this.set('contributors', _.clone(this.get('contributors')));
  },
  saveContributor: function(contrib_def, index) {
    var contributors = this.get('contributors');
    if(index < 0 || index >= contributors.length) {
      return;
    }

    var contrib_def_map = {name: contrib_def.name||"", url: contrib_def.url||"", role: contrib_def.role||""};
    var existingContribs = _.filter(contributors, function(c, i) {
      return (i!==index && _.isEqual({name: c.name||"", url: c.url||"", role: c.role||""}, contrib_def_map));
    });
    if(existingContribs.length > 0) {
      // contributor exists, remove contributor @ index
      contributors.removeAt(index);
    }
    else {
      contributors[index] = contrib_def;
    }
    //must set dirty only if needed
    this.set('contributors', _.clone(this.get('contributors')));
  }

});