ExtSearch/src/out/src/js/d3extsearch.min.js

14 lines
8.9 KiB
JavaScript

/**
* This Software is the property of Data Development and is protected
* by copyright law - it is NOT Freeware.
* Any unauthorized use of this software without a valid license
* is a violation of the license agreement and will be prosecuted by
* civil and criminal law.
* http://www.shopmodule.com
*
* @license
* @copyright (C) D3 Data Development (Inh. Thomas Dartsch)
* @author D3 Data Development - Daniel Seifert <support@shopmodule.com>
* @link http://www.oxidmodule.com
*/
$(function(){"use strict";$.widget("ui.d3extsearchsuggest",{options:{currentEvent:null,oAjaxResponseElement:null,isSend:0,coloredId:null,oldColoredId:null,iActLine:null,iCode:null,blNavigate:null,iRet:null,sSelection:null,oSelection:null,iDelay:600,sD3SearchBoxDefault:"",sWaitMessage:"",sParentThemeId:"flow",sRequestUrl:null,sSearchFormId:"search",sCloseBtnId:"d3extsearch_suggest_closebtn",sResultListId:"#searchItemList",sResultItemClass:".d3QSItem",sStartSearchButtonId:"d3extsearch_suggest_startsearch",sResponseElementId:"xajax_resp",sResponseElementClass:"xajax_resp_cl",sWaitMsgIdentificator:"#d3_extsearch_quicksearch.searchWaitMsg",sRequestFncName:"getSuggestContent",sSearchParamName:"searchParam",sActClassName:"item_act",sInactClassName:"item_inact",sActiveElementClassName:null,blSetActiveElementDimensions:!0,sActiveElementStyleTop:null,sActiveElementStyleTopImportant:"",sActiveElementStyleLeft:null,sActiveElementStyleLeftImportant:"",blAutomatedActiveElementStyleWidth:!1,sActiveElementStyleWidth:null,sActiveElementStyleWidthImportant:"",iScrollTopOffset:29,blEnableLeftRightNavigation:!0,blToggleLeftRightDirection:!1},_create:function(){let e=this,t=this.element;this.addResponseElement(),t.keyup(function(t){e.keyHandler(t)})},addResponseElement:function(){let e=this.options,t=$("#"+e.sResponseElementId);0===t.length?e.oAjaxResponseElement=$("<div>",{id:e.sResponseElementId,class:e.sResponseElementClass+" xajax_resp_"+e.sParentThemeId}).appendTo("body"):e.oAjaxResponseElement=t},mouseHandler:function(e,t){let s=this.options;s.oldColoredId=s.coloredId,s.coloredId=e,s.iActLine=t,s.blNavigate=!0,this.changeResultItemColor(s.coloredId,s.oldColoredId)},keyHandler:function(e){e.preventDefault();let t=this.options;t.currentEvent=e;let s="submit"===e.type.toLowerCase(),o=s?"Enter":e.originalEvent.key;s||"enter"===o.toLowerCase()||t.oAjaxResponseElement.is(":visible")?"arrowup"===o.toLowerCase()?this.handleArrowUpKey():"arrowleft"!==o.toLowerCase()&&"pageup"!==o.toLowerCase()||!t.blEnableLeftRightNavigation?"arrowright"!==o.toLowerCase()&&"pagedown"!==o.toLowerCase()||!t.blEnableLeftRightNavigation?"arrowdown"===o.toLowerCase()?this.handleArrowDownKey():"enter"===o.toLowerCase()?t.blNavigate?this.handleEnterKeyOnSelectedItem():this.handleEnterKeyWithoutSelectedItem():"escape"===o.toLowerCase()?this.handleEscapeKey():this.handleOtherKeys():this.handleArrowRightKey():this.handleArrowLeftKey():this.showSuggestWindow()},handleArrowUpKey:function(){let e=this.options;e.iActLine>0&&e.iActLine--,e.coloredId&&(e.oldColoredId=e.coloredId),e.blNavigate=!0,e.coloredId=this.getResultItemIdByLine(e.iActLine),this.changeResultItemColor(e.coloredId,e.oldColoredId)},handleArrowDownKey:function(){let e=this.options,t=this.getResultItemCount();e.iActLine<t-1&&e.iActLine++,e.coloredId&&(e.oldColoredId=e.coloredId),e.blNavigate=!0,e.coloredId=this.getResultItemIdByLine(e.iActLine),this.changeResultItemColor(e.coloredId,e.oldColoredId)},handleArrowLeftKey:function(){let e=this.options,t=null,s=null,o=this.getTypesList();if(e.iActLine<0)t=0,s=0;else{let n=$("#"+this.getResultItemIdByLine(e.iActLine)).attr("data-object-type");null!==n?n&&n.length&&o.length>1&&(t=$.inArray(n,o),s=e.blToggleLeftRightDirection?1:-1):console.error("selected item has no data-object-type attribute, can not switch to next group")}if(null!==t){let n=o[t+s],l=this.findFirstElementIdByObjectType(n);null!==l&&(e.coloredId&&(e.oldColoredId=e.coloredId),e.coloredId=l,this.changeResultItemColor(e.coloredId,e.oldColoredId),e.oldColoredId=e.coloredId)}},handleArrowRightKey:function(){let e=this.options,t=null,s=null,o=this.getTypesList();if(e.iActLine<0)t=0,s=0;else{let n=$("#"+this.getResultItemIdByLine(e.iActLine)).attr("data-object-type");n?n&&n.length&&o.length>1&&(t=$.inArray(n,o),s=e.blToggleLeftRightDirection?-1:1):console.error("selected item has no data-object-type attribute, can not switch to next group")}if(null!==t){let n=o[t+s],l=this.findFirstElementIdByObjectType(n);l&&(e.coloredId&&(e.oldColoredId=e.coloredId),e.coloredId=l,this.changeResultItemColor(e.coloredId,e.oldColoredId),e.oldColoredId=e.coloredId)}},getTypesList:function(){let e=[];return this.getResultItemListElement().each(function(){let t=$(this).attr("data-object-type");t?t.length&&$.inArray(t,e)<0&&e.push(t):console.error("no data-object-type attributes for grouping found")}),e},findFirstElementIdByObjectType:function(e){let t=this.options,s=null;return this.getResultItemListElement().each(function(o){if($(this).attr("data-object-type")===e)return t.iActLine=o,s=$(this).attr("id"),!1}),s},handleEnterKeyOnSelectedItem:function(){let e=this.options,t=$("#"+this.getResultItemIdByLine(e.iActLine));window.location.href=t.attr("href")},handleEnterKeyWithoutSelectedItem:function(){let e=this,t=this.options;t.isSend&&(window.clearTimeout(t.isSend),e.hideSuggest());let s=$("#"+t.sSearchFormId);s.off("submit"),s.submit()},handleEscapeKey:function(){this.hideSuggest()},handleOtherKeys:function(){let e=this.options.currentEvent.originalEvent.key;"ArrowLeft"!==e&&"ArrowRight"!==e&&this.showSuggestWindow()},showSuggestWindow:function(){let e=this.options;if("enter"!==e.currentEvent.originalEvent.key.toLowerCase())return 0===$(e.sWaitMsgIdentificator).length?(this.showWaitMessage(),e.isSend=window.setTimeout(this.showResult(),0)):(this.showWaitMessage(),e.isSend&&window.clearTimeout(e.isSend),e.isSend=window.setTimeout(this.showResult(),e.iDelay)),null},showWaitMessage:function(){let e=this.options;e.oAjaxResponseElement.html($("<div/>").html(e.sWaitMessage).text()),this.setResponseElementStyle()},showResult:function(){let e=this.options,t=this.element,s=this;$.get(e.sRequestUrl+"fnc="+e.sRequestFncName+"&"+e.sSearchParamName+"="+t.val(),function(o){t.val()===o.searchparam&&(e.oAjaxResponseElement.html(o.content),s.setItemsMouseHandler(),s.setResponseElementStyle(),s.setStartSearchButtonHandler())}),e.iActLine=-1,e.coloredId=-1,e.oldColoredId=-1,e.blNavigate=!1},setResponseElementStyle:function(){let e=this,t=this.options,s=this.element;t.sActiveElementClassName&&t.oAjaxResponseElement.addClass(t.sActiveElementClassName),t.blSetActiveElementDimensions&&(t.oAjaxResponseElement.get(0).style.setProperty("top",t.sActiveElementStyleTop?t.sActiveElementStyleTop:s[0].hasAttribute("suggestTopOffsetPx")?s.offset().top+(s.height()+5)+parseInt(s.attr("suggestTopOffsetPx"),10)+"px":s.offset().top+(s.height()+5)+"px",t.sActiveElementStyleTopImportant),t.oAjaxResponseElement.get(0).style.setProperty("left",t.sActiveElementStyleLeft?t.sActiveElementStyleLeft:s[0].hasAttribute("suggestLeftOffsetPx")?s.offset().left+parseInt(s.attr("suggestLeftOffsetPx"),10)+"px":s.offset().left+"px",t.sActiveElementStyleLeftImportant),t.blAutomatedActiveElementStyleWidth&&t.oAjaxResponseElement.get(0).style.setProperty("width",t.sActiveElementStyleWidth?t.sActiveElementStyleWidth:s.width()+"px",t.sActiveElementStyleWidthImportant)),this.showSuggest(),t.oAjaxResponseElement.click(function(e){e.stopPropagation()}),this.element.click(function(e){e.stopPropagation()}),$("body").click(function(){e.hideSuggest()}),$("#"+t.sCloseBtnId).click(function(t){t.stopPropagation(),e.hideSuggest()})},showSuggest:function(){this.options.oAjaxResponseElement.addClass("suggestVisible")},hideSuggest:function(){this.options.oAjaxResponseElement.removeClass("suggestVisible")},getResultItemListElement:function(){let e=this.options;return $(e.sResultListId).find("a"+e.sResultItemClass)},getResultItemCount:function(){return this.getResultItemListElement().length},getResultItemIdByLine:function(e){let t=null;return this.getResultItemListElement().each(function(s){s===e&&(t=$(this).attr("id"))}),t},changeResultItemColor:function(e,t){let s=this.options;-1!==t&&t!==e&&$("#"+t).addClass(s.sInactClassName).removeClass(s.sActClassName),t!==e&&$("#"+e).addClass(s.sActClassName).removeClass(s.sInactClassName),this.scrollToSelectedElement(e)},scrollToSelectedElement:function(e){let t=this.options,s=t.currentEvent,o=$("#"+e);if(0===o.length||s.type.toLowerCase().indexOf("mouse")>=0)return;let n=$(t.sResultListId),l=o.position().top+n.scrollTop()-t.iScrollTopOffset;n.stop(!0).animate({scrollTop:l},"slow")},setItemsMouseHandler:function(){let e=this,t=this.options;this.getResultItemListElement().each(function(s){$(this).mouseover(function(o){t.currentEvent=o;let n=e.getResultItemIdByLine(s);e.mouseHandler(n,s)})})},setStartSearchButtonHandler:function(){let e=this,t=this.options;$("#"+t.sStartSearchButtonId).click(function(t){t.preventDefault(),e.handleEnterKeyWithoutSelectedItem()})}})}(jQuery));