JAVASCRIPT   98

live search js

Guest on 9th May 2022 01:57:02 AM

  1. angular.module(angAppName)
  2.     .directive('liveSearch', function(customFilterService){
  3.        
  4.         return{
  5.            
  6.             restrict:"AE",
  7.             require: "?ngModel",
  8.             scope:true,
  9.             bindToController: true,
  10.             controllerAs: 'vm',
  11.             link:function( scope, elem, attrs, ngModel ) {
  12.                
  13.                                 var activePostsList = [],
  14.                                         default_filter = null,
  15.                                         postsFirstLoad = true;
  16.  
  17.                                 scope.postsHasLoaded = false;
  18.  
  19.                                 lscf_initLiveSearch(function(){
  20.                                        
  21.                                         $j('.lscf-live-search-input').focus(function(){
  22.  
  23.                                                 if ( true === scope.actionSettings.lsLoadPosts ) {
  24.  
  25.                                                         scope.postsHasLoaded = false;
  26.  
  27.                                                         if ( 'undefined' !== typeof capfData.settings.theme.posts_display_from &&
  28.                                                                 'undefined' !== capfData.settings.theme.posts_display_from.post_taxonomies.active_terms &&
  29.                                                                         capfData.settings.theme.posts_display_from.post_taxonomies.active_terms.length > 0 )
  30.                                                         {
  31.                                                                 default_filter = {
  32.                                                                         "default_filter":{}
  33.                                                                 };
  34.  
  35.                                                                 default_filter.default_filter.post_taxonomies = capfData.settings.theme.posts_display_from.post_taxonomies;
  36.  
  37.                                                         } else {
  38.  
  39.                                                                 default_filter = scope.actionSettings.customFields;
  40.  
  41.                                                         }
  42.  
  43.                                                         customFilterService.getPosts( scope.postType, 200, 1, default_filter )
  44.                                                                 .success( function( data ) {
  45.  
  46.                                                                         scope.postsHasLoaded = true;
  47.                                                                         scope.actionSettings.lsLoadPosts = false;
  48.  
  49.                                                                         if ( true === postsFirstLoad ) {
  50.                                                                                 lscfPostsList = new lscfPosts();
  51.                                                                         }
  52.  
  53.                                                                         postsFirstLoad = false;
  54.  
  55.                                                                         posts = data.posts;
  56.                                                         });
  57.                                                 }
  58.  
  59.                                         });
  60.  
  61.                                 });
  62.  
  63.                                 scope.$watch( "pxsearch", function( newVal, oldVal ) {
  64.  
  65.                                         if ( typeof newVal !== 'undefined' && newVal != oldVal ) {
  66.                                                 scope.loadMoreBtn.postsLoading = true;
  67.                                         }
  68.  
  69.                                         scope.$watch( "postsHasLoaded", function( new_posts_status, old_posts_status ) {
  70.  
  71.                                                 if ( true === new_posts_status ) {
  72.  
  73.                                                                 if ( typeof newVal !== 'undefined' && newVal != oldVal  ) {
  74.                                                                        
  75.                                                                         scope.$parent.loadMoreBtn.morePostsAvailable = false;
  76.                                                                         var updatedPostList = [];
  77.  
  78.  
  79.  
  80.                                                                         if ( newVal !== '' && 'undefined' !== typeof posts ) {
  81.  
  82.                                                                                 posts.forEach(function(post){
  83.                                                                                
  84.                                                                                         var sTitleLong = pxDecodeEntities( post.title.long.replace( /(<strong(.*?)class\=\"matched-word\"\>)|(<\/strong\>)/ig, '' ) );
  85.                                                                                         var sTitleShort = pxDecodeEntities( post.title.short.replace( /(<strong(.*?)class\=\"matched-word\"\>)|(<\/strong\>)/ig, '' ) );
  86.                                                                                         var sContent = pxDecodeEntities ( post.content.replace( /(<strong(.*?)class\=\"matched-word\"\>)|(<\/strong\>)/ig, '' ) );
  87.                                                                
  88.                                                                                         if ( newVal.toLowerCase() == sTitleShort.toLowerCase() ) {
  89.                                                                                                 post.class_name = 'ls-matches-search';
  90.                                                                                         } else {
  91.                                                                                                 post.class_name = '';
  92.                                                                                         }
  93.  
  94.                                                                                         if ( sTitleLong.toLowerCase().indexOf(newVal.toLowerCase()) != -1 || post.full_content.toLowerCase().indexOf(newVal.toLowerCase()) != -1 ) {
  95.                                                                                                        
  96.                                                                                                         sTitleLong = sTitleLong.replace(new RegExp( '(' + newVal + ')', 'ig'), '<strong class="matched-word">' + "$1" + '</strong>');
  97.                                                                                                         sTitleShort = sTitleShort.replace(new RegExp( '(' + newVal + ')', 'ig'), '<strong class="matched-word">' + "$1" + '</strong>');
  98.                                                                                                         sContent = sContent.replace(new RegExp(newVal, 'ig'), '<strong class="matched-word">' + "$1" + '</strong>');
  99.                                                                                                        
  100.                                                                                                         post.title.long = sTitleLong;
  101.                                                                                                         post.title.short = sTitleShort;
  102.                                                                                                         post.content = sContent;
  103.                                                                                                        
  104.                                                                                                         updatedPostList.push(post);
  105.                                                                                         }
  106.                                                                                        
  107.                                                                                 });
  108.                                                                                
  109.                                                                         }
  110.                                                                         else {
  111.                                                                                 if ( 'undefined' !== typeof posts ) {
  112.  
  113.                                                                                         scope.loadMoreBtn.postsLoading = true;
  114.  
  115.                                                                                         posts.forEach(function(post){
  116.                                                                                        
  117.                                                                                                 var sTitleLong = post.title.long.replace( /(<strong(.*?)class\=\"matched-word\"\>)|(<\/strong\>)/ig, '' );
  118.                                                                                                 var sTitleShort = post.title.short.replace( /(<strong(.*?)class\=\"matched-word\"\>)|(<\/strong\>)/ig, '' );
  119.                                                                                                 var sContent = post.content.replace( /(<strong(.*?)class\=\"matched-word\"\>)|(<\/strong\>)/ig, '' );
  120.                                                                                                
  121.                                                                                                 post.title.long = sTitleLong;
  122.                                                                                                 post.title.short = sTitleShort;
  123.                                                                                                 post.content = sContent;
  124.                                                                                                
  125.                                                                                                 updatedPostList.push(post);
  126.                                                                                                        
  127.                                                                                         });
  128.                                                                                 }
  129.                                                                                
  130.                                                                         }
  131.                                                                        
  132.                                                                         scope.$parent.filterPostsTemplate.posts = updatedPostList;
  133.                                                                         lscfPostsList.constructHover();
  134.                                                                         scope.loadMoreBtn.postsLoading = false;
  135.  
  136.                                                                 }
  137.                                                         }
  138.                                                 });
  139.                                         });
  140.  
  141.                 customFilterService.getPosts( scope.postType, 200, 1, default_filter )
  142.                     .success( function( data ) {
  143.  
  144.                                                 scope.$watch( "pxsearch_woo_sku", function( newVal, oldVal ) {
  145.                                                        
  146.                                                         if ( typeof newVal !== 'undefined' && newVal != oldVal  ){
  147.                                                                
  148.                                                                 scope.$parent.loadMoreBtn.morePostsAvailable = false;
  149.                                 var updatedPostList = [];
  150.  
  151.                                 if (newVal !== '') {
  152.                                    
  153.                                     posts.forEach(function(post){
  154.                                    
  155.                                         if ( 'undefined' !== typeof post.woocommerce.sku && post.woocommerce.sku.toLowerCase().indexOf(newVal.toLowerCase()) != -1 ) {
  156.  
  157.                                                 updatedPostList.push(post);
  158.                                         }
  159.                                        
  160.                                    
  161.                                     });
  162.                                    
  163.                                 }
  164.                                 else{
  165.                                     if ( 'undefined' !== posts ) {
  166.  
  167.                                                                                 posts.forEach(function(post){
  168.  
  169.                                                                                         updatedPostList.push(post);
  170.                                                                                                
  171.                                                                                 });
  172.                                                                         }
  173.                                    
  174.                                 }
  175.                                
  176.                                 scope.$parent.filterPostsTemplate.posts = updatedPostList;
  177.                                                                 lscfPostsList.constructHover();
  178.  
  179.                             }
  180.  
  181.                                                 });
  182.                
  183.                     });
  184.             }
  185.            
  186.         };
  187.        
  188.     });
  189.  
  190.         function lscf_initLiveSearch( callback ){
  191.                
  192.                 var $j = jQuery,
  193.                         self = this,
  194.                         checkInterval;
  195.  
  196.  
  197.                 this.ready = function(){
  198.  
  199.                         if ( $j('.lscf-live-search-input').length && $j('.lscf-live-search-input').length > 0 ){
  200.                                
  201.                                 clearInterval( checkInterval );
  202.                                 callback();
  203.  
  204.                         }
  205.  
  206.                 };
  207.  
  208.                 checkInterval = setInterval( self.ready(), 500 );
  209.  
  210.                 setTimeout(function(){
  211.                         clearInterval( checkInterval );
  212.                 }, 3000);
  213.  
  214.         }

Raw Paste


Login or Register to edit or fork this paste. It's free.