From 7b3827404172bebb9aafef62fa468d2ffb48ffd3 Mon Sep 17 00:00:00 2001 From: Anthony Talarico Date: Thu, 20 Sep 2018 12:12:23 -0400 Subject: [PATCH] adding new jquery lib for autocomplete for the dashboard widget text search --- css/autoComplete.css | 9 +++ js/materialize/autoComplete.min.js | 3 + js/{ => materialize}/materialize.min.js | 0 models/admin/ajax/glmTextSearch.php | 18 +++--- models/admin/newDashboard/index.php | 12 +++- .../newDashboard/components/textSearch.html | 62 +++++++++++++------ 6 files changed, 75 insertions(+), 29 deletions(-) create mode 100644 css/autoComplete.css create mode 100644 js/materialize/autoComplete.min.js rename js/{ => materialize}/materialize.min.js (100%) diff --git a/css/autoComplete.css b/css/autoComplete.css new file mode 100644 index 00000000..4261b1d0 --- /dev/null +++ b/css/autoComplete.css @@ -0,0 +1,9 @@ +.autocomplete-suggestions { + text-align: left; cursor: default; border: 1px solid #ccc; border-top: 0; background: #fff; box-shadow: -1px 1px 3px rgba(0,0,0,.1); + + /* core styles should not be changed */ + position: absolute; display: none; z-index: 9999; max-height: 254px; overflow: hidden; overflow-y: auto; box-sizing: border-box; +} +.autocomplete-suggestion { position: relative; padding: 0 .6em; line-height: 23px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-size: 1.02em; color: #333; } +.autocomplete-suggestion b { font-weight: normal; color: #1f8dd6; } +.autocomplete-suggestion.selected { background: #f0f0f0; } diff --git a/js/materialize/autoComplete.min.js b/js/materialize/autoComplete.min.js new file mode 100644 index 00000000..c6deb2f2 --- /dev/null +++ b/js/materialize/autoComplete.min.js @@ -0,0 +1,3 @@ +// jQuery autoComplete v1.0.7 +// https://github.com/Pixabay/jQuery-autoComplete +!function(e){e.fn.autoComplete=function(t){var o=e.extend({},e.fn.autoComplete.defaults,t);return"string"==typeof t?(this.each(function(){var o=e(this);"destroy"==t&&(e(window).off("resize.autocomplete",o.updateSC),o.off("blur.autocomplete focus.autocomplete keydown.autocomplete keyup.autocomplete"),o.data("autocomplete")?o.attr("autocomplete",o.data("autocomplete")):o.removeAttr("autocomplete"),e(o.data("sc")).remove(),o.removeData("sc").removeData("autocomplete"))}),this):this.each(function(){function t(e){var t=s.val();if(s.cache[t]=e,e.length&&t.length>=o.minChars){for(var a="",c=0;c'),s.data("sc",s.sc).data("autocomplete",s.attr("autocomplete")),s.attr("autocomplete","off"),s.cache={},s.last_val="",s.updateSC=function(t,o){if(s.sc.css({top:s.offset().top+s.outerHeight(),left:s.offset().left,width:s.outerWidth()}),!t&&(s.sc.show(),s.sc.maxHeight||(s.sc.maxHeight=parseInt(s.sc.css("max-height"))),s.sc.suggestionHeight||(s.sc.suggestionHeight=e(".autocomplete-suggestion",s.sc).first().outerHeight()),s.sc.suggestionHeight))if(o){var a=s.sc.scrollTop(),c=o.offset().top-s.sc.offset().top;c+s.sc.suggestionHeight-s.sc.maxHeight>0?s.sc.scrollTop(c+s.sc.suggestionHeight+a-s.sc.maxHeight):0>c&&s.sc.scrollTop(c+a)}else s.sc.scrollTop(0)},e(window).on("resize.autocomplete",s.updateSC),s.sc.appendTo("body"),s.sc.on("mouseleave",".autocomplete-suggestion",function(){e(".autocomplete-suggestion.selected").removeClass("selected")}),s.sc.on("mouseenter",".autocomplete-suggestion",function(){e(".autocomplete-suggestion.selected").removeClass("selected"),e(this).addClass("selected")}),s.sc.on("mousedown click",".autocomplete-suggestion",function(t){var a=e(this),c=a.data("val");return(c||a.hasClass("autocomplete-suggestion"))&&(s.val(c),o.onSelect(t,c,a),s.sc.hide()),!1}),s.on("blur.autocomplete",function(){try{over_sb=e(".autocomplete-suggestions:hover").length}catch(t){over_sb=0}over_sb?s.is(":focus")||setTimeout(function(){s.focus()},20):(s.last_val=s.val(),s.sc.hide(),setTimeout(function(){s.sc.hide()},350))}),o.minChars||s.on("focus.autocomplete",function(){s.last_val="\n",s.trigger("keyup.autocomplete")}),s.on("keydown.autocomplete",function(t){if((40==t.which||38==t.which)&&s.sc.html()){var a,c=e(".autocomplete-suggestion.selected",s.sc);return c.length?(a=40==t.which?c.next(".autocomplete-suggestion"):c.prev(".autocomplete-suggestion"),a.length?(c.removeClass("selected"),s.val(a.addClass("selected").data("val"))):(c.removeClass("selected"),s.val(s.last_val),a=0)):(a=40==t.which?e(".autocomplete-suggestion",s.sc).first():e(".autocomplete-suggestion",s.sc).last(),s.val(a.addClass("selected").data("val"))),s.updateSC(0,a),!1}if(27==t.which)s.val(s.last_val).sc.hide();else if(13==t.which||9==t.which){var c=e(".autocomplete-suggestion.selected",s.sc);c.length&&s.sc.is(":visible")&&(o.onSelect(t,c.data("val"),c),setTimeout(function(){s.sc.hide()},20))}}),s.on("keyup.autocomplete",function(a){if(!~e.inArray(a.which,[13,27,35,36,37,38,39,40])){var c=s.val();if(c.length>=o.minChars){if(c!=s.last_val){if(s.last_val=c,clearTimeout(s.timer),o.cache){if(c in s.cache)return void t(s.cache[c]);for(var l=1;l'+e.replace(o,"$1")+""},onSelect:function(e,t,o){}}}(jQuery); diff --git a/js/materialize.min.js b/js/materialize/materialize.min.js similarity index 100% rename from js/materialize.min.js rename to js/materialize/materialize.min.js diff --git a/models/admin/ajax/glmTextSearch.php b/models/admin/ajax/glmTextSearch.php index 48f18c0d..0a26fd7e 100644 --- a/models/admin/ajax/glmTextSearch.php +++ b/models/admin/ajax/glmTextSearch.php @@ -73,23 +73,25 @@ class GlmMembersAdmin_ajax_glmTextSearch public function modelAction ($actionData = false) { global $wpdb; - + if( isset( $_REQUEST['table'] ) ){ - $fields = $_REQUEST['fields']; - $table = filter_var($_REQUEST['table'], FILTER_SANITIZE_STRING); - $sql = "SELECT $fields image FROM $table where title like '%pack%'"; - $packages = $wpdb->get_results($sql); + $searchQuery = filter_var($_REQUEST['query'], FILTER_SANITIZE_STRING); + $fields = $_REQUEST['fields']; + $table = filter_var($_REQUEST['table'], FILTER_SANITIZE_STRING); + $sql = "SELECT $fields FROM $table where title like '%$searchQuery%'"; + $packages = $wpdb->get_results($sql); + foreach($packages as $package){ $searchData[] = [ - $package->title => $package->image + $package->title => ["image"=>$package->image ,"packageID" => $package->id, "memberID"=>$package->ref_dest] ]; } }else{ $table = null; } - + $return = array( - 'data' => $fields, + 'test' => $sql, 'searchData' => $searchData // Where our events list will go ); diff --git a/models/admin/newDashboard/index.php b/models/admin/newDashboard/index.php index f2502fe8..33c1b886 100644 --- a/models/admin/newDashboard/index.php +++ b/models/admin/newDashboard/index.php @@ -111,14 +111,24 @@ class GlmMembersAdmin_newDashboard_index extends GlmDataMembers // Enqueue Materialize wp_register_script( 'materialize', - GLM_MEMBERS_PLUGIN_URL . 'js/materialize.min.js', + GLM_MEMBERS_PLUGIN_URL . 'js/materialize/materialize.min.js', + array( + 'jquery' + ), + GLM_MEMBERS_PLUGIN_VERSION + ); + wp_register_script( + 'autoComplete', + GLM_MEMBERS_PLUGIN_URL . 'js/materialize/autoComplete.min.js', array( 'jquery' ), GLM_MEMBERS_PLUGIN_VERSION ); wp_enqueue_script('materialize', false, array('jquery'), false, true); + wp_enqueue_script('autoComplete', false, array('jquery'), false, true); wp_enqueue_style('materialize-css', GLM_MEMBERS_PLUGIN_URL . 'css/materialize.min.css'); + wp_enqueue_style('autoComplete', GLM_MEMBERS_PLUGIN_URL . 'css/autoComplete.css'); // Check if there's a logged in user who is locked to their own entity. $lockedToMember = apply_filters( 'glm_members_locked_to_member_id', false ); diff --git a/views/admin/newDashboard/components/textSearch.html b/views/admin/newDashboard/components/textSearch.html index d2d5949f..702987ab 100644 --- a/views/admin/newDashboard/components/textSearch.html +++ b/views/admin/newDashboard/components/textSearch.html @@ -6,33 +6,55 @@ \ No newline at end of file -- 2.17.1