# all files / clique/util/ Accessor.js

23.26% Statements 10/43
22.22% Branches 4/18
5.88% Functions 1/17
10.81% Lines 4/37
1 statement, 1 branch Ignored

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    931×
    1×

    1×

     import _ from 'underscore';
    import Backbone from 'backbone';

    export function Accessor (raw) {
      var disallowed = new Set();

      raw.data = raw.data || {};

      _.each(['key', 'source', 'target', 'data'], function (d) {
        disallowed.add(d);
      });

      return _.extend({
        key: function () {
          return raw.key;
        },

        source: function () {
          return raw.source.key || raw.source;
        },

        target: function () {
          return raw.target.key || raw.target;
        },

        getAttribute: function (prop) {
          if (disallowed.has(prop)) {
            return;
          }
          return raw[prop];
        },

        setAttribute: function (prop, value) {
          if (disallowed.has(prop)) {
            return false;
          }

          raw[prop] = value;
          return true;
        },

        clearAttribute: function (prop) {
          if (disallowed.has(prop)) {
            return false;
          }

          delete raw[prop];
          return true;
        },

        getAllAttributes: function () {
          var result = {};

          _.each(raw, function (value, key) {
            if (!disallowed.has(key)) {
              result[key] = value;
            }
          });

          return result;
        },

        getData: function (prop) {
          return raw.data[prop];
        },

        setData: function (prop, value) {
          raw.data[prop] = value;
          this.trigger('changed', this, prop, value);
        },

        clearData: function (prop) {
          delete raw.data[prop];
          this.trigger('cleared', this, prop);
        },

        getAllData: function () {
          var result = {};

          _.each(raw.data, function (value, key) {
            result[key] = value;
          });

          return result;
        },

        getRaw: function () {
          return raw;
        }
      }, Backbone.Events);
    }