blob: 1a127747e567f47d51e7831656791021e759d2c5 [file] [log] [blame]
/**
* Menu to choose from for tree views.
*/
define(['menu', 'match/treeitem'], function (menuClass, itemClass) {
"use strict";
return {
/**
* Create new menu object.
* Pass the match information object
* and the item parameters.
*
* @param info The match info object
* @param params The match menu items
* as an array of arrays.
*/
create : function (list) {
var obj = Object.create(menuClass)
.upgradeTo(this)
._init(list, {itemClass : itemClass});
obj.limit(6);
var e = obj.element();
// This is only domspecific
e.addEventListener('blur', function (e) {
this.menu.hide();
});
e.setAttribute('id', 'treeMenu');
// Add menu to body
document.getElementsByTagName('body')[0].appendChild(e);
return obj;
},
/**
* The match information object of the menu.
*/
info :function (infoVar) {
if (infoVar !== undefined)
this._info = infoVar;
return this._info;
},
// Attach menu to
attachTo : function (e) {
// this._attached = e;
this._repos(e);
this.slider().reInit();
/*
* This is a suboptimal scrolling solution, see
* see https://developer.mozilla.org/docs/Mozilla/Performance/ScrollLinkedEffects
*/
if (this._onscroll !== undefined) {
window.removeEventListener('scroll', this._onscroll);
};
this._onscroll = function () {
this._repos(e);
}.bind(this);
window.addEventListener('scroll', this._onscroll);
},
// Overwrite onHide method
onHide : function () {
// Remove listener
if (this._onscroll !== undefined) {
window.removeEventListener('scroll', this._onscroll);
};
},
_repos : function (e) {
var bounding = e.getBoundingClientRect();
this._element.style.left = bounding.left + "px";
this._element.style.top = (
bounding.top +
bounding.height -
this._element.clientHeight
) + "px";
}
};
});