Skip to content

Commit

Permalink
Fixed almende#1215: inconsistent types of properties start and `end…
Browse files Browse the repository at this point in the history
…` in callback functions `onMove`, `onMoving`, `onAdd`
  • Loading branch information
josdejong committed Sep 4, 2015
1 parent 5532a88 commit bbbaeb4
Show file tree
Hide file tree
Showing 4 changed files with 138 additions and 62 deletions.
5 changes: 5 additions & 0 deletions HISTORY.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,11 @@ http://visjs.org

- Added German (de) locale. Thanks @Tooa.

### Timeline

- Fixed #1215: inconsistent types of properties `start` and `end` in callback
functions `onMove`, `onMoving`, `onAdd`.


## 2015-08-28, version 4.8.0

Expand Down
93 changes: 68 additions & 25 deletions dist/vis.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
* A dynamic, browser-based visualization library.
*
* @version 4.8.1-SNAPSHOT
* @date 2015-08-28
* @date 2015-09-04
*
* @license
* Copyright (C) 2011-2015 Almende B.V, http://almende.com
Expand Down Expand Up @@ -16734,7 +16734,7 @@ return /******/ (function(modules) { // webpackBootstrap
item: dragLeftItem,
initialX: event.center.x,
dragLeft: true,
data: util.extend({}, item.data) // clone the items data
data: this._cloneItemData(item.data)
};

this.touchParams.itemProps = [props];
Expand All @@ -16743,7 +16743,7 @@ return /******/ (function(modules) { // webpackBootstrap
item: dragRightItem,
initialX: event.center.x,
dragRight: true,
data: util.extend({}, item.data) // clone the items data
data: this._cloneItemData(item.data)
};

this.touchParams.itemProps = [props];
Expand All @@ -16752,18 +16752,16 @@ return /******/ (function(modules) { // webpackBootstrap

var baseGroupIndex = this._getGroupIndex(item.data.group);

this.touchParams.itemProps = this.getSelection().map(function (id) {
this.touchParams.itemProps = this.getSelection().map((function (id) {
var item = me.items[id];
var groupIndex = me._getGroupIndex(item.data.group);
var props = {
return {
item: item,
initialX: event.center.x,
groupOffset: baseGroupIndex - groupIndex,
data: util.extend({}, item.data) // clone the items data
data: this._cloneItemData(item.data)
};

return props;
});
}).bind(this));
}

event.stopPropagation();
Expand Down Expand Up @@ -16805,14 +16803,14 @@ return /******/ (function(modules) { // webpackBootstrap

var newItem = new RangeItem(itemData, this.conversion, this.options);
newItem.id = id; // TODO: not so nice setting id afterwards
newItem.data = itemData;
newItem.data = this._cloneItemData(itemData);
this._addItem(newItem);

var props = {
item: newItem,
dragRight: true,
initialX: event.center.x,
data: util.extend({}, itemData)
data: newItem.data
};
this.touchParams.itemProps = [props];

Expand Down Expand Up @@ -16851,14 +16849,12 @@ return /******/ (function(modules) { // webpackBootstrap
}

// move
this.touchParams.itemProps.forEach(function (props) {
var newProps = {};
this.touchParams.itemProps.forEach((function (props) {
var current = me.body.util.toTime(event.center.x - xOffset);
var initial = me.body.util.toTime(props.initialX - xOffset);
var offset = current - initial;

var itemData = util.extend({}, props.item.data); // clone the data
var offset = current - initial; // ms

var itemData = this._cloneItemData(props.item.data); // clone the data
if (props.item.editable === false) {
return;
}
Expand All @@ -16871,13 +16867,15 @@ return /******/ (function(modules) { // webpackBootstrap
if (itemData.start != undefined) {
var initialStart = util.convert(props.data.start, 'Date');
var start = new Date(initialStart.valueOf() + offset);
// TODO: pass a Moment instead of a Date to snap(). (Breaking change)
itemData.start = snap ? snap(start, scale, step) : start;
}
} else if (props.dragRight) {
// drag right side of a range item
if (itemData.end != undefined) {
var initialEnd = util.convert(props.data.end, 'Date');
var end = new Date(initialEnd.valueOf() + offset);
// TODO: pass a Moment instead of a Date to snap(). (Breaking change)
itemData.end = snap ? snap(end, scale, step) : end;
}
} else {
Expand All @@ -16890,9 +16888,11 @@ return /******/ (function(modules) { // webpackBootstrap
var initialEnd = util.convert(props.data.end, 'Date');
var duration = initialEnd.valueOf() - initialStart.valueOf();

// TODO: pass a Moment instead of a Date to snap(). (Breaking change)
itemData.start = snap ? snap(start, scale, step) : start;
itemData.end = new Date(itemData.start.valueOf() + duration);
} else {
// TODO: pass a Moment instead of a Date to snap(). (Breaking change)
itemData.start = snap ? snap(start, scale, step) : start;
}
}
Expand All @@ -16914,12 +16914,13 @@ return /******/ (function(modules) { // webpackBootstrap
}

// confirm moving the item
itemData = this._cloneItemData(itemData); // convert start and end to the correct type
me.options.onMoving(itemData, function (itemData) {
if (itemData) {
props.item.setData(itemData);
}
});
});
}).bind(this));

this.stackDirty = true; // force re-stacking of all items next redraw
this.body.emitter.emit('change');
Expand Down Expand Up @@ -16959,7 +16960,7 @@ return /******/ (function(modules) { // webpackBootstrap
var itemProps = this.touchParams.itemProps;
this.touchParams.itemProps = null;

itemProps.forEach(function (props) {
itemProps.forEach((function (props) {
var id = props.item.id;
var exists = me.itemsData.get(id, me.itemOptions) != null;

Expand All @@ -16977,7 +16978,7 @@ return /******/ (function(modules) { // webpackBootstrap
});
} else {
// update existing item
var itemData = util.extend({}, props.item.data); // clone the data
var itemData = this._cloneItemData(props.item.data); // convert start and end to the correct type
me.options.onMove(itemData, function (itemData) {
if (itemData) {
// apply changes
Expand All @@ -16992,7 +16993,7 @@ return /******/ (function(modules) { // webpackBootstrap
}
});
}
});
}).bind(this));
}
};

Expand Down Expand Up @@ -17233,26 +17234,27 @@ return /******/ (function(modules) { // webpackBootstrap
var scale = this.body.util.getScale();
var step = this.body.util.getStep();

var newItem = {
var newItemData = {
start: snap ? snap(start, scale, step) : start,
content: 'new item'
};

// when default type is a range, add a default end date to the new item
if (this.options.type === 'range') {
var end = this.body.util.toTime(x + this.props.width / 5);
newItem.end = snap ? snap(end, scale, step) : end;
newItemData.end = snap ? snap(end, scale, step) : end;
}

newItem[this.itemsData._fieldId] = util.randomUUID();
newItemData[this.itemsData._fieldId] = util.randomUUID();

var group = this.groupFromTarget(event);
if (group) {
newItem.group = group.groupId;
newItemData.group = group.groupId;
}

// execute async handler to customize (or cancel) adding an item
this.options.onAdd(newItem, function (item) {
newItemData = this._cloneItemData(newItemData); // convert start and end to the correct type
this.options.onAdd(newItemData, function (item) {
if (item) {
me.itemsData.getDataSet().add(item);
// TODO: need to trigger a redraw?
Expand Down Expand Up @@ -17419,6 +17421,29 @@ return /******/ (function(modules) { // webpackBootstrap
return null;
};

/**
* Clone the data of an item, and "normalize" it: convert the start and end date
* to the type (Date, Moment, ...) configured in the DataSet. If not configured,
* start and end are converted to Date.
* @param {Object} itemData, typically `item.data`
* @return {Object} The cloned object
* @private
*/
ItemSet.prototype._cloneItemData = function (itemData) {
var clone = util.extend({}, itemData);

// convert start and end date to the type (Date, Moment, ...) configured in the DataSet
var type = this.itemsData.getDataSet()._options.type;
if (clone.start != undefined) {
clone.start = util.convert(clone.start, type && type.start || 'Date');
}
if (clone.end != undefined) {
clone.end = util.convert(clone.end, type && type.end || 'Date');
}

return clone;
};

module.exports = ItemSet;

/***/ },
Expand Down Expand Up @@ -43054,6 +43079,24 @@ return /******/ (function(modules) { // webpackBootstrap
exports['en_EN'] = exports['en'];
exports['en_US'] = exports['en'];

// German
exports['de'] = {
edit: 'Editieren',
del: 'Lösche Auswahl',
back: 'Zurück',
addNode: 'Knoten hinzufügen',
addEdge: 'Kante hinzufügen',
editNode: 'Knoten editieren',
editEdge: 'Kante editieren',
addDescription: 'Klicke auf eine freie Stelle, um einen neuen Knoten zu plazieren.',
edgeDescription: 'Klicke auf einen Knoten und ziehe die Kante zu einem anderen Knoten, um diese zu verbinden.',
editEdgeDescription: 'Klicke auf die Verbindungspunkte und ziehe diese auf einen Knoten, um sie zu verbinden.',
createEdgeError: 'Es ist nicht möglich, Kanten mit Clustern zu verbinden.',
deleteClusterError: 'Cluster können nicht gelöscht werden.',
editClusterError: 'Cluster können nicht editiert werden.'
};
exports['de_DE'] = exports['de'];

// Spanish
exports['es'] = {
edit: 'Editar',
Expand Down
Loading

0 comments on commit bbbaeb4

Please sign in to comment.