JAVASCRIPT   43

sort by

Guest on 9th May 2022 01:54:53 AM

  1. angular.module(angAppName)
  2.     .directive('sortBy', 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 field_exists = false,
  14.                                         field,
  15.                                         orderByID,
  16.                                         dropdownTemplate,
  17.                                         $j = jQuery;
  18.  
  19.                                 scope.$watch( 'pluginSettings.generalSettings.order_by.items', function( newVal, oldVal ){
  20.                                        
  21.                                                 if ( 'undefined' !== typeof scope.pluginSettings.generalSettings.order_by &&
  22.                                                         'undefined' !== typeof scope.pluginSettings.generalSettings.order_by.items &&
  23.                                                         scope.pluginSettings.generalSettings.order_by.items.length > 0 ) {
  24.  
  25.                                                                 dropdownTemplate = '<select data-class="lscf-order-by-dropdown lscf-sorting-by" class="lscf-sorting-custom-dropdown">';
  26.                                                                 dropdownTemplate += '<option value="0">' + scope.pluginSettings.generalSettings.writing.sort_by + '</option>';
  27.                                                                 scope.pluginSettings.generalSettings.order_by.items.forEach( function( item ){
  28.                                                                         dropdownTemplate += '<option value="'+item.id+'">' + item.name + '</option>';
  29.                                                                 });
  30.  
  31.                                                                 dropdownTemplate += '</select>';
  32.  
  33.                                                                 dropdownTemplate += '<div class="lscf-sorting-opt">';
  34.                                                                 dropdownTemplate += '<div class="lscf-sort-up"><span class="glyphicon glyphicon-triangle-top"></span></div>';
  35.                                                                 dropdownTemplate += '<div class="lscf-sort-down"><span class="glyphicon glyphicon-triangle-bottom"></span></div>';
  36.                                                                 dropdownTemplate += '</div>';
  37.  
  38.  
  39.                                                                 elem[0].innerHTML = dropdownTemplate;
  40.                                                                 lscfSortingCustomDropddown();
  41.  
  42.                                                                 if ( 'undefined' !== typeof capfData.settings.theme.posts_display_from &&
  43.                                                                 'undefined' !== capfData.settings.theme.posts_display_from.post_taxonomies.active_terms &&
  44.                                                                         capfData.settings.theme.posts_display_from.post_taxonomies.active_terms.length > 0 )
  45.                                                                 {
  46.  
  47.                                                                         scope.actionSettings.customFields.push({
  48.                                                                                 "ID":"default_filter",
  49.                                                                                 "type":"default_filter",
  50.                                                                                 "default_filter":{
  51.                                                                                         "post_taxonomies":capfData.settings.theme.posts_display_from.post_taxonomies
  52.                                                                                 }
  53.                                                                         });
  54.  
  55.                                                                 }
  56.  
  57.  
  58.                                                                 $j('.px-capf-wrapper').addClass('lscf-active-sort-by');
  59.  
  60.                                                                 $j('.lscf-sort-up').click(function(){
  61.                                                                        
  62.                                                                         $j(this).addClass('active');
  63.                                                                         $j('.lscf-sort-down').removeClass('active');
  64.  
  65.                                                                         var order = "DESC";    
  66.  
  67.                                                                         for ( var c = 0; c < scope.actionSettings.customFields.length; c++ ) {
  68.                                                
  69.                                                                                 field = scope.actionSettings.customFields[ c ];
  70.                                                                                
  71.                                                                                 if ( 'order-by' == field.ID ) {
  72.  
  73.                                                                                         scope.actionSettings.customFields[ c ].order = order;
  74.                                                                                        
  75.                                                                                         field_exists = true;
  76.                                                                                         break;
  77.                                                                                 }
  78.                                                                         }
  79.                                                                        
  80.                                                                         if ( false === field_exists ) {
  81.  
  82.                                                                                 query = {
  83.                                                                                         "ID":"order-by",
  84.                                                                                         "filter_as":null,
  85.                                                                                         "type":"order-posts",
  86.                                                                                         "order":order,
  87.                                                                                         "value":"post_date"
  88.                                                                                 };
  89.  
  90.                                                                                 scope.actionSettings.customFields.push( query );
  91.                                                                         }
  92.  
  93.                                                                         scope.loadMoreBtn.postsLoading = true;
  94.  
  95.                                                                         customFilterService.getPosts( scope.postType, scope.actionSettings.postsPerPage, 1, scope.actionSettings.customFields )
  96.                                                                                 .success(function( data ) {
  97.  
  98.                                                                                         scope.actionSettings.postsCount = data.postsCount;
  99.                                                                                         scope.actionSettings.pagesCount = data.pages;
  100.                                                                                         scope.actionSettings.pxCurrentPage = 2;
  101.  
  102.                                                                                         if ( scope.actionSettings.pxCurrentPage <= data.pages) scope.loadMoreBtn.morePostsAvailable = true;
  103.                                                                                         else scope.loadMoreBtn.morePostsAvailable = false;
  104.  
  105.                                                                                         scope.actionSettings.filterPostsTemplate = data.posts;
  106.                                                                                         scope.filterPostsTemplate.posts = data.posts;
  107.                                                                                         scope.loadMoreBtn.postsLoading = false;
  108.  
  109.                                                                                         scope.directiveInfo.afterPostsLoadCallback();
  110.  
  111.                                                                         });
  112.  
  113.                                                                 });
  114.  
  115.                                                                 $j('.lscf-sort-down').click(function(){
  116.                                                                        
  117.                                                                         $j(this).addClass('active');
  118.                                                                         $j('.lscf-sort-up').removeClass('active');
  119.                                                                        
  120.                                                                         var order = 'ASC';     
  121.  
  122.                                                                         for ( var c = 0; c < scope.actionSettings.customFields.length; c++ ) {
  123.                                                
  124.                                                                                 field = scope.actionSettings.customFields[ c ];
  125.                                                                                
  126.                                                                                 if ( 'order-by' == field.ID ) {
  127.  
  128.                                                                                         scope.actionSettings.customFields[ c ].order = order;
  129.                                                                                        
  130.                                                                                         field_exists = true;
  131.                                                                                         break;
  132.  
  133.                                                                                 }
  134.                                                                         }
  135.                                                                        
  136.                                                                         if ( false === field_exists ) {
  137.  
  138.                                                                                 query = {
  139.                                                                                         "ID":"order-by",
  140.                                                                                         "filter_as":null,
  141.                                                                                         "type":"order-posts",
  142.                                                                                         "order":order,
  143.                                                                                         "value":"post_date"
  144.                                                                                 };
  145.  
  146.                                                                                 scope.actionSettings.customFields.push( query );
  147.                                                                         }
  148.  
  149.                                                                         scope.loadMoreBtn.postsLoading = true;
  150.  
  151.                                                                         customFilterService.getPosts( scope.postType, scope.actionSettings.postsPerPage, 1, scope.actionSettings.customFields )
  152.                                                                                 .success(function( data ) {
  153.  
  154.                                                                                         scope.actionSettings.postsCount = data.postsCount;
  155.                                                                                         scope.actionSettings.pagesCount = data.pages;
  156.                                                                                         scope.actionSettings.pxCurrentPage = 2;
  157.  
  158.                                                                                         if ( scope.actionSettings.pxCurrentPage <= data.pages) scope.loadMoreBtn.morePostsAvailable = true;
  159.                                                                                         else scope.loadMoreBtn.morePostsAvailable = false;
  160.  
  161.                                                                                         scope.actionSettings.filterPostsTemplate = data.posts;
  162.                                                                                         scope.filterPostsTemplate.posts = data.posts;
  163.                                                                                         scope.loadMoreBtn.postsLoading = false;
  164.  
  165.                                                                                         scope.directiveInfo.afterPostsLoadCallback();
  166.  
  167.                                                                         });
  168.                                                                 });
  169.  
  170.                                                                 $j('.lscf-sorting-by .lscf-dropdown-option').each(function() {
  171.                                                                        
  172.                                                                         $j(this).click(function(){
  173.                                                                                
  174.                                                                                 orderByID = $j(this).attr('rel');      
  175.  
  176.                                                                                 if ( '0' == orderByID ) {
  177.  
  178.                                                                                         $j('.lscf-sorting-by').removeClass('active');
  179.  
  180.                                                                                         $j('.lscf-sort-down').removeClass('active');                                                                                   
  181.                                                                                         $j('.lscf-sort-up').removeClass('active');                                                                                     
  182.  
  183.                                                                                 } else {
  184.                                                                                         $j('.lscf-sorting-by').addClass('active');
  185.                                                                                 }
  186.                                                                                 for ( var c = 0; c < scope.actionSettings.customFields.length; c++ ) {
  187.                                                        
  188.                                                                                         field = scope.actionSettings.customFields[ c ];
  189.                                                                                        
  190.                                                                                         if ( 'order-by' == field.ID ) {
  191.  
  192.                                                                                                 scope.actionSettings.customFields[ c ].value = orderByID;
  193.                                                                                                
  194.                                                                                                 field_exists = true;
  195.  
  196.                                                                                                 break;
  197.  
  198.                                                                                         }
  199.                                                                                 }
  200.                                                                                
  201.                                                                                 if ( false === field_exists ) {
  202.  
  203.                                                                                         query = {
  204.                                                                                                 "ID":"order-by",
  205.                                                                                                 "filter_as":null,
  206.                                                                                                 "type":"order-posts",
  207.                                                                                                 "order":"ASC",
  208.                                                                                                 "value":orderByID
  209.                                                                                         };
  210.  
  211.                                                                                         scope.actionSettings.customFields.push( query );
  212.                                                                                 }
  213.  
  214.                                                                                 scope.loadMoreBtn.postsLoading = true;
  215.  
  216.                                                                                 customFilterService.getPosts( scope.postType, scope.actionSettings.postsPerPage, 1, scope.actionSettings.customFields )
  217.                                                                                         .success(function( data ) {
  218.  
  219.                                                                                                 scope.actionSettings.postsCount = data.postsCount;
  220.                                                                                                 scope.actionSettings.pagesCount = data.pages;
  221.                                                                                                 scope.actionSettings.pxCurrentPage = 2;
  222.  
  223.                                                                                                 if ( scope.actionSettings.pxCurrentPage <= data.pages) scope.loadMoreBtn.morePostsAvailable = true;
  224.                                                                                                 else scope.loadMoreBtn.morePostsAvailable = false;
  225.  
  226.                                                                                                 scope.actionSettings.filterPostsTemplate = data.posts;
  227.                                                                                                 scope.filterPostsTemplate.posts = data.posts;
  228.                                                                                                 scope.loadMoreBtn.postsLoading = false;
  229.  
  230.                                                                                                 scope.directiveInfo.afterPostsLoadCallback();
  231.  
  232.                                                                                 });
  233.  
  234.                                                                         });
  235.                                                                 });
  236.                                                         }
  237.                                         });
  238.                    }    
  239.         };
  240.     });
  241.  
  242. function lscfSortingCustomDropddown() {
  243.        
  244.         var $j = jQuery;
  245.  
  246.         $j('.lscf-sorting-custom-dropdown').each(function(){
  247.                 var dataClass = $j(this).attr('data-class');
  248.                 var $this=$j(this),
  249.                         numberOfOptions=$j(this).children('option').length;
  250.                 $this.addClass('s-hidden');
  251.                 $this.wrap('<div class="select '+dataClass+'"></div>');
  252.                 $this.after('<div class="styledSelect"></div>');
  253.                 var $styledSelect=$this.next('div.styledSelect');
  254.                 $styledSelect.text($this.children('option').eq(0).text());
  255.                 var $list=$j('<div />',{'class':'options'}).insertAfter($styledSelect);
  256.  
  257.                 for ( var i=0; i < numberOfOptions; i++ ) {
  258.                        
  259.                         var listClassName = ( 0 === i ? 'lscf-dropdown-option pxselect-hidden-list' : 'lscf-dropdown-option' );
  260.                
  261.                         $j('<div />',{
  262.                                 text:$this.children('option').eq(i).text(),
  263.                                 rel:$this.children('option').eq(i).val(),
  264.                                 'class':listClassName
  265.                         }).appendTo( $list );
  266.                 }
  267.                 var $listItems = $list.children('.lscf-dropdown-option');
  268.                 $styledSelect.click(function(e){
  269.                         e.stopPropagation();
  270.                         $j('div.styledSelect.active').each(function(){
  271.  
  272.                                 $j(this).removeClass('active').next('div.options').hide();
  273.                         });
  274.  
  275.                         $j(this).toggleClass('active').next('div.options').toggle();
  276.                         $j(this).toggleClass('active').next('div.options').customScrollbar();
  277.                 });
  278.  
  279.                 $listItems.click(function(e){
  280.                         $listItems.removeClass('pxselect-hidden-list');
  281.                         $j(this).addClass('pxselect-hidden-list');
  282.                         e.stopPropagation();
  283.                         $styledSelect.text($j(this).text()).removeClass('active');
  284.                         $this.val($j(this).attr('rel'));
  285.                         $list.hide();
  286.                 });
  287.                
  288.                 $j(document).click(function(){
  289.                         $styledSelect.removeClass('active');
  290.                         $list.hide();
  291.                 });
  292.  
  293.         });
  294. }

Raw Paste


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