// All material copyright ESRI, All Rights Reserved, unless otherwise specified. // See https://js.arcgis.com/4.7/esri/copyright.txt for details. //>>built define("require exports ../core/tsSupport/declareExtendsHelper ../core/tsSupport/decorateHelper dojo/i18n!./Search/nls/Search dojo/keys dojo/query dojo/regexp ../PopupTemplate ../core/geolocationUtils ../core/lang ../core/watchUtils ../core/accessorSupport/decorators ./Widget ./Search/SearchResultRenderer ./Search/SearchViewModel ./support/widget".split(" "),function(E,F,v,f,k,e,l,x,y,r,z,A,g,B,C,t,d){var D=/<[a-z/][\s\S]*>/i;return function(u){function b(a){a=u.call(this)||this;a._supportsGeolocation= null;a._inputNode=null;a._searching=null;a._sourceMenuButtonNode=null;a._sourceListNode=null;a._suggestionListNode=null;a._searchResultRenderer=new C({container:document.createElement("div")});a._suggestPromise=null;a._popupTemplate=new y({title:k.searchResult,content:a._renderSearchResultsContent.bind(a)});a._relatedTarget=null;a.activeMenu="none";a.activeSource=null;a.activeSourceIndex=null;a.allPlaceholder=null;a.autoNavigate=null;a.autoSelect=null;a.defaultSource=null;a.iconClass="esri-icon-search"; a.label=k.widgetLabel;a.locationEnabled=!0;a.locationToAddressDistance=null;a.maxResults=null;a.maxSuggestions=null;a.minSuggestCharacters=null;a.popupEnabled=null;a.popupOpenOnSelect=null;a.popupTemplate=null;a.resultGraphic=null;a.resultGraphicEnabled=null;a.results=null;a.searchAllEnabled=null;a.searchTerm=null;a.selectedResult=null;a.sources=null;a.suggestions=null;a.suggestionsEnabled=null;a.view=null;a.viewModel=new t;a._supportsGeolocation=r.supported();return a}v(b,u);b.prototype.postInitialize= function(){var a=this;this.viewModel.popupTemplate=this._popupTemplate;this.own(A.watch(this,"searchTerm",function(c){if(c&&"warning"===a.activeMenu||!c&&!a.get("viewModel.selectedSuggestion.location"))a.activeMenu="none"}))};b.prototype.destroy=function(){this._cancelSuggest();this._searchResultRenderer&&(this._searchResultRenderer.viewModel=null,this._searchResultRenderer.destroy(),this._searchResultRenderer=null)};Object.defineProperty(b.prototype,"state",{get:function(){return 0===this.sources.length? "disabled":this._searching?"searching":"ready"},enumerable:!0,configurable:!0});b.prototype.clear=function(){};b.prototype.focus=function(){this._inputNode&&(this.activeMenu="suggestion",this._inputNode.focus(),this.emit("search-focus"))};b.prototype.blur=function(a){this._inputNode&&(this._inputNode.blur(),this._inputBlur(a),this.emit("search-blur"))};b.prototype.search=function(a){var c=this;this.activeMenu="none";this._cancelSuggest();a=this.viewModel.search(a).then(function(a){c.activeMenu=a.numResults? "none":"warning";return a}).catch(function(){c.activeMenu="none";return null}).always(function(a){c._searching=null;c.notifyChange("state");return a});this._searching=a.isFulfilled()?null:a;this.notifyChange("state");return a};b.prototype.suggest=function(a){var c=this;this._cancelSuggest();return this._suggestPromise=a=this.viewModel.suggest(a).then(function(a){a.numResults&&(c.activeMenu="suggestion");c._scrollToTopSuggestion();return a}).catch(function(){return null})};b.prototype.render=function(){var a= this,c=this.viewModel,b=c.placeholder,h=c.searchTerm,e=this._getSourceName(c.activeSourceIndex),f=(""+h).trim(),g=this.activeMenu,p=this.id,l=this.state,q=this.id+"-suggest-menu",b=d.tsx("input",{bind:this,placeholder:b,"aria-label":k.searchButtonTitle,maxlength:c.maxInputLength,autocomplete:"off",type:"text",tabindex:"0",class:this.classes("esri-input","esri-search__input"),"aria-autocomplete":"list",value:h,"aria-haspopup":"true","aria-owns":q,role:"textbox",onkeydown:this._handleInputKeydown,onkeyup:this._handleInputKeyup, onclick:this._handleInputClick,oninput:this._handleInputPaste,onpaste:this._handleInputPaste,afterCreate:d.storeNode,"data-node-ref":"_inputNode",onfocusout:this._storeRelatedTarget,onfocus:this.focus,onblur:this.blur,title:h?"":b}),b=d.tsx("form",{key:"esri-search__form",bind:this,class:"esri-search__form",onsubmit:this._formSubmit,role:"search"},b),m=h?d.tsx("div",{key:"esri-search__clear-button",bind:this,role:"button",class:d.join("esri-search__clear-button","esri-widget-button"),tabindex:"0", title:k.clearButtonTitle,onfocus:this._clearButtonFocus,onclick:this._handleClearButtonClick,onkeydown:this._handleClearButtonClick},d.tsx("span",{"aria-hidden":"true",class:"esri-icon-close"})):null,r=this.locationEnabled&&this._supportsGeolocation&&!f?d.tsx("ul",{key:"esri-search__suggestion-list-current-location",class:d.join("esri-search__suggestions-list","esri-search__suggestions-list--current-location")},d.tsx("li",{bind:this,onclick:this._handleUseCurrentLocationClick,onkeydown:this._handleUseCurrentLocationClick, onkeyup:this._handleSuggestionKeyup,role:"menuitem",tabindex:"-1"},d.tsx("span",{"aria-hidden":"true",role:"presentation",class:"esri-icon-locate-circled"})," ",k.useCurrentLocation)):null,u=1a?this._sourceMenuButtonNode: b[a])&&b.focus()):d===e.DOWN_ARROW&&(a=c+1,(b=a>=b.length?this._sourceMenuButtonNode:b[a])&&b.focus())}};b.prototype._handleSuggestionKeyup=function(a){var c=a.target,b=this._suggestionListNode?l("li",this._suggestionListNode):null,c=b.indexOf(c),d=a.keyCode;this._cancelSuggest();if(d===e.BACKSPACE||d===e.DELETE)this._focus();else if(d===e.ESCAPE)this._focus("none");else if(b){if(d===e.HOME||d===e.END||d===e.UP_ARROW||d===e.DOWN_ARROW)a.stopPropagation(),a.preventDefault();d===e.HOME&&(a=b[0])&&a.focus(); d===e.END&&(a=b[b.length-1])&&a.focus();d===e.UP_ARROW?(--c,(b=0>c?b[b.length-1]:b[c])&&b.focus()):d===e.DOWN_ARROW&&(c+=1,(b=c>=b.length?b[0]:b[c])&&b.focus())}};b.prototype._focus=function(a){this.focus();a&&(this.activeMenu=a)};b.prototype._formSubmit=function(a){a.preventDefault();this.search()};b.prototype._getSourceName=function(a){var b=this.viewModel.sources.getItemAt(a);return a===t.ALL_INDEX?k.all:b?b.name:k.untitledSource};b.prototype._getSuggestionHeaderNode=function(a){var b=this._getSourceName(a); return d.tsx("div",{key:"esri-search__suggestion-header-"+a,class:"esri-header"},b)};b.prototype._splitResult=function(a,b){b=x.escapeString(b);return a.replace(new RegExp("(^|)("+b+")(|$)","ig"),"$1|$2|$3").split("|")};b.prototype._getSuggestionNode=function(a,b,e){if(e=this.viewModel.searchTerm){var c=a.text||k.untitledResult,f=[];if(D.test(c))f.push(d.tsx("div",{innerHTML:c}));else{var c=this._splitResult(c,e),g=e.toLowerCase();c.forEach(function(a,b){a&&a.length&&(a.toLowerCase()===g?f.push(d.tsx("strong", {key:b},a)):f.push(a))})}return d.tsx("li",{bind:this,onclick:this._handleSuggestionClick,onkeydown:this._handleSuggestionClick,onkeyup:this._handleSuggestionKeyup,key:"esri-search__suggestion$-{sourceIndex}_"+b,"data-suggestion":a,role:"menuitem",tabindex:"-1"},f)}};b.prototype._getSourceNode=function(a){var b=(e={},e["esri-search__source--active"]=a===this.viewModel.activeSourceIndex,e);return d.tsx("li",{bind:this,key:"esri-search__source-"+a,onclick:this._handleSourceClick,onkeydown:this._handleSourceClick, onkeyup:this._handleSourceKeyup,"data-source-index":a,role:"menuitem",class:"esri-search__source",classes:b,tabindex:"-1"},this._getSourceName(a));var e};b.prototype._renderSearchResultsContent=function(){this._searchResultRenderer.showMoreResultsOpen=!1;this._searchResultRenderer.viewModel=this.viewModel;return this._searchResultRenderer};f([g.property(),d.renderable()],b.prototype,"activeMenu",void 0);f([g.aliasOf("viewModel.activeSource"),d.renderable()],b.prototype,"activeSource",void 0);f([g.aliasOf("viewModel.activeSourceIndex"), d.renderable()],b.prototype,"activeSourceIndex",void 0);f([g.aliasOf("viewModel.allPlaceholder"),d.renderable()],b.prototype,"allPlaceholder",void 0);f([g.aliasOf("viewModel.autoNavigate")],b.prototype,"autoNavigate",void 0);f([g.aliasOf("viewModel.autoSelect")],b.prototype,"autoSelect",void 0);f([g.aliasOf("viewModel.defaultSource")],b.prototype,"defaultSource",void 0);f([g.property()],b.prototype,"iconClass",void 0);f([g.property()],b.prototype,"label",void 0);f([g.property()],b.prototype,"locationEnabled", void 0);f([g.aliasOf("viewModel.locationToAddressDistance")],b.prototype,"locationToAddressDistance",void 0);f([g.aliasOf("viewModel.maxResults")],b.prototype,"maxResults",void 0);f([g.aliasOf("viewModel.maxSuggestions")],b.prototype,"maxSuggestions",void 0);f([g.aliasOf("viewModel.minSuggestCharacters")],b.prototype,"minSuggestCharacters",void 0);f([g.aliasOf("viewModel.popupEnabled")],b.prototype,"popupEnabled",void 0);f([g.aliasOf("viewModel.popupOpenOnSelect")],b.prototype,"popupOpenOnSelect", void 0);f([g.aliasOf("viewModel.popupTemplate")],b.prototype,"popupTemplate",void 0);f([g.aliasOf("viewModel.resultGraphic")],b.prototype,"resultGraphic",void 0);f([g.aliasOf("viewModel.resultGraphicEnabled")],b.prototype,"resultGraphicEnabled",void 0);f([g.aliasOf("viewModel.results"),d.renderable()],b.prototype,"results",void 0);f([g.aliasOf("viewModel.searchAllEnabled"),d.renderable()],b.prototype,"searchAllEnabled",void 0);f([g.aliasOf("viewModel.searchTerm"),d.renderable()],b.prototype,"searchTerm", void 0);f([g.aliasOf("viewModel.selectedResult")],b.prototype,"selectedResult",void 0);f([g.aliasOf("viewModel.sources"),d.renderable()],b.prototype,"sources",void 0);f([g.property({readOnly:!0,dependsOn:["sources.length"]}),d.renderable()],b.prototype,"state",null);f([g.aliasOf("viewModel.suggestions"),d.renderable()],b.prototype,"suggestions",void 0);f([g.aliasOf("viewModel.suggestionsEnabled")],b.prototype,"suggestionsEnabled",void 0);f([g.aliasOf("viewModel.view"),d.renderable()],b.prototype, "view",void 0);f([d.vmEvent("search-complete search-clear search-start select-result suggest-start suggest-complete".split(" ")),g.property({type:t}),d.renderable(["viewModel.activeSource.placeholder","viewModel.activeSource.name"])],b.prototype,"viewModel",void 0);f([g.aliasOf("viewModel.clear")],b.prototype,"clear",null);f([d.accessibleHandler()],b.prototype,"_handleSourcesMenuToggleClick",null);f([d.accessibleHandler()],b.prototype,"_handleClearButtonClick",null);f([d.accessibleHandler()],b.prototype, "_handleSearchButtonClick",null);f([d.accessibleHandler()],b.prototype,"_handleSuggestionClick",null);f([d.accessibleHandler()],b.prototype,"_handleUseCurrentLocationClick",null);f([d.accessibleHandler()],b.prototype,"_handleSourceClick",null);return b=f([g.subclass("esri.widgets.Search")],b)}(g.declared(B))});