Files
SIG/Scripts/AjaxControlToolkit/Release/ListSearch.js
rrene 927295c7ba Revert "-- corr"
This reverts commit 5315c47fcd.
2024-11-05 10:55:34 -07:00

1 line
11 KiB
JavaScript

Type.registerNamespace("Sys.Extended.UI");Sys.Extended.UI.ListSearchBehavior=function(n){Sys.Extended.UI.ListSearchBehavior.initializeBase(this,[n]);this._promptCssClass=null;this._promptText=Sys.Extended.UI.Resources&&Sys.Extended.UI.Resources.ListSearch_DefaultPrompt||"Type to search";this._offsetX=0;this._offsetY=0;this._promptPosition=Sys.Extended.UI.ListSearchPromptPosition.Top;this._raiseImmediateOnChange=!1;this._queryPattern=Sys.Extended.UI.ListSearchQueryPattern.StartsWith;this._isSorted=!1;this._popupBehavior=null;this._onShowJson=null;this._onHideJson=null;this._originalIndex=0;this._newIndex=-1;this._showingPromptText=!1;this._searchText="";this._ellipsis=String.fromCharCode(8230);this._binarySearch=!1;this._applicationLoadDelegate=null;this._focusIndex=0;this._queryTimeout=0;this._timer=null;this._matchFound=!1;this._focusHandler=null;this._blurHandler=null;this._keyDownHandler=null;this._keyUpHandler=null;this._keyPressHandler=null};Sys.Extended.UI.ListSearchBehavior.prototype={initialize:function(){Sys.Extended.UI.ListSearchBehavior.callBaseMethod(this,"initialize");var n=this.get_element();n&&n.tagName==="SELECT"&&(this._focusHandler=Function.createDelegate(this,this._onFocus),this._blurHandler=Function.createDelegate(this,this._onBlur),this._keyDownHandler=Function.createDelegate(this,this._onKeyDown),this._keyUpHandler=Function.createDelegate(this,this._onKeyUp),this._keyPressHandler=Function.createDelegate(this,this._onKeyPress),$addHandler(n,"focus",this._focusHandler),$addHandler(n,"blur",this._blurHandler),$addHandler(n,"keydown",this._keyDownHandler),$addHandler(n,"keyup",this._keyUpHandler),$addHandler(n,"keypress",this._keyPressHandler),this._applicationLoadDelegate=Function.createDelegate(this,this._onApplicationLoad),Sys.Application.add_load(this._applicationLoadDelegate))},dispose:function(){var n=this.get_element();$removeHandler(n,"keypress",this._keyPressHandler);$removeHandler(n,"keyup",this._keyUpHandler);$removeHandler(n,"keydown",this._keyDownHandler);$removeHandler(n,"blur",this._blurHandler);$removeHandler(n,"focus",this._focusHandler);this._onShowJson=null;this._onHideJson=null;this._disposePopupBehavior();this._applicationLoadDelegate&&(Sys.Application.remove_load(this._applicationLoadDelegate),this._applicationLoadDelegate=null);this._timer&&this._stopTimer();Sys.Extended.UI.ListSearchBehavior.callBaseMethod(this,"dispose")},_onApplicationLoad:function(){var t=!1,n=Sys.Extended.UI.ListSearchBehavior.callBaseMethod(this,"get_ClientState");n!=null&&n!=""&&(t=n==="Focused",Sys.Extended.UI.ListSearchBehavior.callBaseMethod(this,"set_ClientState",null));t&&this._handleFocus()},_checkIfSorted:function(n){var t,u,i,r;if(this._isSorted)return!0;for(t=null,u=n.length,i=0;i<u;i++){if(r=n[i].text.toLowerCase(),t&&this._compareStrings(r,t)<0)return!1;t=r}return!0},_onFocus:function(){this._handleFocus()},_handleFocus:function(){var n=this.get_element();this._focusIndex=n.selectedIndex;this._promptDiv||(this._promptDiv=document.createElement("div"),this._promptDiv.id=n.id+"_promptDiv",this._promptDiv.innerHTML=this._promptText&&this._promptText.length>0?this._promptText:Sys.Extended.UI.Resources.ListSearch_DefaultPrompt,this._showingPromptText=!0,this._promptCssClass&&(this._promptDiv.className=this._promptCssClass),n.parentNode.insertBefore(this._promptDiv,n.nextSibling),this._promptDiv.style.overflow="hidden",this._promptDiv.style.height=this._promptDiv.offsetHeight+"px",this._promptDiv.style.width=n.offsetWidth+"px");this._popupBehavior||(this._popupBehavior=$create(Sys.Extended.UI.PopupBehavior,{parentElement:n},{},{},this._promptDiv));this._promptPosition&&this._promptPosition==Sys.Extended.UI.ListSearchPromptPosition.Bottom?this._popupBehavior.set_positioningMode(Sys.Extended.UI.PositioningMode.BottomLeft):this._popupBehavior.set_positioningMode(Sys.Extended.UI.PositioningMode.TopLeft);this._onShowJson&&this._popupBehavior.set_onShow(this._onShowJson);this._onHideJson&&this._popupBehavior.set_onHide(this._onHideJson);this._popupBehavior.show();this._updatePromptDiv(this._promptText)},_onBlur:function(){this._disposePopupBehavior();var n=this._promptDiv,t=this.get_element();n&&(this._promptDiv=null,n.parentNode.removeChild(n));this._raiseImmediateOnChange||this._focusIndex==t.selectedIndex||this._raiseOnChange(t)},_disposePopupBehavior:function(){this._popupBehavior&&(this._popupBehavior.dispose(),this._popupBehavior=null)},_onKeyDown:function(n){var t=this.get_element(),i=this._promptDiv;t&&i&&(this._originalIndex=t.selectedIndex,this._showingPromptText&&(i.innerHTML="",this._searchText="",this._showingPromptText=!1,this._binarySearch=this._checkIfSorted(t.options)),n.keyCode==Sys.UI.Key.backspace?(n.preventDefault(),n.stopPropagation(),this._removeCharacterFromPromptDiv(),this._searchForTypedText(t),this._searchText&&this._searchText.length!=0||this._stopTimer()):n.keyCode==Sys.UI.Key.esc?(n.preventDefault(),n.stopPropagation(),i.innerHTML="",this._searchText="",this._searchForTypedText(t),this._stopTimer()):n.keyCode!=Sys.UI.Key.enter||this._raiseImmediateOnChange||this._focusIndex==t.selectedIndex||(this._focusIndex=t.selectedIndex,this._raiseOnChange(t)))},_onKeyUp:function(){var n=this.get_element(),t=this._promptDiv;if(n&&t){if(this._newIndex==-1||!n||!t||t.innerHTML==""){this._newIndex=-1;return}n.selectedIndex=this._newIndex;this._newIndex=-1}},_onKeyPress:function(n){var t=this.get_element(),i=this._promptDiv;if(t&&i){if(!this._isNormalChar(n)){n.charCode==Sys.UI.Key.backspace&&(n.preventDefault(),n.stopPropagation(),this._searchText&&this._searchText.length==0&&this._stopTimer());return}n.preventDefault();n.stopPropagation();this._addCharacterToPromptDiv(n.charCode);this._searchForTypedText(t);this._stopTimer();this._searchText&&this._searchText.length!=0&&this._startTimer()}},_isNormalChar:function(n){return Sys.Browser.agent==Sys.Browser.Firefox&&n.rawEvent.keyCode?!1:Sys.Browser.agent==Sys.Browser.Opera&&n.rawEvent.which==0?!1:n.charCode&&(n.charCode<Sys.UI.Key.space||n.charCode>6e3)?!1:!0},_updatePromptDiv:function(n){var t=this._promptDiv,i,r,u;if(t&&this.get_element()&&(i=typeof n=="undefined"?this._searchText:n,r=t.firstChild,r?r.nodeValue=i:(r=document.createTextNode(i),t.appendChild(r)),!(t.scrollWidth<=t.offsetWidth)||!(t.scrollHeight<=t.offsetHeight)))for(u=i.length-1;u>0&&(t.scrollWidth>t.offsetWidth||t.scrollHeight>t.offsetHeight);u--)r.nodeValue=this._ellipsis+i.substring(i.length-u,i.length)},_addCharacterToPromptDiv:function(n){this._searchText+=String.fromCharCode(n);this._updatePromptDiv()},_removeCharacterFromPromptDiv:function(){this._searchText&&this._searchText!=""&&(this._searchText=this._searchText.substring(0,this._searchText.length-1),this._updatePromptDiv())},_searchForTypedText:function(n){var u=this._searchText,t=n.options,r=u?u.toLowerCase():"",i;this._matchFound=!1;r.length==0?t.length>0&&(n.selectedIndex=0,this._newIndex=0):(i=-1,i=this._binarySearch&&this._queryPattern==Sys.Extended.UI.ListSearchQueryPattern.StartsWith?this._doBinarySearch(t,r,0,t.length-1):this._doLinearSearch(t,r,0,t.length-1),i==-1?this._newIndex=this._originalIndex:(n.selectedIndex=i,this._newIndex=i,this._matchFound=!0));this._raiseImmediateOnChange&&this._originalIndex!=n.selectedIndex&&this._raiseOnChange(n)},_raiseOnChange:function(n){if(document.createEvent){var t=document.createEvent("HTMLEvents");t.initEvent("change",!0,!1);n.dispatchEvent(t)}else document.createEventObject&&n.fireEvent("onchange")},_compareStrings:function(n,t){return n==t?0:n<t?-1:1},_doBinarySearch:function(n,t,i,r){while(i<=r){var u=Math.floor((i+r)/2),e=n[u].text.toLowerCase().substring(0,t.length),f=this._compareStrings(t,e);if(f>0)i=u+1;else if(f<0)r=u-1;else{while(u>0&&n[u-1].text.toLowerCase().startsWith(t))u--;return u}}return-1},_doLinearSearch:function(n,t,i,r){var u;if(this._queryPattern==Sys.Extended.UI.ListSearchQueryPattern.Contains){for(u=i;u<=r;u++)if(n[u].text.toLowerCase().indexOf(t)>=0)return u}else if(this._queryPattern==Sys.Extended.UI.ListSearchQueryPattern.StartsWith)for(u=i;u<=r;u++)if(n[u].text.toLowerCase().startsWith(t))return u;return-1},_onTimerTick:function(){this._stopTimer();this._matchFound||(this._searchText="",this._updatePromptDiv())},_startTimer:function(){this._queryTimeout>0&&(this._timer=window.setTimeout(Function.createDelegate(this,this._onTimerTick),this._queryTimeout))},_stopTimer:function(){this._timer!=null&&window.clearTimeout(this._timer);this._timer=null},get_onShow:function(){return this._popupBehavior?this._popupBehavior.get_onShow():this._onShowJson},set_onShow:function(n){this._popupBehavior?this._popupBehavior.set_onShow(n):this._onShowJson=n;this.raisePropertyChanged("onShow")},get_onShowBehavior:function(){return this._popupBehavior?this._popupBehavior.get_onShowBehavior():null},onShow:function(){this._popupBehavior&&this._popupBehavior.onShow()},get_onHide:function(){return this._popupBehavior?this._popupBehavior.get_onHide():this._onHideJson},set_onHide:function(n){this._popupBehavior?this._popupBehavior.set_onHide(n):this._onHideJson=n;this.raisePropertyChanged("onHide")},get_onHideBehavior:function(){return this._popupBehavior?this._popupBehavior.get_onHideBehavior():null},onHide:function(){this._popupBehavior&&this._popupBehavior.onHide()},get_promptText:function(){return this._promptText},set_promptText:function(n){this._promptText!=n&&(this._promptText=n,this.raisePropertyChanged("promptText"))},get_promptCssClass:function(){return this._promptCssClass},set_promptCssClass:function(n){this._promptCssClass!=n&&(this._promptCssClass=n,this.raisePropertyChanged("promptCssClass"))},get_promptPosition:function(){return this._promptPosition},set_promptPosition:function(n){this._promptPosition!=n&&(this._promptPosition=n,this.raisePropertyChanged("promptPosition"))},get_raiseImmediateOnChange:function(){return this._raiseImmediateOnChange},set_raiseImmediateOnChange:function(n){this._raiseImmediateOnChange!=n&&(this._raiseImmediateOnChange=n,this.raisePropertyChanged("raiseImmediateOnChange"))},get_queryTimeout:function(){return this._queryTimeout},set_queryTimeout:function(n){this._queryTimeout!=n&&(this._queryTimeout=n,this.raisePropertyChanged("queryTimeout"))},get_isSorted:function(){return this._isSorted},set_isSorted:function(n){this._isSorted!=n&&(this._isSorted=n,this.raisePropertyChanged("isSorted"))},get_queryPattern:function(){return this._queryPattern},set_queryPattern:function(n){this._queryPattern!=n&&(this._queryPattern=n,this.raisePropertyChanged("queryPattern"))}};Sys.Extended.UI.ListSearchBehavior.registerClass("Sys.Extended.UI.ListSearchBehavior",Sys.Extended.UI.BehaviorBase);Sys.Extended.UI.ListSearchPromptPosition=function(){throw Error.invalidOperation();};Sys.Extended.UI.ListSearchPromptPosition.prototype={Top:0,Bottom:1};Sys.Extended.UI.ListSearchPromptPosition.registerEnum("Sys.Extended.UI.ListSearchPromptPosition");Sys.Extended.UI.ListSearchQueryPattern=function(){throw Error.invalidOperation();};Sys.Extended.UI.ListSearchQueryPattern.prototype={StartsWith:0,Contains:1};Sys.Extended.UI.ListSearchQueryPattern.registerEnum("Sys.Extended.UI.ListSearchQueryPattern");