From a29aae98b06a78f69c8619565d3fc94655c3872a Mon Sep 17 00:00:00 2001 From: yotamberk Date: Sat, 12 Nov 2016 21:53:42 +0200 Subject: [PATCH] Fixes #2285 onUpdate event (#2304) --- lib/timeline/component/ItemSet.js | 28 +++++++++---- lib/timeline/component/item/Item.js | 65 ++++++++++++++++------------- 2 files changed, 56 insertions(+), 37 deletions(-) diff --git a/lib/timeline/component/ItemSet.js b/lib/timeline/component/ItemSet.js index 89348f93..852e0c0d 100644 --- a/lib/timeline/component/ItemSet.js +++ b/lib/timeline/component/ItemSet.js @@ -1789,22 +1789,19 @@ ItemSet.prototype._onMouseOut = function (event) { }); }; + /** - * Handle creation and updates of an item on double tap + * Handle updates of an item on double tap * @param event * @private */ -ItemSet.prototype._onAddItem = function (event) { +ItemSet.prototype._onUpdateItem = function (item) { if (!this.options.selectable) return; if (!this.options.editable.add) return; var me = this; - var snap = this.options.snap || null; - var item = this.itemFromTarget(event); - + if (item) { - // update item - // execute async handler to update the item (or cancel it) var itemData = me.itemsData.get(item.id); // get a clone of the data from the dataset this.options.onUpdate(itemData, function (itemData) { @@ -1813,7 +1810,22 @@ ItemSet.prototype._onAddItem = function (event) { } }); } - else { +} + +/** + * Handle creation of an item on double tap + * @param event + * @private + */ +ItemSet.prototype._onAddItem = function (event) { + if (!this.options.selectable) return; + if (!this.options.editable.add) return; + + var me = this; + var snap = this.options.snap || null; + var item = this.itemFromTarget(event); + + if (!item) { // add item if (this.options.rtl) { var xAbs = util.getAbsoluteRight(this.dom.frame); diff --git a/lib/timeline/component/item/Item.js b/lib/timeline/component/item/Item.js index a4b49da5..e7bafc04 100644 --- a/lib/timeline/component/item/Item.js +++ b/lib/timeline/component/item/Item.js @@ -140,6 +140,42 @@ Item.prototype.repositionY = function() { // should be implemented by the item }; +/** + * Repaint a drag area on the center of the item when the item is selected + * @protected + */ +Item.prototype._repaintDragCenter = function () { + if (this.selected && this.options.editable.updateTime && !this.dom.dragCenter) { + var me = this; + + // create and show drag area + var dragCenter = document.createElement('div'); + dragCenter.className = 'vis-drag-center'; + dragCenter.dragCenterItem = this; + + new Hammer(dragCenter).on('doubletap', function (event) { + event.stopPropagation(); + me.parent.itemSet._onUpdateItem(me); + }); + + if (this.dom.box) { + this.dom.box.appendChild(dragCenter); + } + else if (this.dom.point) { + this.dom.point.appendChild(dragCenter); + } + + this.dom.dragCenter = dragCenter; + } + else if (!this.selected && this.dom.dragCenter) { + // delete drag area + if (this.dom.dragCenter.parentNode) { + this.dom.dragCenter.parentNode.removeChild(this.dom.dragCenter); + } + this.dom.dragCenter = null; + } +}; + /** * Repaint a delete button on the top right of the item when the item is selected * @param {HTMLElement} anchor @@ -401,33 +437,4 @@ Item.prototype.getWidthRight = function () { return 0; }; -/** - * Repaint a drag area on the center of the item when the item is selected - * @protected - */ -Item.prototype._repaintDragCenter = function () { - if (this.selected && this.options.editable.updateTime && !this.dom.dragCenter) { - // create and show drag area - var dragCenter = document.createElement('div'); - dragCenter.className = 'vis-drag-center'; - dragCenter.dragCenterItem = this; - - if (this.dom.box) { - this.dom.box.appendChild(dragCenter); - } - else if (this.dom.point) { - this.dom.point.appendChild(dragCenter); - } - - this.dom.dragCenter = dragCenter; - } - else if (!this.selected && this.dom.dragCenter) { - // delete drag area - if (this.dom.dragCenter.parentNode) { - this.dom.dragCenter.parentNode.removeChild(this.dom.dragCenter); - } - this.dom.dragCenter = null; - } -}; - module.exports = Item;