function UEAjaxSearch(){ var g_objWrapper, g_urlBase, g_cache = {}, g_objInput, g_searchItemIndex, g_objSearchBtn, g_pageNumber, g_paginationList, g_paginationInner, g_paginationHeader, g_postItem, g_activeItemClass, g_inActiveItemClass, g_arrowLeft, g_arrowRight, g_selectedItemClass, g_activePageIndex, g_homeUrl, g_objSuggested, g_objSuggestedLinks; var g_objItemsWrapper, g_objError; var g_vars = { CLASS_DIV_DEBUG:"uc-div-ajax-debug" }; var g_temp = { handle: null, trashold:500, lastRequest:null }; /** * console log */ function trace(str){ console.log(str); } /** * run function with trashold */ function runWithTrashold(func, trashold){ if(g_temp.handle) clearTimeout(g_temp.handle); g_temp.handle = setTimeout(func, g_temp.trashold); }; /** * replace all occurances */ function replaceAll(text, from, to){ return text.split(from).join(to); }; /** * add url param */ function addUrlParam(url, param, value){ if(url.indexOf("?") == -1) url += "?"; else url += "&"; if(typeof value == "undefined") url += param; else url += param + "=" + value; return(url); } /** * get object property */ function getVal(obj, name, defaultValue){ if(!defaultValue) var defaultValue = ""; var val = ""; if(!obj || typeof obj != "object") val = defaultValue; else if(obj.hasOwnProperty(name) == false){ val = defaultValue; }else{ val = obj[name]; } return(val); } function ___________AJAX____________(){} /** * show ajax error, should be something visible */ function showAjaxError(message){ g_objWrapper.removeClass("uc-loading"); g_objError.show(); g_objError.html(message); } /** * get the debug object */ function getDebugObject(){ var objDebug = g_objWrapper.siblings("."+g_vars.CLASS_DIV_DEBUG); if(objDebug.length) return(objDebug); //insert if not exists g_objWrapper.after("
"); var objDebug = jQuery("body").find("."+g_vars.CLASS_DIV_DEBUG); return(objDebug); } /** * show ajax debug */ function showAjaxDebug(str){ trace("Ajax Error! - Check the debug"); str = jQuery.trim(str); if(!str || str.length == 0) return(false); var objStr = jQuery(str); if(objStr.find("header").length || objStr.find("body").length){ str = "Wrong ajax response!"; } var objDebug = getDebugObject(); if(!objDebug || objDebug.length == 0){ alert(str); throw new Error("debug not found"); } g_objItemsWrapper.hide(); objDebug.show(); objDebug.html(str); } /** * get response from ajax cache */ function getResponseFromAjaxCache(ajaxUrl, action, objData){ var cacheKey = getAjaxCacheKey(ajaxUrl, action, objData); if(!cacheKey) return(false); var response = getVal(g_cache, cacheKey); return(response); } /** * get ajax url */ function getAjaxCacheKeyFromUrl(ajaxUrl){ var key = ajaxUrl; key = key.replace(g_urlBase, ""); //replace special signs key = replaceAll(key, "/",""); key = replaceAll(key, "?","_"); key = replaceAll(key, "&","_"); key = replaceAll(key, "=","_"); return(key); } /** * get ajax cache key */ function getAjaxCacheKey(ajaxUrl, action, objData){ //cache only by url meanwhile if(jQuery.isEmptyObject(objData) == false) return(false); if(action) return(false); var cacheKey = getAjaxCacheKeyFromUrl(ajaxUrl); if(!cacheKey) return(false); return(cacheKey); } /** * cache ajax response */ function cacheAjaxResponse(ajaxUrl, action, objData, response){ var cacheKey = getAjaxCacheKey(ajaxUrl, action, objData); if(!cacheKey) return(false); //some precoutions for overload if(g_cache.length > 100) return(false); g_cache[cacheKey] = response; } /** * small ajax request */ function ajaxRequest(ajaxUrl, action, objData, onSuccess){ if(!objData) var objData = {}; if(typeof objData != "object") throw new Error("wrong ajax param"); //check response from cache var responseFromCache = getResponseFromAjaxCache(ajaxUrl, action, objData); if(responseFromCache){ //simulate ajax request setTimeout(function(){ onSuccess(responseFromCache); }, 300); return(false); } var ajaxData = {}; ajaxData["action"] = "unlimitedelements_ajax_action"; ajaxData["client_action"] = action; var ajaxtype = "get"; if(jQuery.isEmptyObject(objData) == false){ ajaxData["data"] = objData; ajaxtype = "post"; } var ajaxOptions = { type:ajaxtype, url:ajaxUrl, success:function(response){ if(!response){ showAjaxError("Empty ajax response!"); return(false); } if(typeof response != "object"){ try{ response = jQuery.parseJSON(response); }catch(e){ showAjaxDebug(response); showAjaxError("Ajax Error!!! not ajax response"); return(false); } } if(response == -1){ showAjaxError("ajax error!!!"); return(false); } if(response == 0){ showAjaxError("ajax error, action: "+action+" not found"); return(false); } if(response.success == undefined){ showAjaxError("The 'success' param is a must!"); return(false); } if(response.success == false){ showAjaxError(response.message); return(false); } cacheAjaxResponse(ajaxUrl, action, objData, response); if(typeof onSuccess == "function"){ onSuccess(response); } }, error:function(jqXHR, textStatus, errorThrown){ switch(textStatus){ case "parsererror": case "error": //showAjaxError("parse error"); showAjaxDebug(jqXHR.responseText); break; } } } if(ajaxtype == "post"){ ajaxOptions.dataType = 'json'; ajaxOptions.data = ajaxData } if(g_temp.currentRequest) g_temp.currentRequest.abort(); g_temp.currentRequest = jQuery.ajax(ajaxOptions); } function ____________ACTIONS___________(){} /** * clear all parts */ function clearAll(){ g_objItemsWrapper.hide(); g_objError.hide(); } /** * get the request url */ function getAjaxRequestUrl(){ var searchValue = g_objInput.val(); searchValue = encodeURIComponent(searchValue); if(!searchValue){ clearAll(); return(false); } var objWidget = g_objWrapper.parents(".elementor-widget"); if(objWidget.length == 0) throw new Error("widget not found"); var elementID = objWidget.data("id"); if(!elementID) throw new Error("element id not found"); var objLayout = g_objWrapper.parents(".elementor"); if(objLayout.length == 0) throw new Error("Layout not found"); var layoutID = objLayout.data("elementor-id"); if(!layoutID) throw new Error("Layout ID not found"); var url = g_urlBase; url = addUrlParam(url, "ucfrontajaxaction", "ajaxsearch"); url = addUrlParam(url, "ucs", searchValue); url = addUrlParam(url, "layoutid", layoutID); url = addUrlParam(url, "elid", elementID); var addUrlFilters = g_objWrapper.triggerHandler("uc_get_filters_url"); if(addUrlFilters) url += "&"+addUrlFilters; return(url); } /** * replace the grid debug */ function operateAjax_setHtmlDebug(response, objGrid){ //replace the debug var htmlDebug = getVal(response, "html_debug"); if(!htmlDebug) return(false); var objDebug = objGrid.siblings(".uc-debug-query-wrapper"); if(objDebug.length == 0) return(false); objDebug.replaceWith(htmlDebug); } /** * handle the response */ function handleResponse(response){ var htmlItems = getVal(response,"html_items"); g_objItemsWrapper.html(htmlItems); g_objItemsWrapper.show(); operateAjax_setHtmlDebug(response, g_objWrapper); } /** * format suggested searches */ function placeSuggestedSearches(){ if(!g_objSuggested.length) return(false); //create an array of suggested searches var suggestedItemsArray = g_objSuggested.text().split(/\r?\n/); var suggestedItemsLength = suggestedItemsArray.length; //empty container g_objSuggested.html(""); for(let i=0; i