|
|
@ -1875,6 +1875,13 @@ ItemSet.prototype._onMouseOver = function (event) { |
|
|
|
var item = this.itemFromTarget(event); |
|
|
|
if (!item) return; |
|
|
|
|
|
|
|
// Item we just left
|
|
|
|
var related = this.itemFromRelatedTarget(event); |
|
|
|
if (item === related) { |
|
|
|
// We haven't changed item, just element in the item
|
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
if (item.getTitle()) { |
|
|
|
if (item.popup == null) { |
|
|
|
item.setPopup(new Popup(this.body.dom.root)); |
|
|
@ -1897,6 +1904,13 @@ ItemSet.prototype._onMouseOut = function (event) { |
|
|
|
var item = this.itemFromTarget(event); |
|
|
|
if (!item) return; |
|
|
|
|
|
|
|
// Item we are going to
|
|
|
|
var related = this.itemFromRelatedTarget(event); |
|
|
|
if (item === related) { |
|
|
|
// We aren't changing item, just element in the item
|
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
if (item.popup != null) { |
|
|
|
item.popup.hide(); |
|
|
|
} |
|
|
@ -2118,6 +2132,24 @@ ItemSet._getItemRange = function(itemsData) { |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
/** |
|
|
|
* Find an item from an element: |
|
|
|
* searches for the attribute 'timeline-item' in the element's tree |
|
|
|
* @param {HTMLElement} element |
|
|
|
* @return {Item | null} item |
|
|
|
*/ |
|
|
|
ItemSet.prototype.itemFromElement = function(element) { |
|
|
|
var cur = element; |
|
|
|
while (cur) { |
|
|
|
if (cur.hasOwnProperty('timeline-item')) { |
|
|
|
return cur['timeline-item']; |
|
|
|
} |
|
|
|
cur = cur.parentNode; |
|
|
|
} |
|
|
|
|
|
|
|
return null; |
|
|
|
}; |
|
|
|
|
|
|
|
/** |
|
|
|
* Find an item from an event target: |
|
|
|
* searches for the attribute 'timeline-item' in the event target's element tree |
|
|
@ -2125,15 +2157,17 @@ ItemSet._getItemRange = function(itemsData) { |
|
|
|
* @return {Item | null} item |
|
|
|
*/ |
|
|
|
ItemSet.prototype.itemFromTarget = function(event) { |
|
|
|
var target = event.target; |
|
|
|
while (target) { |
|
|
|
if (target.hasOwnProperty('timeline-item')) { |
|
|
|
return target['timeline-item']; |
|
|
|
} |
|
|
|
target = target.parentNode; |
|
|
|
} |
|
|
|
return this.itemFromElement(event.target); |
|
|
|
}; |
|
|
|
|
|
|
|
return null; |
|
|
|
/** |
|
|
|
* Find an item from an event's related target: |
|
|
|
* searches for the attribute 'timeline-item' in the related target's element tree |
|
|
|
* @param {Event} event |
|
|
|
* @return {Item | null} item |
|
|
|
*/ |
|
|
|
ItemSet.prototype.itemFromRelatedTarget = function(event) { |
|
|
|
return this.itemFromElement(event.relatedTarget); |
|
|
|
}; |
|
|
|
|
|
|
|
/** |
|
|
|