/* Product Name: dhtmlxSuite Version: 5.2.0 Edition: Professional License: content of this file is covered by DHTMLX Commercial or Enterprise license. Usage without proper license is prohibited. To obtain it contact sales@dhtmlx.com Copyright UAB Dinamenta http://www.dhtmlx.com */ /* Purpose: keyboard navigation extension */ /** * @desc: enable keyboard navigation in tree * @param: mode - true/false * @edition: Professional * @type: public * @topic: 4 */ dhtmlXTreeObject.prototype.enableKeyboardNavigation=function(mode){ this._enblkbrd=dhx4.s2b(mode); if (this._enblkbrd){ if (_isFF){ var z=window.getComputedStyle(this.parentObject,null)["position"]; if ((z!="absolute")&&(z!="relative")) this.parentObject.style.position="relative"; } this._navKeys=[["up",38],["down",40],["open",39],["close",37],["call",13],["edit",113]]; var self=this; var z=document.createElement("INPUT"); z.className="a_dhx_hidden_input"; z.autocomplete="off"; if (window._KHTMLrv) z.style.color="white"; this.parentObject.appendChild(z); this.parentObject[_isOpera?"onkeypress":"onkeydown"]=function(e){ if (self.callEvent("onKeyPress",[(e||window.event).keyCode,(e||window.event)])) return self._onKeyDown(e||window.event) } this.parentObject.onclick=function(e){ if (_isFF || _isIE) z.select(); if (window._KHTMLrv || _isOpera) z.focus(); } } else this.parentObject.onkeydown=null; } dhtmlXTreeObject.prototype._onKeyDown=function(e){ if (window.globalActiveDHTMLGridObject && globalActiveDHTMLGridObject.isActive) return true; var self=this; for (var i=0; i0)) return item.childNodes[0]; if ((item.tr)&&(item.tr.nextSibling)&&(item.tr.nextSibling.nodem)) return item.tr.nextSibling.nodem; if (item.parentObject) return this._getNextVisibleNode(item.parentObject,1); return item; }; dhtmlXTreeObject.prototype._getPrevVisibleNode=function(item){ if ((item.tr)&&(item.tr.previousSibling)&&(item.tr.previousSibling.nodem)) return this._lastVisibleChild(item.tr.previousSibling.nodem); if (item.parentObject) return item.parentObject; else return item; }; dhtmlXTreeObject.prototype._lastVisibleChild=function(item){ if (this._getOpenState(item)>0) return this._lastVisibleChild(item.childNodes[item.childsCount-1]); else return item; }; dhtmlXTreeObject.prototype._searchItemByKey=function(e){ if (e.keyCode==8) { this._textSearchString=''; return true; } var key = String.fromCharCode(e.keyCode).toUpperCase(); if (key.match(/[A-Z,a-z,0-9\ ]/)) { this._textSearchString += key; this._textSearchInProgress = true; if (!(this.getSelectedItemText()||"").match(RegExp('^'+this._textSearchString,"i"))){ this.findItem(this._textSearchString, 0); } this._textSearchInProgress = false; if (e.preventDefault) e.preventDefault(); (e||event).cancelBubble=true; return false; } return true; } /** * @desc: configure keys used for keyboard navigation * @param: keys - configuration array, please check pro_key_nav.html in samples for more details * @edition: Professional * @type: public * @topic: 4 */ dhtmlXTreeObject.prototype.assignKeys=function(keys){ this._navKeys=keys; } /** * @desc: enable search items by pressing keys (any item in tree should be focused/selected to make search work) * @param: mode - true/false * @edition: Professional * @type: public * @topic: 4 */ dhtmlXTreeObject.prototype.enableKeySearch=function(mode){ this._textSearch = dhx4.s2b(mode); if (!this._textSearch) return; this._textSearchString = ''; var self = this; this._markItem2 = this._markItem; this._markItem = function(node) { if (!self._textSearchInProgress) self._textSearchString = ''; self._markItem2(node); } } //(c)dhtmlx ltd. www.dhtmlx.com