vis-rails 1.0.2 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +1 -1
- data/README.md +2 -0
- data/lib/vis/rails/version.rb +1 -1
- data/vendor/assets/javascripts/module/exports-only-timeline.js +55 -0
- data/vendor/assets/javascripts/vis-only-timeline.js +23 -0
- data/vendor/assets/javascripts/vis.js +3 -3
- data/vendor/assets/stylesheets/vis-only-timeline.css +3 -0
- data/vendor/assets/vis/DataSet.js +106 -130
- data/vendor/assets/vis/DataView.js +35 -37
- data/vendor/assets/vis/graph/Edge.js +225 -45
- data/vendor/assets/vis/graph/Graph.js +120 -24
- data/vendor/assets/vis/graph/Node.js +16 -16
- data/vendor/assets/vis/graph/graphMixins/HierarchicalLayoutMixin.js +1 -1
- data/vendor/assets/vis/graph/graphMixins/ManipulationMixin.js +143 -0
- data/vendor/assets/vis/graph/graphMixins/SelectionMixin.js +81 -3
- data/vendor/assets/vis/graph3d/Graph3d.js +3306 -0
- data/vendor/assets/vis/module/exports.js +2 -3
- data/vendor/assets/vis/timeline/Range.js +93 -80
- data/vendor/assets/vis/timeline/Timeline.js +525 -428
- data/vendor/assets/vis/timeline/component/Component.js +19 -53
- data/vendor/assets/vis/timeline/component/CurrentTime.js +57 -25
- data/vendor/assets/vis/timeline/component/CustomTime.js +55 -19
- data/vendor/assets/vis/timeline/component/Group.js +47 -50
- data/vendor/assets/vis/timeline/component/ItemSet.js +402 -206
- data/vendor/assets/vis/timeline/component/TimeAxis.js +112 -169
- data/vendor/assets/vis/timeline/component/css/animation.css +33 -0
- data/vendor/assets/vis/timeline/component/css/currenttime.css +1 -1
- data/vendor/assets/vis/timeline/component/css/customtime.css +1 -1
- data/vendor/assets/vis/timeline/component/css/item.css +1 -11
- data/vendor/assets/vis/timeline/component/css/itemset.css +13 -18
- data/vendor/assets/vis/timeline/component/css/labelset.css +8 -6
- data/vendor/assets/vis/timeline/component/css/panel.css +56 -13
- data/vendor/assets/vis/timeline/component/css/timeaxis.css +15 -8
- data/vendor/assets/vis/timeline/component/item/Item.js +16 -15
- data/vendor/assets/vis/timeline/component/item/ItemBox.js +30 -30
- data/vendor/assets/vis/timeline/component/item/ItemPoint.js +20 -21
- data/vendor/assets/vis/timeline/component/item/ItemRange.js +23 -24
- data/vendor/assets/vis/timeline/component/item/ItemRangeOverflow.js +10 -10
- data/vendor/assets/vis/timeline/stack.js +5 -5
- data/vendor/assets/vis/util.js +81 -35
- metadata +7 -4
- data/vendor/assets/vis/timeline/component/Panel.js +0 -170
- data/vendor/assets/vis/timeline/component/RootPanel.js +0 -176
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 1002e56b0744e4169ce63ab556d257a94cac683c
         | 
| 4 | 
            +
              data.tar.gz: e3012aa0301eef513c00f21af009a1c2ff257108
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: ff7655bf5bc3ba371b9ee010a5de16f3de2181c4bdc658b552ab91e18108ab6c9868329a41ec50abdfb6d4a52816498c9257c23ddd3785a5a0e0e4801a3a3d1f
         | 
| 7 | 
            +
              data.tar.gz: a70b60516ac5cd314bb23cc4ced33125bd0663d0471d849d347e24e995679f6f5d842c7bb8a866c2930b565f1a2e43fae1042546bf245dffc70ce4f8ff3adc23
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    
    
        data/lib/vis/rails/version.rb
    CHANGED
    
    
| @@ -0,0 +1,55 @@ | |
| 1 | 
            +
            /**
         | 
| 2 | 
            +
             * vis.js module exports
         | 
| 3 | 
            +
             */
         | 
| 4 | 
            +
            var vis = {
         | 
| 5 | 
            +
              util: util,
         | 
| 6 | 
            +
              moment: moment,
         | 
| 7 | 
            +
             | 
| 8 | 
            +
              DataSet: DataSet,
         | 
| 9 | 
            +
              DataView: DataView,
         | 
| 10 | 
            +
              Range: Range,
         | 
| 11 | 
            +
              stack: stack,
         | 
| 12 | 
            +
              TimeStep: TimeStep,
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              components: {
         | 
| 15 | 
            +
                items: {
         | 
| 16 | 
            +
                  Item: Item,
         | 
| 17 | 
            +
                  ItemBox: ItemBox,
         | 
| 18 | 
            +
                  ItemPoint: ItemPoint,
         | 
| 19 | 
            +
                  ItemRange: ItemRange
         | 
| 20 | 
            +
                },
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                Component: Component,
         | 
| 23 | 
            +
                ItemSet: ItemSet,
         | 
| 24 | 
            +
                TimeAxis: TimeAxis
         | 
| 25 | 
            +
              },
         | 
| 26 | 
            +
             | 
| 27 | 
            +
              Timeline: Timeline
         | 
| 28 | 
            +
            };
         | 
| 29 | 
            +
             | 
| 30 | 
            +
            /**
         | 
| 31 | 
            +
             * CommonJS module exports
         | 
| 32 | 
            +
             */
         | 
| 33 | 
            +
            if (typeof exports !== 'undefined') {
         | 
| 34 | 
            +
              exports = vis;
         | 
| 35 | 
            +
            }
         | 
| 36 | 
            +
            if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
         | 
| 37 | 
            +
              module.exports = vis;
         | 
| 38 | 
            +
            }
         | 
| 39 | 
            +
             | 
| 40 | 
            +
            /**
         | 
| 41 | 
            +
             * AMD module exports
         | 
| 42 | 
            +
             */
         | 
| 43 | 
            +
            if (typeof(define) === 'function') {
         | 
| 44 | 
            +
              define(function () {
         | 
| 45 | 
            +
                return vis;
         | 
| 46 | 
            +
              });
         | 
| 47 | 
            +
            }
         | 
| 48 | 
            +
             | 
| 49 | 
            +
            /**
         | 
| 50 | 
            +
             * Window exports
         | 
| 51 | 
            +
             */
         | 
| 52 | 
            +
            if (typeof window !== 'undefined') {
         | 
| 53 | 
            +
              // attach the module to the window, load as a regular javascript file
         | 
| 54 | 
            +
              window['vis'] = vis;
         | 
| 55 | 
            +
            }
         | 
| @@ -0,0 +1,23 @@ | |
| 1 | 
            +
            //= require ../vis/module/header
         | 
| 2 | 
            +
            //= require moment
         | 
| 3 | 
            +
            //= require hammer
         | 
| 4 | 
            +
            //= require ../component/emitter
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            //= require ../vis/shim
         | 
| 7 | 
            +
            //= require ../vis/util
         | 
| 8 | 
            +
            //= require ../vis/DataSet
         | 
| 9 | 
            +
            //= require ../vis/DataView
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            //= require ../vis/timeline/stack
         | 
| 12 | 
            +
            //= require ../vis/timeline/TimeStep
         | 
| 13 | 
            +
            //= require ../vis/timeline/component/Component
         | 
| 14 | 
            +
            //= require ../vis/timeline/Range
         | 
| 15 | 
            +
            //= require ../vis/timeline/component/TimeAxis
         | 
| 16 | 
            +
            //= require ../vis/timeline/component/CurrentTime
         | 
| 17 | 
            +
            //= require ../vis/timeline/component/CustomTime
         | 
| 18 | 
            +
            //= require_tree ../vis/timeline/component/item
         | 
| 19 | 
            +
            //= require ../vis/timeline/component/ItemSet
         | 
| 20 | 
            +
            //= require ../vis/timeline/component/Group
         | 
| 21 | 
            +
            //= require ../vis/timeline/Timeline
         | 
| 22 | 
            +
             | 
| 23 | 
            +
            //= require ./module/exports-only-timeline
         | 
| @@ -10,10 +10,8 @@ | |
| 10 10 |  | 
| 11 11 | 
             
            //= require ../vis/timeline/stack
         | 
| 12 12 | 
             
            //= require ../vis/timeline/TimeStep
         | 
| 13 | 
            -
            //= require ../vis/timeline/Range
         | 
| 14 13 | 
             
            //= require ../vis/timeline/component/Component
         | 
| 15 | 
            -
            //= require ../vis/timeline/ | 
| 16 | 
            -
            //= require ../vis/timeline/component/RootPanel
         | 
| 14 | 
            +
            //= require ../vis/timeline/Range
         | 
| 17 15 | 
             
            //= require ../vis/timeline/component/TimeAxis
         | 
| 18 16 | 
             
            //= require ../vis/timeline/component/CurrentTime
         | 
| 19 17 | 
             
            //= require ../vis/timeline/component/CustomTime
         | 
| @@ -32,4 +30,6 @@ | |
| 32 30 | 
             
            //= require_tree ../vis/graph/graphMixins
         | 
| 33 31 | 
             
            //= require ../vis/graph/Graph
         | 
| 34 32 |  | 
| 33 | 
            +
            //= require ../vis/graph3d/Graph3d
         | 
| 34 | 
            +
             | 
| 35 35 | 
             
            //= require ../vis/module/exports
         | 
| @@ -4,7 +4,7 @@ | |
| 4 4 | 
             
             * Usage:
         | 
| 5 5 | 
             
             *     var dataSet = new DataSet({
         | 
| 6 6 | 
             
             *         fieldId: '_id',
         | 
| 7 | 
            -
             *          | 
| 7 | 
            +
             *         type: {
         | 
| 8 8 | 
             
             *             // ...
         | 
| 9 9 | 
             
             *         }
         | 
| 10 10 | 
             
             *     });
         | 
| @@ -30,43 +30,46 @@ | |
| 30 30 | 
             
             * @param {Object} [options]   Available options:
         | 
| 31 31 | 
             
             *                             {String} fieldId Field name of the id in the
         | 
| 32 32 | 
             
             *                                              items, 'id' by default.
         | 
| 33 | 
            -
             *                             {Object.<String, String}  | 
| 33 | 
            +
             *                             {Object.<String, String} type
         | 
| 34 34 | 
             
             *                                              A map with field names as key,
         | 
| 35 35 | 
             
             *                                              and the field type as value.
         | 
| 36 36 | 
             
             * @constructor DataSet
         | 
| 37 37 | 
             
             */
         | 
| 38 38 | 
             
            // TODO: add a DataSet constructor DataSet(data, options)
         | 
| 39 39 | 
             
            function DataSet (data, options) {
         | 
| 40 | 
            -
              this.id = util.randomUUID();
         | 
| 41 | 
            -
             | 
| 42 40 | 
             
              // correctly read optional arguments
         | 
| 43 41 | 
             
              if (data && !Array.isArray(data) && !util.isDataTable(data)) {
         | 
| 44 42 | 
             
                options = data;
         | 
| 45 43 | 
             
                data = null;
         | 
| 46 44 | 
             
              }
         | 
| 47 45 |  | 
| 48 | 
            -
              this. | 
| 49 | 
            -
              this. | 
| 50 | 
            -
              this. | 
| 51 | 
            -
              this. | 
| 52 | 
            -
              this.showInternalIds = this.options.showInternalIds || false; // show internal ids with the get function
         | 
| 46 | 
            +
              this._options = options || {};
         | 
| 47 | 
            +
              this._data = {};                                 // map with data indexed by id
         | 
| 48 | 
            +
              this._fieldId = this._options.fieldId || 'id';   // name of the field containing id
         | 
| 49 | 
            +
              this._type = {};                                 // internal field types (NOTE: this can differ from this._options.type)
         | 
| 53 50 |  | 
| 54 | 
            -
               | 
| 55 | 
            -
             | 
| 56 | 
            -
             | 
| 57 | 
            -
             | 
| 51 | 
            +
              // all variants of a Date are internally stored as Date, so we can convert
         | 
| 52 | 
            +
              // from everything to everything (also from ISODate to Number for example)
         | 
| 53 | 
            +
              if (this._options.type) {
         | 
| 54 | 
            +
                for (var field in this._options.type) {
         | 
| 55 | 
            +
                  if (this._options.type.hasOwnProperty(field)) {
         | 
| 56 | 
            +
                    var value = this._options.type[field];
         | 
| 58 57 | 
             
                    if (value == 'Date' || value == 'ISODate' || value == 'ASPDate') {
         | 
| 59 | 
            -
                      this. | 
| 58 | 
            +
                      this._type[field] = 'Date';
         | 
| 60 59 | 
             
                    }
         | 
| 61 60 | 
             
                    else {
         | 
| 62 | 
            -
                      this. | 
| 61 | 
            +
                      this._type[field] = value;
         | 
| 63 62 | 
             
                    }
         | 
| 64 63 | 
             
                  }
         | 
| 65 64 | 
             
                }
         | 
| 66 65 | 
             
              }
         | 
| 67 66 |  | 
| 68 | 
            -
               | 
| 69 | 
            -
              this. | 
| 67 | 
            +
              // TODO: deprecated since version 1.1.1 (or 2.0.0?)
         | 
| 68 | 
            +
              if (this._options.convert) {
         | 
| 69 | 
            +
                throw new Error('Option "convert" is deprecated. Use "type" instead.');
         | 
| 70 | 
            +
              }
         | 
| 71 | 
            +
             | 
| 72 | 
            +
              this._subscribers = {};  // event subscribers
         | 
| 70 73 |  | 
| 71 74 | 
             
              // add initial data when provided
         | 
| 72 75 | 
             
              if (data) {
         | 
| @@ -83,11 +86,11 @@ function DataSet (data, options) { | |
| 83 86 | 
             
             *                                  {Object | null} params
         | 
| 84 87 | 
             
             *                                  {String | Number} senderId
         | 
| 85 88 | 
             
             */
         | 
| 86 | 
            -
            DataSet.prototype.on = function | 
| 87 | 
            -
              var subscribers = this. | 
| 89 | 
            +
            DataSet.prototype.on = function(event, callback) {
         | 
| 90 | 
            +
              var subscribers = this._subscribers[event];
         | 
| 88 91 | 
             
              if (!subscribers) {
         | 
| 89 92 | 
             
                subscribers = [];
         | 
| 90 | 
            -
                this. | 
| 93 | 
            +
                this._subscribers[event] = subscribers;
         | 
| 91 94 | 
             
              }
         | 
| 92 95 |  | 
| 93 96 | 
             
              subscribers.push({
         | 
| @@ -103,10 +106,10 @@ DataSet.prototype.subscribe = DataSet.prototype.on; | |
| 103 106 | 
             
             * @param {String} event
         | 
| 104 107 | 
             
             * @param {function} callback
         | 
| 105 108 | 
             
             */
         | 
| 106 | 
            -
            DataSet.prototype.off = function | 
| 107 | 
            -
              var subscribers = this. | 
| 109 | 
            +
            DataSet.prototype.off = function(event, callback) {
         | 
| 110 | 
            +
              var subscribers = this._subscribers[event];
         | 
| 108 111 | 
             
              if (subscribers) {
         | 
| 109 | 
            -
                this. | 
| 112 | 
            +
                this._subscribers[event] = subscribers.filter(function (listener) {
         | 
| 110 113 | 
             
                  return (listener.callback != callback);
         | 
| 111 114 | 
             
                });
         | 
| 112 115 | 
             
              }
         | 
| @@ -128,11 +131,11 @@ DataSet.prototype._trigger = function (event, params, senderId) { | |
| 128 131 | 
             
              }
         | 
| 129 132 |  | 
| 130 133 | 
             
              var subscribers = [];
         | 
| 131 | 
            -
              if (event in this. | 
| 132 | 
            -
                subscribers = subscribers.concat(this. | 
| 134 | 
            +
              if (event in this._subscribers) {
         | 
| 135 | 
            +
                subscribers = subscribers.concat(this._subscribers[event]);
         | 
| 133 136 | 
             
              }
         | 
| 134 | 
            -
              if ('*' in this. | 
| 135 | 
            -
                subscribers = subscribers.concat(this. | 
| 137 | 
            +
              if ('*' in this._subscribers) {
         | 
| 138 | 
            +
                subscribers = subscribers.concat(this._subscribers['*']);
         | 
| 136 139 | 
             
              }
         | 
| 137 140 |  | 
| 138 141 | 
             
              for (var i = 0; i < subscribers.length; i++) {
         | 
| @@ -155,7 +158,7 @@ DataSet.prototype.add = function (data, senderId) { | |
| 155 158 | 
             
                  id,
         | 
| 156 159 | 
             
                  me = this;
         | 
| 157 160 |  | 
| 158 | 
            -
              if (data | 
| 161 | 
            +
              if (Array.isArray(data)) {
         | 
| 159 162 | 
             
                // Array
         | 
| 160 163 | 
             
                for (var i = 0, len = data.length; i < len; i++) {
         | 
| 161 164 | 
             
                  id = me._addItem(data[i]);
         | 
| @@ -202,11 +205,11 @@ DataSet.prototype.update = function (data, senderId) { | |
| 202 205 | 
             
              var addedIds = [],
         | 
| 203 206 | 
             
                  updatedIds = [],
         | 
| 204 207 | 
             
                  me = this,
         | 
| 205 | 
            -
                  fieldId = me. | 
| 208 | 
            +
                  fieldId = me._fieldId;
         | 
| 206 209 |  | 
| 207 210 | 
             
              var addOrUpdate = function (item) {
         | 
| 208 211 | 
             
                var id = item[fieldId];
         | 
| 209 | 
            -
                if (me. | 
| 212 | 
            +
                if (me._data[id]) {
         | 
| 210 213 | 
             
                  // update item
         | 
| 211 214 | 
             
                  id = me._updateItem(item);
         | 
| 212 215 | 
             
                  updatedIds.push(id);
         | 
| @@ -218,7 +221,7 @@ DataSet.prototype.update = function (data, senderId) { | |
| 218 221 | 
             
                }
         | 
| 219 222 | 
             
              };
         | 
| 220 223 |  | 
| 221 | 
            -
              if (data | 
| 224 | 
            +
              if (Array.isArray(data)) {
         | 
| 222 225 | 
             
                // Array
         | 
| 223 226 | 
             
                for (var i = 0, len = data.length; i < len; i++) {
         | 
| 224 227 | 
             
                  addOrUpdate(data[i]);
         | 
| @@ -277,9 +280,9 @@ DataSet.prototype.update = function (data, senderId) { | |
| 277 280 | 
             
             * {Number | String} id         The id of an item
         | 
| 278 281 | 
             
             * {Number[] | String{}} ids    An array with ids of items
         | 
| 279 282 | 
             
             * {Object} options             An Object with options. Available options:
         | 
| 280 | 
            -
             *                              {String} [ | 
| 281 | 
            -
             * | 
| 282 | 
            -
             *                              {Object.<String, String>} [ | 
| 283 | 
            +
             *                              {String} [returnType] Type of data to be
         | 
| 284 | 
            +
             *                                  returned. Can be 'DataTable' or 'Array' (default)
         | 
| 285 | 
            +
             *                              {Object.<String, String>} [type]
         | 
| 283 286 | 
             
             *                              {String[]} [fields] field names to be returned
         | 
| 284 287 | 
             
             *                              {function} [filter] filter items
         | 
| 285 288 | 
             
             *                              {String | function} [order] Order the items by
         | 
| @@ -292,7 +295,6 @@ DataSet.prototype.update = function (data, senderId) { | |
| 292 295 | 
             
             */
         | 
| 293 296 | 
             
            DataSet.prototype.get = function (args) {
         | 
| 294 297 | 
             
              var me = this;
         | 
| 295 | 
            -
              var globalShowInternalIds = this.showInternalIds;
         | 
| 296 298 |  | 
| 297 299 | 
             
              // parse the arguments
         | 
| 298 300 | 
             
              var id, ids, options, data;
         | 
| @@ -316,42 +318,35 @@ DataSet.prototype.get = function (args) { | |
| 316 318 | 
             
              }
         | 
| 317 319 |  | 
| 318 320 | 
             
              // determine the return type
         | 
| 319 | 
            -
              var  | 
| 320 | 
            -
              if (options && options. | 
| 321 | 
            -
                 | 
| 321 | 
            +
              var returnType;
         | 
| 322 | 
            +
              if (options && options.returnType) {
         | 
| 323 | 
            +
                returnType = (options.returnType == 'DataTable') ? 'DataTable' : 'Array';
         | 
| 322 324 |  | 
| 323 | 
            -
                if (data && ( | 
| 325 | 
            +
                if (data && (returnType != util.getType(data))) {
         | 
| 324 326 | 
             
                  throw new Error('Type of parameter "data" (' + util.getType(data) + ') ' +
         | 
| 325 327 | 
             
                      'does not correspond with specified options.type (' + options.type + ')');
         | 
| 326 328 | 
             
                }
         | 
| 327 | 
            -
                if ( | 
| 329 | 
            +
                if (returnType == 'DataTable' && !util.isDataTable(data)) {
         | 
| 328 330 | 
             
                  throw new Error('Parameter "data" must be a DataTable ' +
         | 
| 329 331 | 
             
                      'when options.type is "DataTable"');
         | 
| 330 332 | 
             
                }
         | 
| 331 333 | 
             
              }
         | 
| 332 334 | 
             
              else if (data) {
         | 
| 333 | 
            -
                 | 
| 335 | 
            +
                returnType = (util.getType(data) == 'DataTable') ? 'DataTable' : 'Array';
         | 
| 334 336 | 
             
              }
         | 
| 335 337 | 
             
              else {
         | 
| 336 | 
            -
                 | 
| 337 | 
            -
              }
         | 
| 338 | 
            -
             | 
| 339 | 
            -
              // we allow the setting of this value for a single get request.
         | 
| 340 | 
            -
              if (options != undefined) {
         | 
| 341 | 
            -
                if (options.showInternalIds != undefined) {
         | 
| 342 | 
            -
                  this.showInternalIds = options.showInternalIds;
         | 
| 343 | 
            -
                }
         | 
| 338 | 
            +
                returnType = 'Array';
         | 
| 344 339 | 
             
              }
         | 
| 345 340 |  | 
| 346 341 | 
             
              // build options
         | 
| 347 | 
            -
              var  | 
| 342 | 
            +
              var type = options && options.type || this._options.type;
         | 
| 348 343 | 
             
              var filter = options && options.filter;
         | 
| 349 344 | 
             
              var items = [], item, itemId, i, len;
         | 
| 350 345 |  | 
| 351 346 | 
             
              // convert items
         | 
| 352 347 | 
             
              if (id != undefined) {
         | 
| 353 348 | 
             
                // return a single item
         | 
| 354 | 
            -
                item = me._getItem(id,  | 
| 349 | 
            +
                item = me._getItem(id, type);
         | 
| 355 350 | 
             
                if (filter && !filter(item)) {
         | 
| 356 351 | 
             
                  item = null;
         | 
| 357 352 | 
             
                }
         | 
| @@ -359,7 +354,7 @@ DataSet.prototype.get = function (args) { | |
| 359 354 | 
             
              else if (ids != undefined) {
         | 
| 360 355 | 
             
                // return a subset of items
         | 
| 361 356 | 
             
                for (i = 0, len = ids.length; i < len; i++) {
         | 
| 362 | 
            -
                  item = me._getItem(ids[i],  | 
| 357 | 
            +
                  item = me._getItem(ids[i], type);
         | 
| 363 358 | 
             
                  if (!filter || filter(item)) {
         | 
| 364 359 | 
             
                    items.push(item);
         | 
| 365 360 | 
             
                  }
         | 
| @@ -367,9 +362,9 @@ DataSet.prototype.get = function (args) { | |
| 367 362 | 
             
              }
         | 
| 368 363 | 
             
              else {
         | 
| 369 364 | 
             
                // return all items
         | 
| 370 | 
            -
                for (itemId in this. | 
| 371 | 
            -
                  if (this. | 
| 372 | 
            -
                    item = me._getItem(itemId,  | 
| 365 | 
            +
                for (itemId in this._data) {
         | 
| 366 | 
            +
                  if (this._data.hasOwnProperty(itemId)) {
         | 
| 367 | 
            +
                    item = me._getItem(itemId, type);
         | 
| 373 368 | 
             
                    if (!filter || filter(item)) {
         | 
| 374 369 | 
             
                      items.push(item);
         | 
| 375 370 | 
             
                    }
         | 
| @@ -377,9 +372,6 @@ DataSet.prototype.get = function (args) { | |
| 377 372 | 
             
                }
         | 
| 378 373 | 
             
              }
         | 
| 379 374 |  | 
| 380 | 
            -
              // restore the global value of showInternalIds
         | 
| 381 | 
            -
              this.showInternalIds = globalShowInternalIds;
         | 
| 382 | 
            -
             | 
| 383 375 | 
             
              // order the results
         | 
| 384 376 | 
             
              if (options && options.order && id == undefined) {
         | 
| 385 377 | 
             
                this._sort(items, options.order);
         | 
| @@ -399,7 +391,7 @@ DataSet.prototype.get = function (args) { | |
| 399 391 | 
             
              }
         | 
| 400 392 |  | 
| 401 393 | 
             
              // return the results
         | 
| 402 | 
            -
              if ( | 
| 394 | 
            +
              if (returnType == 'DataTable') {
         | 
| 403 395 | 
             
                var columns = this._getColumnNames(data);
         | 
| 404 396 | 
             
                if (id != undefined) {
         | 
| 405 397 | 
             
                  // append a single item to the data table
         | 
| @@ -445,10 +437,10 @@ DataSet.prototype.get = function (args) { | |
| 445 437 | 
             
             * @return {Array} ids
         | 
| 446 438 | 
             
             */
         | 
| 447 439 | 
             
            DataSet.prototype.getIds = function (options) {
         | 
| 448 | 
            -
              var data = this. | 
| 440 | 
            +
              var data = this._data,
         | 
| 449 441 | 
             
                  filter = options && options.filter,
         | 
| 450 442 | 
             
                  order = options && options.order,
         | 
| 451 | 
            -
                   | 
| 443 | 
            +
                  type = options && options.type || this._options.type,
         | 
| 452 444 | 
             
                  i,
         | 
| 453 445 | 
             
                  len,
         | 
| 454 446 | 
             
                  id,
         | 
| @@ -463,7 +455,7 @@ DataSet.prototype.getIds = function (options) { | |
| 463 455 | 
             
                  items = [];
         | 
| 464 456 | 
             
                  for (id in data) {
         | 
| 465 457 | 
             
                    if (data.hasOwnProperty(id)) {
         | 
| 466 | 
            -
                      item = this._getItem(id,  | 
| 458 | 
            +
                      item = this._getItem(id, type);
         | 
| 467 459 | 
             
                      if (filter(item)) {
         | 
| 468 460 | 
             
                        items.push(item);
         | 
| 469 461 | 
             
                      }
         | 
| @@ -473,16 +465,16 @@ DataSet.prototype.getIds = function (options) { | |
| 473 465 | 
             
                  this._sort(items, order);
         | 
| 474 466 |  | 
| 475 467 | 
             
                  for (i = 0, len = items.length; i < len; i++) {
         | 
| 476 | 
            -
                    ids[i] = items[i][this. | 
| 468 | 
            +
                    ids[i] = items[i][this._fieldId];
         | 
| 477 469 | 
             
                  }
         | 
| 478 470 | 
             
                }
         | 
| 479 471 | 
             
                else {
         | 
| 480 472 | 
             
                  // create unordered list
         | 
| 481 473 | 
             
                  for (id in data) {
         | 
| 482 474 | 
             
                    if (data.hasOwnProperty(id)) {
         | 
| 483 | 
            -
                      item = this._getItem(id,  | 
| 475 | 
            +
                      item = this._getItem(id, type);
         | 
| 484 476 | 
             
                      if (filter(item)) {
         | 
| 485 | 
            -
                        ids.push(item[this. | 
| 477 | 
            +
                        ids.push(item[this._fieldId]);
         | 
| 486 478 | 
             
                      }
         | 
| 487 479 | 
             
                    }
         | 
| 488 480 | 
             
                  }
         | 
| @@ -502,7 +494,7 @@ DataSet.prototype.getIds = function (options) { | |
| 502 494 | 
             
                  this._sort(items, order);
         | 
| 503 495 |  | 
| 504 496 | 
             
                  for (i = 0, len = items.length; i < len; i++) {
         | 
| 505 | 
            -
                    ids[i] = items[i][this. | 
| 497 | 
            +
                    ids[i] = items[i][this._fieldId];
         | 
| 506 498 | 
             
                  }
         | 
| 507 499 | 
             
                }
         | 
| 508 500 | 
             
                else {
         | 
| @@ -510,7 +502,7 @@ DataSet.prototype.getIds = function (options) { | |
| 510 502 | 
             
                  for (id in data) {
         | 
| 511 503 | 
             
                    if (data.hasOwnProperty(id)) {
         | 
| 512 504 | 
             
                      item = data[id];
         | 
| 513 | 
            -
                      ids.push(item[this. | 
| 505 | 
            +
                      ids.push(item[this._fieldId]);
         | 
| 514 506 | 
             
                    }
         | 
| 515 507 | 
             
                  }
         | 
| 516 508 | 
             
                }
         | 
| @@ -523,7 +515,7 @@ DataSet.prototype.getIds = function (options) { | |
| 523 515 | 
             
             * Execute a callback function for every item in the dataset.
         | 
| 524 516 | 
             
             * @param {function} callback
         | 
| 525 517 | 
             
             * @param {Object} [options]    Available options:
         | 
| 526 | 
            -
             *                              {Object.<String, String>} [ | 
| 518 | 
            +
             *                              {Object.<String, String>} [type]
         | 
| 527 519 | 
             
             *                              {String[]} [fields] filter fields
         | 
| 528 520 | 
             
             *                              {function} [filter] filter items
         | 
| 529 521 | 
             
             *                              {String | function} [order] Order the items by
         | 
| @@ -531,8 +523,8 @@ DataSet.prototype.getIds = function (options) { | |
| 531 523 | 
             
             */
         | 
| 532 524 | 
             
            DataSet.prototype.forEach = function (callback, options) {
         | 
| 533 525 | 
             
              var filter = options && options.filter,
         | 
| 534 | 
            -
                   | 
| 535 | 
            -
                  data = this. | 
| 526 | 
            +
                  type = options && options.type || this._options.type,
         | 
| 527 | 
            +
                  data = this._data,
         | 
| 536 528 | 
             
                  item,
         | 
| 537 529 | 
             
                  id;
         | 
| 538 530 |  | 
| @@ -542,7 +534,7 @@ DataSet.prototype.forEach = function (callback, options) { | |
| 542 534 |  | 
| 543 535 | 
             
                for (var i = 0, len = items.length; i < len; i++) {
         | 
| 544 536 | 
             
                  item = items[i];
         | 
| 545 | 
            -
                  id = item[this. | 
| 537 | 
            +
                  id = item[this._fieldId];
         | 
| 546 538 | 
             
                  callback(item, id);
         | 
| 547 539 | 
             
                }
         | 
| 548 540 | 
             
              }
         | 
| @@ -550,7 +542,7 @@ DataSet.prototype.forEach = function (callback, options) { | |
| 550 542 | 
             
                // unordered
         | 
| 551 543 | 
             
                for (id in data) {
         | 
| 552 544 | 
             
                  if (data.hasOwnProperty(id)) {
         | 
| 553 | 
            -
                    item = this._getItem(id,  | 
| 545 | 
            +
                    item = this._getItem(id, type);
         | 
| 554 546 | 
             
                    if (!filter || filter(item)) {
         | 
| 555 547 | 
             
                      callback(item, id);
         | 
| 556 548 | 
             
                    }
         | 
| @@ -563,7 +555,7 @@ DataSet.prototype.forEach = function (callback, options) { | |
| 563 555 | 
             
             * Map every item in the dataset.
         | 
| 564 556 | 
             
             * @param {function} callback
         | 
| 565 557 | 
             
             * @param {Object} [options]    Available options:
         | 
| 566 | 
            -
             *                              {Object.<String, String>} [ | 
| 558 | 
            +
             *                              {Object.<String, String>} [type]
         | 
| 567 559 | 
             
             *                              {String[]} [fields] filter fields
         | 
| 568 560 | 
             
             *                              {function} [filter] filter items
         | 
| 569 561 | 
             
             *                              {String | function} [order] Order the items by
         | 
| @@ -572,15 +564,15 @@ DataSet.prototype.forEach = function (callback, options) { | |
| 572 564 | 
             
             */
         | 
| 573 565 | 
             
            DataSet.prototype.map = function (callback, options) {
         | 
| 574 566 | 
             
              var filter = options && options.filter,
         | 
| 575 | 
            -
                   | 
| 567 | 
            +
                  type = options && options.type || this._options.type,
         | 
| 576 568 | 
             
                  mappedItems = [],
         | 
| 577 | 
            -
                  data = this. | 
| 569 | 
            +
                  data = this._data,
         | 
| 578 570 | 
             
                  item;
         | 
| 579 571 |  | 
| 580 572 | 
             
              // convert and filter items
         | 
| 581 573 | 
             
              for (var id in data) {
         | 
| 582 574 | 
             
                if (data.hasOwnProperty(id)) {
         | 
| 583 | 
            -
                  item = this._getItem(id,  | 
| 575 | 
            +
                  item = this._getItem(id, type);
         | 
| 584 576 | 
             
                  if (!filter || filter(item)) {
         | 
| 585 577 | 
             
                    mappedItems.push(callback(item, id));
         | 
| 586 578 | 
             
                  }
         | 
| @@ -652,7 +644,7 @@ DataSet.prototype.remove = function (id, senderId) { | |
| 652 644 | 
             
              var removedIds = [],
         | 
| 653 645 | 
             
                  i, len, removedId;
         | 
| 654 646 |  | 
| 655 | 
            -
              if (id | 
| 647 | 
            +
              if (Array.isArray(id)) {
         | 
| 656 648 | 
             
                for (i = 0, len = id.length; i < len; i++) {
         | 
| 657 649 | 
             
                  removedId = this._remove(id[i]);
         | 
| 658 650 | 
             
                  if (removedId != null) {
         | 
| @@ -682,17 +674,15 @@ DataSet.prototype.remove = function (id, senderId) { | |
| 682 674 | 
             
             */
         | 
| 683 675 | 
             
            DataSet.prototype._remove = function (id) {
         | 
| 684 676 | 
             
              if (util.isNumber(id) || util.isString(id)) {
         | 
| 685 | 
            -
                if (this. | 
| 686 | 
            -
                  delete this. | 
| 687 | 
            -
                  delete this.internalIds[id];
         | 
| 677 | 
            +
                if (this._data[id]) {
         | 
| 678 | 
            +
                  delete this._data[id];
         | 
| 688 679 | 
             
                  return id;
         | 
| 689 680 | 
             
                }
         | 
| 690 681 | 
             
              }
         | 
| 691 682 | 
             
              else if (id instanceof Object) {
         | 
| 692 | 
            -
                var itemId = id[this. | 
| 693 | 
            -
                if (itemId && this. | 
| 694 | 
            -
                  delete this. | 
| 695 | 
            -
                  delete this.internalIds[itemId];
         | 
| 683 | 
            +
                var itemId = id[this._fieldId];
         | 
| 684 | 
            +
                if (itemId && this._data[itemId]) {
         | 
| 685 | 
            +
                  delete this._data[itemId];
         | 
| 696 686 | 
             
                  return itemId;
         | 
| 697 687 | 
             
                }
         | 
| 698 688 | 
             
              }
         | 
| @@ -705,10 +695,9 @@ DataSet.prototype._remove = function (id) { | |
| 705 695 | 
             
             * @return {Array} removedIds    The ids of all removed items
         | 
| 706 696 | 
             
             */
         | 
| 707 697 | 
             
            DataSet.prototype.clear = function (senderId) {
         | 
| 708 | 
            -
              var ids = Object.keys(this. | 
| 698 | 
            +
              var ids = Object.keys(this._data);
         | 
| 709 699 |  | 
| 710 | 
            -
              this. | 
| 711 | 
            -
              this.internalIds = {};
         | 
| 700 | 
            +
              this._data = {};
         | 
| 712 701 |  | 
| 713 702 | 
             
              this._trigger('remove', {items: ids}, senderId);
         | 
| 714 703 |  | 
| @@ -721,7 +710,7 @@ DataSet.prototype.clear = function (senderId) { | |
| 721 710 | 
             
             * @return {Object | null} item  Item containing max value, or null if no items
         | 
| 722 711 | 
             
             */
         | 
| 723 712 | 
             
            DataSet.prototype.max = function (field) {
         | 
| 724 | 
            -
              var data = this. | 
| 713 | 
            +
              var data = this._data,
         | 
| 725 714 | 
             
                  max = null,
         | 
| 726 715 | 
             
                  maxField = null;
         | 
| 727 716 |  | 
| @@ -745,7 +734,7 @@ DataSet.prototype.max = function (field) { | |
| 745 734 | 
             
             * @return {Object | null} item  Item containing max value, or null if no items
         | 
| 746 735 | 
             
             */
         | 
| 747 736 | 
             
            DataSet.prototype.min = function (field) {
         | 
| 748 | 
            -
              var data = this. | 
| 737 | 
            +
              var data = this._data,
         | 
| 749 738 | 
             
                  min = null,
         | 
| 750 739 | 
             
                  minField = null;
         | 
| 751 740 |  | 
| @@ -771,17 +760,18 @@ DataSet.prototype.min = function (field) { | |
| 771 760 | 
             
             *                         The returned array is unordered.
         | 
| 772 761 | 
             
             */
         | 
| 773 762 | 
             
            DataSet.prototype.distinct = function (field) {
         | 
| 774 | 
            -
              var data = this. | 
| 775 | 
            -
             | 
| 776 | 
            -
             | 
| 777 | 
            -
             | 
| 763 | 
            +
              var data = this._data;
         | 
| 764 | 
            +
              var values = [];
         | 
| 765 | 
            +
              var fieldType = this._options.type && this._options.type[field] || null;
         | 
| 766 | 
            +
              var count = 0;
         | 
| 767 | 
            +
              var i;
         | 
| 778 768 |  | 
| 779 769 | 
             
              for (var prop in data) {
         | 
| 780 770 | 
             
                if (data.hasOwnProperty(prop)) {
         | 
| 781 771 | 
             
                  var item = data[prop];
         | 
| 782 | 
            -
                  var value =  | 
| 772 | 
            +
                  var value = item[field];
         | 
| 783 773 | 
             
                  var exists = false;
         | 
| 784 | 
            -
                  for ( | 
| 774 | 
            +
                  for (i = 0; i < count; i++) {
         | 
| 785 775 | 
             
                    if (values[i] == value) {
         | 
| 786 776 | 
             
                      exists = true;
         | 
| 787 777 | 
             
                      break;
         | 
| @@ -794,6 +784,12 @@ DataSet.prototype.distinct = function (field) { | |
| 794 784 | 
             
                }
         | 
| 795 785 | 
             
              }
         | 
| 796 786 |  | 
| 787 | 
            +
              if (fieldType) {
         | 
| 788 | 
            +
                for (i = 0; i < values.length; i++) {
         | 
| 789 | 
            +
                  values[i] = util.convert(values[i], fieldType);
         | 
| 790 | 
            +
                }
         | 
| 791 | 
            +
              }
         | 
| 792 | 
            +
             | 
| 797 793 | 
             
              return values;
         | 
| 798 794 | 
             
            };
         | 
| 799 795 |  | 
| @@ -804,11 +800,11 @@ DataSet.prototype.distinct = function (field) { | |
| 804 800 | 
             
             * @private
         | 
| 805 801 | 
             
             */
         | 
| 806 802 | 
             
            DataSet.prototype._addItem = function (item) {
         | 
| 807 | 
            -
              var id = item[this. | 
| 803 | 
            +
              var id = item[this._fieldId];
         | 
| 808 804 |  | 
| 809 805 | 
             
              if (id != undefined) {
         | 
| 810 806 | 
             
                // check whether this id is already taken
         | 
| 811 | 
            -
                if (this. | 
| 807 | 
            +
                if (this._data[id]) {
         | 
| 812 808 | 
             
                  // item already exists
         | 
| 813 809 | 
             
                  throw new Error('Cannot add item: item with id ' + id + ' already exists');
         | 
| 814 810 | 
             
                }
         | 
| @@ -816,18 +812,17 @@ DataSet.prototype._addItem = function (item) { | |
| 816 812 | 
             
              else {
         | 
| 817 813 | 
             
                // generate an id
         | 
| 818 814 | 
             
                id = util.randomUUID();
         | 
| 819 | 
            -
                item[this. | 
| 820 | 
            -
                this.internalIds[id] = item;
         | 
| 815 | 
            +
                item[this._fieldId] = id;
         | 
| 821 816 | 
             
              }
         | 
| 822 817 |  | 
| 823 818 | 
             
              var d = {};
         | 
| 824 819 | 
             
              for (var field in item) {
         | 
| 825 820 | 
             
                if (item.hasOwnProperty(field)) {
         | 
| 826 | 
            -
                  var fieldType = this. | 
| 821 | 
            +
                  var fieldType = this._type[field];  // type may be undefined
         | 
| 827 822 | 
             
                  d[field] = util.convert(item[field], fieldType);
         | 
| 828 823 | 
             
                }
         | 
| 829 824 | 
             
              }
         | 
| 830 | 
            -
              this. | 
| 825 | 
            +
              this._data[id] = d;
         | 
| 831 826 |  | 
| 832 827 | 
             
              return id;
         | 
| 833 828 | 
             
            };
         | 
| @@ -835,31 +830,26 @@ DataSet.prototype._addItem = function (item) { | |
| 835 830 | 
             
            /**
         | 
| 836 831 | 
             
             * Get an item. Fields can be converted to a specific type
         | 
| 837 832 | 
             
             * @param {String} id
         | 
| 838 | 
            -
             * @param {Object.<String, String>} [ | 
| 833 | 
            +
             * @param {Object.<String, String>} [types]  field types to convert
         | 
| 839 834 | 
             
             * @return {Object | null} item
         | 
| 840 835 | 
             
             * @private
         | 
| 841 836 | 
             
             */
         | 
| 842 | 
            -
            DataSet.prototype._getItem = function (id,  | 
| 837 | 
            +
            DataSet.prototype._getItem = function (id, types) {
         | 
| 843 838 | 
             
              var field, value;
         | 
| 844 839 |  | 
| 845 840 | 
             
              // get the item from the dataset
         | 
| 846 | 
            -
              var raw = this. | 
| 841 | 
            +
              var raw = this._data[id];
         | 
| 847 842 | 
             
              if (!raw) {
         | 
| 848 843 | 
             
                return null;
         | 
| 849 844 | 
             
              }
         | 
| 850 845 |  | 
| 851 846 | 
             
              // convert the items field types
         | 
| 852 | 
            -
              var converted = {} | 
| 853 | 
            -
             | 
| 854 | 
            -
                  internalIds = this.internalIds;
         | 
| 855 | 
            -
              if (convert) {
         | 
| 847 | 
            +
              var converted = {};
         | 
| 848 | 
            +
              if (types) {
         | 
| 856 849 | 
             
                for (field in raw) {
         | 
| 857 850 | 
             
                  if (raw.hasOwnProperty(field)) {
         | 
| 858 851 | 
             
                    value = raw[field];
         | 
| 859 | 
            -
                     | 
| 860 | 
            -
                    if ((field != fieldId) || (!(value in internalIds) || this.showInternalIds)) {
         | 
| 861 | 
            -
                      converted[field] = util.convert(value, convert[field]);
         | 
| 862 | 
            -
                    }
         | 
| 852 | 
            +
                    converted[field] = util.convert(value, types[field]);
         | 
| 863 853 | 
             
                  }
         | 
| 864 854 | 
             
                }
         | 
| 865 855 | 
             
              }
         | 
| @@ -868,10 +858,7 @@ DataSet.prototype._getItem = function (id, convert) { | |
| 868 858 | 
             
                for (field in raw) {
         | 
| 869 859 | 
             
                  if (raw.hasOwnProperty(field)) {
         | 
| 870 860 | 
             
                    value = raw[field];
         | 
| 871 | 
            -
                     | 
| 872 | 
            -
                    if ((field != fieldId) || (!(value in internalIds) || this.showInternalIds)) {
         | 
| 873 | 
            -
                      converted[field] = value;
         | 
| 874 | 
            -
                    }
         | 
| 861 | 
            +
                    converted[field] = value;
         | 
| 875 862 | 
             
                  }
         | 
| 876 863 | 
             
                }
         | 
| 877 864 | 
             
              }
         | 
| @@ -887,11 +874,11 @@ DataSet.prototype._getItem = function (id, convert) { | |
| 887 874 | 
             
             * @private
         | 
| 888 875 | 
             
             */
         | 
| 889 876 | 
             
            DataSet.prototype._updateItem = function (item) {
         | 
| 890 | 
            -
              var id = item[this. | 
| 877 | 
            +
              var id = item[this._fieldId];
         | 
| 891 878 | 
             
              if (id == undefined) {
         | 
| 892 879 | 
             
                throw new Error('Cannot update item: item has no id (item: ' + JSON.stringify(item) + ')');
         | 
| 893 880 | 
             
              }
         | 
| 894 | 
            -
              var d = this. | 
| 881 | 
            +
              var d = this._data[id];
         | 
| 895 882 | 
             
              if (!d) {
         | 
| 896 883 | 
             
                // item doesn't exist
         | 
| 897 884 | 
             
                throw new Error('Cannot update item: no item with id ' + id + ' found');
         | 
| @@ -900,7 +887,7 @@ DataSet.prototype._updateItem = function (item) { | |
| 900 887 | 
             
              // merge with current item
         | 
| 901 888 | 
             
              for (var field in item) {
         | 
| 902 889 | 
             
                if (item.hasOwnProperty(field)) {
         | 
| 903 | 
            -
                  var fieldType = this. | 
| 890 | 
            +
                  var fieldType = this._type[field];  // type may be undefined
         | 
| 904 891 | 
             
                  d[field] = util.convert(item[field], fieldType);
         | 
| 905 892 | 
             
                }
         | 
| 906 893 | 
             
              }
         | 
| @@ -908,17 +895,6 @@ DataSet.prototype._updateItem = function (item) { | |
| 908 895 | 
             
              return id;
         | 
| 909 896 | 
             
            };
         | 
| 910 897 |  | 
| 911 | 
            -
            /**
         | 
| 912 | 
            -
             * check if an id is an internal or external id
         | 
| 913 | 
            -
             * @param id
         | 
| 914 | 
            -
             * @returns {boolean}
         | 
| 915 | 
            -
             * @private
         | 
| 916 | 
            -
             */
         | 
| 917 | 
            -
            DataSet.prototype.isInternalId = function(id) {
         | 
| 918 | 
            -
              return (id in this.internalIds);
         | 
| 919 | 
            -
            };
         | 
| 920 | 
            -
             | 
| 921 | 
            -
             | 
| 922 898 | 
             
            /**
         | 
| 923 899 | 
             
             * Get an array with the column names of a Google DataTable
         | 
| 924 900 | 
             
             * @param {DataTable} dataTable
         |