server/bo_client/app/models/document.js
author ymh <ymh.work@gmail.com>
Sun, 06 Mar 2016 00:29:01 +0100
changeset 141 c0e8626a271c
parent 137 1baa7c6bd370
child 158 366509ae2f37
permissions -rw-r--r--
literal are now objects if one of lang or datatype is not null
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
import DS from 'ember-data';
20
a9b98b16b053 add contributor list + edition pane
ymh <ymh.work@gmail.com>
parents: 4
diff changeset
     2
import Ember from 'ember';
a9b98b16b053 add contributor list + edition pane
ymh <ymh.work@gmail.com>
parents: 4
diff changeset
     3
import _ from 'lodash/lodash';
137
1baa7c6bd370 add subject edition
ymh <ymh.work@gmail.com>
parents: 130
diff changeset
     4
import * as utils from 'corpus-common-addon/utils/utils';
4
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
export default DS.Model.extend({
32
9765cf7cf817 upgrade to ember-cli 2.2(beta)
ymh <ymh.work@gmail.com>
parents: 28
diff changeset
     7
  //id: attr('string'),
4
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
  uri: DS.attr('string'),
20
a9b98b16b053 add contributor list + edition pane
ymh <ymh.work@gmail.com>
parents: 4
diff changeset
     9
4
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
  title: DS.attr('string'),
20
a9b98b16b053 add contributor list + edition pane
ymh <ymh.work@gmail.com>
parents: 4
diff changeset
    11
28
b0b56e0f8c7f Add contributor edition
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
    12
  language: DS.attr('string'),
b0b56e0f8c7f Add contributor edition
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
    13
32
9765cf7cf817 upgrade to ember-cli 2.2(beta)
ymh <ymh.work@gmail.com>
parents: 28
diff changeset
    14
  publishers: DS.attr({defaultValue: function() { return []; }}),
20
a9b98b16b053 add contributor list + edition pane
ymh <ymh.work@gmail.com>
parents: 4
diff changeset
    15
32
9765cf7cf817 upgrade to ember-cli 2.2(beta)
ymh <ymh.work@gmail.com>
parents: 28
diff changeset
    16
  contributors: DS.attr({defaultValue: function() { return []; }}),
20
a9b98b16b053 add contributor list + edition pane
ymh <ymh.work@gmail.com>
parents: 4
diff changeset
    17
130
fac22d8c2df8 add subjects to model + simple display on bo + add command to downloads documents to fixtures for test
ymh <ymh.work@gmail.com>
parents: 32
diff changeset
    18
  subjects: DS.attr({defaultValue: function() { return []; }}),
fac22d8c2df8 add subjects to model + simple display on bo + add command to downloads documents to fixtures for test
ymh <ymh.work@gmail.com>
parents: 32
diff changeset
    19
32
9765cf7cf817 upgrade to ember-cli 2.2(beta)
ymh <ymh.work@gmail.com>
parents: 28
diff changeset
    20
  mediaArray: DS.attr({defaultValue: function() { return []; }}),
20
a9b98b16b053 add contributor list + edition pane
ymh <ymh.work@gmail.com>
parents: 4
diff changeset
    21
a9b98b16b053 add contributor list + edition pane
ymh <ymh.work@gmail.com>
parents: 4
diff changeset
    22
  mediaList: Ember.computed('mediaArray', function() {
a9b98b16b053 add contributor list + edition pane
ymh <ymh.work@gmail.com>
parents: 4
diff changeset
    23
    var res = [];
a9b98b16b053 add contributor list + edition pane
ymh <ymh.work@gmail.com>
parents: 4
diff changeset
    24
    var mp3 = null;
a9b98b16b053 add contributor list + edition pane
ymh <ymh.work@gmail.com>
parents: 4
diff changeset
    25
    _.forEach(this.get('mediaArray'), function(m) {
a9b98b16b053 add contributor list + edition pane
ymh <ymh.work@gmail.com>
parents: 4
diff changeset
    26
      if(m.format === 'audio/mpeg') {
a9b98b16b053 add contributor list + edition pane
ymh <ymh.work@gmail.com>
parents: 4
diff changeset
    27
        mp3 = m;
a9b98b16b053 add contributor list + edition pane
ymh <ymh.work@gmail.com>
parents: 4
diff changeset
    28
      } else if (m.format.startsWith('audio/')) {
a9b98b16b053 add contributor list + edition pane
ymh <ymh.work@gmail.com>
parents: 4
diff changeset
    29
        res.push(m);
a9b98b16b053 add contributor list + edition pane
ymh <ymh.work@gmail.com>
parents: 4
diff changeset
    30
      }
a9b98b16b053 add contributor list + edition pane
ymh <ymh.work@gmail.com>
parents: 4
diff changeset
    31
    });
a9b98b16b053 add contributor list + edition pane
ymh <ymh.work@gmail.com>
parents: 4
diff changeset
    32
    if(mp3) {
a9b98b16b053 add contributor list + edition pane
ymh <ymh.work@gmail.com>
parents: 4
diff changeset
    33
      res.unshift(mp3);
a9b98b16b053 add contributor list + edition pane
ymh <ymh.work@gmail.com>
parents: 4
diff changeset
    34
    }
a9b98b16b053 add contributor list + edition pane
ymh <ymh.work@gmail.com>
parents: 4
diff changeset
    35
    return res;
a9b98b16b053 add contributor list + edition pane
ymh <ymh.work@gmail.com>
parents: 4
diff changeset
    36
  }),
28
b0b56e0f8c7f Add contributor edition
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
    37
b0b56e0f8c7f Add contributor edition
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
    38
  addContributor: function(contrib_def) {
b0b56e0f8c7f Add contributor edition
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
    39
    var contributors = this.get('contributors');
b0b56e0f8c7f Add contributor edition
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
    40
    if(_.findIndex(contributors, function(c) { return _.isEqual(c, contrib_def);}) < 0) {
b0b56e0f8c7f Add contributor edition
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
    41
      contributors.pushObject(contrib_def);
b0b56e0f8c7f Add contributor edition
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
    42
    }
b0b56e0f8c7f Add contributor edition
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
    43
    // must set dirty
b0b56e0f8c7f Add contributor edition
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
    44
    this.set('contributors', _.clone(this.get('contributors')));
b0b56e0f8c7f Add contributor edition
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
    45
  },
b0b56e0f8c7f Add contributor edition
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
    46
  removeContributor: function(contrib_def) {
b0b56e0f8c7f Add contributor edition
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
    47
    var contributors = this.get('contributors');
b0b56e0f8c7f Add contributor edition
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
    48
    var index = _.findIndex(contributors, function(c) { return _.isEqual(c, contrib_def);});
b0b56e0f8c7f Add contributor edition
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
    49
    if(index >= 0) {
b0b56e0f8c7f Add contributor edition
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
    50
      contributors.removeAt(index);
b0b56e0f8c7f Add contributor edition
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
    51
    }
b0b56e0f8c7f Add contributor edition
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
    52
    //must set dirty
b0b56e0f8c7f Add contributor edition
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
    53
    this.set('contributors', _.clone(this.get('contributors')));
b0b56e0f8c7f Add contributor edition
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
    54
  },
b0b56e0f8c7f Add contributor edition
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
    55
  saveContributor: function(contrib_def, index) {
b0b56e0f8c7f Add contributor edition
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
    56
    var contributors = this.get('contributors');
b0b56e0f8c7f Add contributor edition
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
    57
    if(index < 0 || index >= contributors.length) {
b0b56e0f8c7f Add contributor edition
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
    58
      return;
b0b56e0f8c7f Add contributor edition
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
    59
    }
b0b56e0f8c7f Add contributor edition
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
    60
b0b56e0f8c7f Add contributor edition
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
    61
    var contrib_def_map = {name: contrib_def.name||"", url: contrib_def.url||"", role: contrib_def.role||""};
b0b56e0f8c7f Add contributor edition
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
    62
    var existingContribs = _.filter(contributors, function(c, i) {
b0b56e0f8c7f Add contributor edition
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
    63
      return (i!==index && _.isEqual({name: c.name||"", url: c.url||"", role: c.role||""}, contrib_def_map));
b0b56e0f8c7f Add contributor edition
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
    64
    });
b0b56e0f8c7f Add contributor edition
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
    65
    if(existingContribs.length > 0) {
b0b56e0f8c7f Add contributor edition
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
    66
      // contributor exists, remove contributor @ index
b0b56e0f8c7f Add contributor edition
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
    67
      contributors.removeAt(index);
b0b56e0f8c7f Add contributor edition
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
    68
    }
b0b56e0f8c7f Add contributor edition
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
    69
    else {
b0b56e0f8c7f Add contributor edition
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
    70
      contributors[index] = contrib_def;
b0b56e0f8c7f Add contributor edition
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
    71
    }
b0b56e0f8c7f Add contributor edition
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
    72
    //must set dirty only if needed
b0b56e0f8c7f Add contributor edition
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
    73
    this.set('contributors', _.clone(this.get('contributors')));
137
1baa7c6bd370 add subject edition
ymh <ymh.work@gmail.com>
parents: 130
diff changeset
    74
  },
1baa7c6bd370 add subject edition
ymh <ymh.work@gmail.com>
parents: 130
diff changeset
    75
  removeSubject: function(subject_def) {
1baa7c6bd370 add subject edition
ymh <ymh.work@gmail.com>
parents: 130
diff changeset
    76
    var subjects = this.get('subjects');
1baa7c6bd370 add subject edition
ymh <ymh.work@gmail.com>
parents: 130
diff changeset
    77
    var index = _.findIndex(subjects, function(s) { return _.isEqual(s, subject_def);});
1baa7c6bd370 add subject edition
ymh <ymh.work@gmail.com>
parents: 130
diff changeset
    78
    if(index >= 0) {
1baa7c6bd370 add subject edition
ymh <ymh.work@gmail.com>
parents: 130
diff changeset
    79
      subjects.removeAt(index);
1baa7c6bd370 add subject edition
ymh <ymh.work@gmail.com>
parents: 130
diff changeset
    80
    }
1baa7c6bd370 add subject edition
ymh <ymh.work@gmail.com>
parents: 130
diff changeset
    81
    //must set dirty
1baa7c6bd370 add subject edition
ymh <ymh.work@gmail.com>
parents: 130
diff changeset
    82
    this.set('subjects', _.clone(subjects));
1baa7c6bd370 add subject edition
ymh <ymh.work@gmail.com>
parents: 130
diff changeset
    83
  },
1baa7c6bd370 add subject edition
ymh <ymh.work@gmail.com>
parents: 130
diff changeset
    84
  addSubject: function(subject_def) {
1baa7c6bd370 add subject edition
ymh <ymh.work@gmail.com>
parents: 130
diff changeset
    85
    var subjects = this.get('subjects');
1baa7c6bd370 add subject edition
ymh <ymh.work@gmail.com>
parents: 130
diff changeset
    86
    if(_.findIndex(subjects, function(s) { return _.isEqual(s, subject_def) || _.isEqual(s, utils.switchArkBnfLink(subject_def));}) < 0) {
1baa7c6bd370 add subject edition
ymh <ymh.work@gmail.com>
parents: 130
diff changeset
    87
      subjects.pushObject(subject_def);
1baa7c6bd370 add subject edition
ymh <ymh.work@gmail.com>
parents: 130
diff changeset
    88
    }
1baa7c6bd370 add subject edition
ymh <ymh.work@gmail.com>
parents: 130
diff changeset
    89
    // must set dirty
1baa7c6bd370 add subject edition
ymh <ymh.work@gmail.com>
parents: 130
diff changeset
    90
    this.set('subjects', _.clone(subjects));
1baa7c6bd370 add subject edition
ymh <ymh.work@gmail.com>
parents: 130
diff changeset
    91
  },
28
b0b56e0f8c7f Add contributor edition
ymh <ymh.work@gmail.com>
parents: 20
diff changeset
    92
4
f55970e41793 first skeleton of bo client in ember
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
});