JAVASCRIPT   84
sidebar customizer
Guest on 9th May 2022 01:55:31 AM


  1. angular.module(angAppName)
  2.     .directive('sidebarLiveCustomizer', function(customFilterService){
  3.        
  4.         return{
  5.            
  6.             restrict:"AE",
  7.             require: "?ngModel",
  8.             scope:true,
  9.             bindToController: true,
  10.             controllerAs: 'vm',
  11.                         templateUrl: capfData.plugin_url + 'app/views/sidebar-live-customizer.html',
  12.             link:function( scope, elem, attrs, ngModel ) {
  13.  
  14.                                 scope.$watch('pluginSettings.custom_templates', function(newVal, oldVal){
  15.                                        
  16.                                         if ( 'undefined' !== typeof scope.pluginSettings.filterSettings.theme.custom_template &&
  17.                                                  'undefined' !== typeof scope.pluginSettings.custom_templates &&
  18.                                                  'custom-theme' == scope.pluginSettings.filterSettings.theme.display )
  19.                                         {
  20.                                                 for ( var i=0; i < scope.pluginSettings.custom_templates.length; i++ ) {
  21.                                                         if ( scope.pluginSettings.filterSettings.theme.custom_template.slug == scope.pluginSettings.custom_templates[i].slug ) {
  22.                                                                 scope.pluginSettings.custom_templates[i].checked = true;
  23.                                                         } else {
  24.                                                                 scope.pluginSettings.custom_templates[i].checked = false;
  25.                                                         }
  26.                                                 }
  27.                                         }
  28.                                 });
  29.                                
  30.  
  31.                                 var liveCustomizer = new lscfSidebarCustomizator(),
  32.                                         filterSettings,
  33.                                         wrapperGeneralClassNames;
  34.  
  35.                                 setTimeout( function(){
  36.                                        
  37.                                         liveCustomizer.init();
  38.  
  39.                                         liveCustomizer.initColorpicker(function(data){
  40.                                                 liveCustomizer.generateDynamicCssColor( data );
  41.  
  42.                                                 scope.$apply(function(){
  43.                                                         scope.pluginSettings.filterSettings['main-color'] = data.hex;
  44.                                                         scope.pluginSettings.filterSettings['main-color-rgb'] = data.rgb;
  45.                                                        
  46.                                                         filterSettings = angular.toJson( scope.pluginSettings );
  47.                                                         liveCustomizer.saveSettings( filterSettings );
  48.                                                        
  49.                                                 });
  50.                                         });
  51.  
  52.                                         liveCustomizer.saveExtraOptions( function(data){
  53.  
  54.                                                 scope.$apply(function(){
  55.  
  56.  
  57.                                                         switch ( data.type ) {
  58.  
  59.                                                                 case 'taxonomies-listing':
  60.  
  61.                                                                                 scope.pluginSettings.filterSettings.theme.posts_display_from = data.data;
  62.  
  63.                                                                         break;
  64.  
  65.                                                                 case 'settings-page':
  66.  
  67.                                                                                 scope.pluginSettings.generalSettings.run_shortcodes = liveCustomizer.templateData.settings.run_shortcodes.value;
  68.                                                                                 scope.pluginSettings.generalSettings.disable_empty_option_on_filtering = liveCustomizer.templateData.settings.disable_empty_option_on_filtering.value;
  69.  
  70.                                                                                 scope.pluginSettings.generalSettings.infinite_scrolling = liveCustomizer.templateData.settings.infinite_scrolling.value;
  71.  
  72.                                                                                 scope.pluginSettings.generalSettings.checkboxes_conditional_logic = liveCustomizer.templateData.settings.checkboxes_conditional_logic.value;
  73.                                                                                
  74.                                                                                 scope.pluginSettings.generalSettings.order_by = liveCustomizer.templateData.settings.order_by;
  75.                                                                                 scope.pluginSettings.generalSettings.default_order_by = liveCustomizer.templateData.settings.default_order_by;
  76.  
  77.                                                                         break;
  78.                                                         }
  79.  
  80.  
  81.                                                         filterSettings = angular.toJson( scope.pluginSettings);
  82.  
  83.                                                         liveCustomizer.saveSettings( filterSettings );
  84.  
  85.                                                 });
  86.                                         });
  87.  
  88.                                         liveCustomizer.onFormAction(function(data){
  89.  
  90.                                                 switch ( data.dataType ) {
  91.  
  92.                                                         case 'order-fields':
  93.                                                                         scope.$apply(function(){
  94.                                                                                 scope.actionSettings.initFieldsDraggable = data.fieldValue;
  95.                                                                         });
  96.  
  97.                                                                 break;
  98.                                                        
  99.                                                         case 'sidebar-position':                                                               
  100.  
  101.                                                                 scope.$apply(function(){
  102.  
  103.                                                                         scope.pluginSettings.filterSettings.theme.sidebar.position = data.fieldValue;
  104.                                                                         scope.actionSettings.initSidebar = true;
  105.                                                                        
  106.                                                                         wrapperGeneralClassNames = scope.makeWrapperClassName();
  107.  
  108.                                                                         scope.pluginSettings.className.sidebar = wrapperGeneralClassNames.sidebar;
  109.                                                                         scope.pluginSettings.className.posts_theme = wrapperGeneralClassNames.posts_theme;
  110.  
  111.                                                                 });
  112.                                                                
  113.                                                                
  114.                                                                 break;
  115.  
  116.                                                         case 'theme-style':
  117.                                                                
  118.                                                                 scope.$apply(function(){
  119.  
  120.                                                                         scope.pluginSettings.filterSettings.theme.display = data.fieldValue;
  121.  
  122.                                                                         if ( 'custom-theme' == data.fieldValue ) {
  123.                                                                                
  124.                                                                                 var activeCustomThemeIndex = parseInt( data.custom_theme_active_index );
  125.  
  126.                                                                                 if ( 'undefined' === typeof scope.pluginSettings.filterSettings.theme.custom_template ) {
  127.                                                                                         scope.pluginSettings.filterSettings.theme.custom_template = {};
  128.                                                                                 }
  129.  
  130.                                                                                 scope.pluginSettings.filterSettings.theme.custom_template.url = scope.pluginSettings.custom_templates[ activeCustomThemeIndex ].url;
  131.                                                                                 scope.pluginSettings.filterSettings.theme.custom_template.name = scope.pluginSettings.custom_templates[ activeCustomThemeIndex ].name;
  132.                                                                                 scope.pluginSettings.filterSettings.theme.custom_template.slug = scope.pluginSettings.custom_templates[ activeCustomThemeIndex ].slug;
  133.  
  134.                                                                         }
  135.  
  136.                                                                 });
  137.  
  138.                                                                 break;
  139.  
  140.                                                         case 'columns-number':
  141.                                                                        
  142.                                                                         var columnsNumber = parseInt( data.fieldValue );
  143.                                                                        
  144.                                                                         scope.$apply(function(){
  145.                                                                                 scope.pluginSettings.filterSettings.theme.columns = columnsNumber;
  146.                                                                                 scope.pluginSettings.className.sidebar = ( columnsNumber > 3 ? 'col-sm-2 col-md-2 col-lg-2' : 'col-sm-3 col-md-3 col-lg-3' );
  147.                                                                                 scope.pluginSettings.className.posts_theme = ( columnsNumber > 3 ? 'col-sm-10 col-md-10 col-lg-10' : 'col-sm-9 col-md-9 col-lg-9' );
  148.                                                                         });
  149.                                                                        
  150.                                                                
  151.                                                                 break;
  152.  
  153.                                                         case 'view-changer':
  154.                                                                
  155.                                                                 switch( data.fieldValue ) {
  156.                                                                        
  157.                                                                         case 'full':
  158.                                                                                
  159.                                                                                 scope.$apply(function(){
  160.                                                                                         scope.pluginSettings.filterSettings.theme.viewchanger.grid = 1;
  161.                                                                                         scope.pluginSettings.filterSettings.theme.viewchanger.list = 1;
  162.                                                                                 });
  163.  
  164.                                                                                 jQuery( '.viewMode' ).fadeIn();
  165.                                                                                 jQuery( '.lscf-posts-block' ).addClass('block-view');
  166.                                                                                 jQuery( '.viewMode > div' ).removeClass('active');
  167.                                                                                 jQuery( '.viewMode #blockView' ).addClass('active');
  168.  
  169.                                                                                 break;
  170.  
  171.                                                                         case 'list':
  172.                                                                                
  173.                                                                                 scope.$apply(function(){
  174.                                                                                         scope.pluginSettings.filterSettings.theme.viewchanger.grid = 0;
  175.                                                                                         scope.pluginSettings.filterSettings.theme.viewchanger.list = 1;
  176.                                                                                 });
  177.  
  178.                                                                                 jQuery( '.viewMode' ).hide();
  179.                                                                                 jQuery( '.lscf-posts-block' ).removeClass('block-view');
  180.  
  181.                                                                                 break;
  182.  
  183.                                                                         case 'grid':
  184.  
  185.                                                                                 scope.$apply(function(){
  186.                                                                                         scope.pluginSettings.filterSettings.theme.viewchanger.grid = 1;
  187.                                                                                         scope.pluginSettings.filterSettings.theme.viewchanger.list = 0;
  188.                                                                                 });
  189.  
  190.                                                                                 jQuery( '.viewMode' ).hide();
  191.                                                                                 jQuery( '.lscf-posts-block' ).addClass('block-view');
  192.  
  193.                                                                                 break;
  194.                                                                 }
  195.  
  196.                                                                 break;
  197.  
  198.                                                         case 'link-type':
  199.  
  200.                                                                 scope.$apply(function(){
  201.                                                                         scope.pluginSettings.filterSettings.theme.link_type = data.fieldValue;
  202.                                                                         scope.actionSettings.initPostTheme = true;
  203.                                                                 });
  204.  
  205.                                                                 break;
  206.  
  207.                                                         case 'posts-per-page':
  208.  
  209.                                                                 scope.$apply(function(){
  210.                                                                         scope.actionSettings.postsPerPage = data.fieldValue;
  211.                                                                         scope.pluginSettings.filterSettings['posts-per-page'] = data.fieldValue;
  212.                                                                 });
  213.  
  214.                                                                 break;
  215.  
  216.                                                 }
  217.  
  218.                                                 filterSettings = angular.toJson( scope.pluginSettings );
  219.  
  220.                                                 liveCustomizer.saveSettings( filterSettings );
  221.  
  222.                                         });
  223.  
  224.  
  225.                                 }, 800 );
  226.  
  227.             }
  228.            
  229.         };
  230.        
  231.     });
  232.  
  233.  
  234. function lscfSidebarCustomizator(){
  235.        
  236.         var $j = jQuery,
  237.                 self = this;
  238.        
  239.         this.ajaxRequest = new lscfGeneralAjaxRequests();
  240.  
  241.         this.templateData = {
  242.                 "active_terms":[],
  243.                 "settings":{
  244.                         "run_shortcodes":{
  245.                                 "key":"run_shortcodes",
  246.                                 "value":( 'undefined' !== typeof capfData.options.run_shortcodes ? capfData.options.run_shortcodes : 0 )
  247.                         },
  248.                         "disable_empty_option_on_filtering":{
  249.                                 "key":"disable_empty_option_on_filtering",
  250.                                 "value":( 'undefined' !== typeof capfData.options.disable_empty_option_on_filtering ? capfData.options.disable_empty_option_on_filtering : 0 )
  251.                         },
  252.                         "infinite_scrolling":{
  253.                                 "key":"infinite_scrolling",
  254.                                 "value":( 'undefined' !== typeof capfData.options.infinite_scrolling ? capfData.options.infinite_scrolling : 0 )
  255.                         },
  256.                         "checkboxes_conditional_logic":{
  257.                                 "key":"checkboxes_conditional_logic",
  258.                                 "value":( 'undefined' !== typeof capfData.options.checkboxes_conditional_logic ? capfData.options.checkboxes_conditional_logic : 'or' )
  259.                         },
  260.  
  261.                         "orderable_list":[
  262.                                 {
  263.                                         "id":"post_title",
  264.                                         "name":( 'undefined' !== typeof capfData.options.writing.title ? capfData.options.writing.title : 'Title' )
  265.                                 },
  266.                                 {
  267.                                         "id":"post_date",
  268.                                         "name":( 'undefined' !== typeof capfData.options.writing.date ? capfData.options.writing.date : 'Date' )
  269.                                 },
  270.                                 {
  271.                                         "id":"id",
  272.                                         "name":'ID'
  273.                                 },
  274.                                 {
  275.                                         "id":"menu_order",
  276.                                         "name":'Menu Order'
  277.                                 },
  278.                         ],
  279.  
  280.                         "order_by":{
  281.                                 "items":[]
  282.                         },
  283.                         "default_order_by":{
  284.                                 "key":"default_order_by",
  285.                                 "value":( 'undefined' !== typeof capfData.options.default_order_by ? capfData.options.default_order_by.value : 'post_date' ),
  286.                                 "order_as":( 'undefined' !== typeof capfData.options.default_order_by ? capfData.options.default_order_by.order_as : 'asc' )
  287.                         }
  288.                 },
  289.  
  290.                 "post_taxonomies":{
  291.                         "items":[],
  292.                         "set_tax_term_as_active":function(){
  293.                                 return function( term_id, render ) {
  294.                                         if ( self.templateData.active_terms.length > 0 && -1 !== self.templateData.active_terms.indexOf( render( term_id ) ) ) {
  295.                                                 return 'checked="checked"';
  296.                                         }
  297.                                 };
  298.                         },
  299.                 },
  300.  
  301.                 "post_custom_fields":{
  302.                         "items":[]
  303.                 },
  304.                
  305.  
  306.                 "set_settings_option_as_active":function(){
  307.                         return function( key, render ) {
  308.  
  309.                                 if ( self.templateData.settings[ render( key ) ].value == 1 ) {
  310.                                         return 'checked="checked"';
  311.                                 }
  312.  
  313.                         };
  314.                 },
  315.                 "set_as_active_if_match":function(){
  316.                         return function( dataVal, render ){
  317.                        
  318.                                 var values = render( dataVal ).split('__pxlt__');
  319.  
  320.                                 if ( values[0].trim() == values[1].trim() ) {
  321.                                         return "checked";
  322.                                 }
  323.                         };
  324.                 },
  325.                 "set_order_fields_as_active":function(){
  326.                         return function ( key, render ) {
  327.  
  328.                                 for ( var ls = 0; ls < self.templateData.settings.order_by.items.length; ls++  ) {
  329.  
  330.                                         if ( self.templateData.settings.order_by.items[ ls ].id == render( key ) ) {
  331.  
  332.                                                 return 'checked="checked"';
  333.                                         }
  334.                                 }
  335.                         };
  336.                 }
  337.         };
  338.  
  339.         this.templates = {};
  340.  
  341.         this.templates.loadTaxonomies = function( templateData, callback ) {
  342.  
  343.                 var url = capfData.plugin_url + 'assets/js/templates/live-customizer/tax-template.html';
  344.  
  345.                 $j.get( url, function( template ) {
  346.  
  347.                         var renderedTemplate = Mustache.render( $j( template ).filter('#template-tax').html(), templateData );
  348.  
  349.                         callback(renderedTemplate);
  350.  
  351.                 });
  352.  
  353.         };
  354.  
  355.         this.templates.loadTemplate = function( templateData, templateUrl, callback ) {
  356.  
  357.                 $j.get( templateUrl, function( template ) {
  358.  
  359.                         var renderedTemplate = Mustache.render( $j( template ).filter('#template-tax').html(), templateData );
  360.  
  361.                         callback( renderedTemplate );
  362.  
  363.                 });
  364.         };
  365.  
  366.         this.serializeExtraOptions = function(){
  367.                
  368.                 var containerType = $j('.lscf-extrasidebar-template').attr('data-fields-type'),
  369.                         data = {
  370.                                 "type" : containerType,
  371.                                 "data" :{}
  372.                         };
  373.  
  374.                 switch ( containerType ) {
  375.                        
  376.                         case 'taxonomies-listing':
  377.  
  378.                                 data.data.post_taxonomies = {};
  379.  
  380.                                 var slug, value, name;
  381.  
  382.                                 self.templateData.active_terms = [];
  383.  
  384.                                 $j('.lscf-taxonomies-block').each(function(){
  385.  
  386.                                         $j(this).find('.px-checkbox:checked').each(function(){
  387.                                                
  388.                                                 slug = $j(this).attr('data-taxonomy');
  389.                                        
  390.                                                 if ( 'undefined' === typeof data.data.post_taxonomies[slug] ) {
  391.                                                         data.data.post_taxonomies[slug] = {};
  392.                                                         data.data.post_taxonomies[slug].ID = slug;
  393.                                                         data.data.post_taxonomies[slug].group_type= 'taxonomies';
  394.                                                         data.data.post_taxonomies[slug].tax = {
  395.                                                                 "terms":[]
  396.                                                         };
  397.  
  398.                                                 }
  399.  
  400.                                                 value = parseInt( $j(this).val().split("!#")[0] );
  401.                                                 name = $j(this).val().split("!#")[1];
  402.  
  403.                                                 data.data.post_taxonomies[slug].tax.terms.push({
  404.                                                         "data":{
  405.                                                                 "name":name,
  406.                                                                 "value":value
  407.                                                         }
  408.                                                 });
  409.  
  410.                                                 self.templateData.active_terms.push(value+'-'+slug);
  411.  
  412.                                         });
  413.                                        
  414.  
  415.                                 });
  416.  
  417.                                 data.data.post_taxonomies.active_terms = self.templateData.active_terms;
  418.  
  419.                                 break;
  420.  
  421.                         case 'settings-page':
  422.  
  423.                                 data.data.settings = {};
  424.                                 self.templateData.settings.order_by.items = [];
  425.                                 $j('.lscf-fronteditor-settings input[type="checkbox"]').each(function(){
  426.                                        
  427.                                         var key = $j(this).attr('data-key');
  428.  
  429.                                         if ( ! $j(this).hasClass( 'has-multple-values' ) ) {
  430.  
  431.                                                 self.templateData.settings[ key ].value = ( $j(this).prop("checked") ? 1 : 0 );
  432.  
  433.                                                 data.data.settings[ key ] = self.templateData.settings[ key ];
  434.  
  435.                                         } else {
  436.                                                
  437.                                                 if ( $j(this).prop( "checked" ) ) {
  438.                                                        
  439.                                                         self.templateData.settings[ key ].items.push({
  440.                                                                 "id": $j(this).val(),
  441.                                                                 "name":$j(this).attr('data-name')
  442.                                                         });
  443.                                                 }
  444.  
  445.                                                 data.data.settings[ key ] = self.templateData.settings[ key ];
  446.                                         }
  447.  
  448.                                 });
  449.  
  450.                                 $j('.lscf-fronteditor-settings input[type="radio"]').each(function(){
  451.                                        
  452.                                         var key = $j(this).attr('data-key'),
  453.                                                 customValueName = $j(this).attr('data-value');
  454.  
  455.                                         if ( $j(this).is( ":checked" ) ){
  456.  
  457.                                                 if ( 'undefined' !== typeof customValueName ) {
  458.                                                         self.templateData.settings[ key ][ customValueName ] = $j( this ).val();
  459.                                                 } else {
  460.                                                         self.templateData.settings[ key ].value = $j( this ).val();
  461.                                                 }
  462.  
  463.                                                 data.data.settings[ key ] = self.templateData.settings[ key ];
  464.  
  465.                                         }
  466.  
  467.                                 });
  468.  
  469.                                 break;
  470.                 }
  471.                
  472.  
  473.  
  474.                 return data;
  475.  
  476.         };
  477.  
  478.  
  479.         this.init = function(){
  480.        
  481.                 if ( 'undefined' !== typeof capfData.options.order_by && 'undefined' !== typeof capfData.options.order_by.items ) {
  482.                        
  483.                         self.templateData.settings.order_by.items = capfData.options.order_by.items;
  484.  
  485.                 }
  486.  
  487.                 self.ajaxRequest.getCustomFieldsByPostType( capfData.postType, 'all', function(data){
  488.                         if (typeof data.success !== 'undefined' && data.success == 1) {
  489.                                
  490.                                 var customFields = data.data.data.fields;
  491.  
  492.                                 customFields.forEach(function(customField) {
  493.                                         var custom_field = {
  494.                                                 "id":customField.field_form_id,
  495.                                                 "name":customField.name
  496.                                         };
  497.  
  498.                                         self.templateData.post_custom_fields.items.push( custom_field );
  499.                                         self.templateData.settings.orderable_list.push( custom_field );
  500.                                 });
  501.  
  502.                         }              
  503.                 });
  504.  
  505.  
  506.                 if ( 'undefined' !== typeof capfData.settings.theme.posts_display_from &&
  507.                         'undefined' !== typeof capfData.settings.theme.posts_display_from.post_taxonomies &&
  508.                         'undefined' !== typeof capfData.settings.theme.posts_display_from.post_taxonomies.active_terms )
  509.                 {
  510.  
  511.                         self.templateData.active_terms = capfData.settings.theme.posts_display_from.post_taxonomies.active_terms;
  512.                 }
  513.  
  514.                 self.get_post_taxonomies_and_terms(
  515.                         function(data){
  516.                                 self.templateData.post_taxonomies.items = data;
  517.                 });
  518.  
  519.  
  520.                 $j('#lscf-expand-sidebar-extra-options, .lscf-open-extra-sidebar').click(function(){
  521.                        
  522.                         $j('.lscf-close-customizer').addClass('lscf-hide');
  523.                         $j('.lscf-sidebar-extra-container').addClass('active');
  524.  
  525.                         var container_type = $j(this).closest('.lscf-sidebar-option').attr('data-type');
  526.  
  527.                         self.loadExtraSidebarContent( container_type );
  528.  
  529.                 });
  530.  
  531.        
  532.                 $j('.lscf-open-customizer').click(function(){
  533.                         $j(this).addClass('deactivate-animations');
  534.                         $j('.lscf-sidebar-live-customizer').addClass('active');
  535.                         $j('#lscf-posts-wrapper').addClass('translate');
  536.                 });
  537.                 $j('.lscf-close-customizer').click(function(){
  538.                         $j('.lscf-sidebar-live-customizer').removeClass('active');
  539.  
  540.                         $j('#lscf-posts-wrapper').removeClass('translate');
  541.                 });
  542.  
  543.  
  544.                 self.initCustomDropdown();
  545.                
  546.  
  547.                 var activeTheme = $j('.lscf-theme-list').find('input[type="radio"]:checked').val();
  548.                 self.initThemeOptions( activeTheme );
  549.  
  550.         };
  551.  
  552.         this.loadExtraSidebarContent = function( content_type ){
  553.  
  554.  
  555.                 switch ( content_type ) {
  556.  
  557.                         case 'show-from-categories':
  558.                                
  559.                                 self.templates.loadTaxonomies( self.templateData.post_taxonomies, function(data){
  560.  
  561.                                         $j('.lscf-sidebar-extra-container-wrapper').html( data );
  562.                                         $j('.lscf-sidebar-extra-container-wrapper').customScrollbar();
  563.  
  564.                                 });
  565.  
  566.                                 break;
  567.  
  568.                         case 'filter-settings':
  569.  
  570.                                 var url = capfData.plugin_url + 'assets/js/templates/live-customizer/settings-template.html';
  571.                                
  572.                                 self.templates.loadTemplate( self.templateData, url, function( data ){
  573.                                        
  574.                                         $j('.lscf-sidebar-extra-container-wrapper').html( data );
  575.                                         $j('.lscf-sidebar-extra-container-wrapper').customScrollbar();
  576.  
  577.                                 });
  578.  
  579.                                 break;
  580.  
  581.                 }      
  582.  
  583.         };
  584.  
  585.         this.saveExtraOptions = function( callback ){
  586.  
  587.                 $j('#save-and-close-extra-options').click(function() {
  588.  
  589.                         $j('.lscf-close-customizer').removeClass('lscf-hide');
  590.                         $j('.lscf-sidebar-extra-container').removeClass('active');     
  591.                        
  592.                         var formData = self.serializeExtraOptions();
  593.  
  594.                         callback( formData );
  595.  
  596.                 });    
  597.  
  598.         };
  599.  
  600.         this.initColorpicker = function( colorpickerCallback ){
  601.                
  602.                 var colorPickerToggled = false;
  603.  
  604.                 $j('.lscf-colorpicker').colorPicker({
  605.                         renderCallback:function(elem, toggle){
  606.                                 if ( true === toggle ) {
  607.                                         colorPickerToggled = false;
  608.                                 }
  609.                                 if ( false === toggle && false === colorPickerToggled ) {
  610.                                        
  611.                                         colorPickerToggled = true;
  612.                                         var rgbColor = elem[0].style.backgroundColor.replace(/rgb\(|\)/g, ''),
  613.                                         color = elem[0].value;
  614.  
  615.                                         colorpickerCallback({
  616.                                                 "hex":color,
  617.                                                 "rgb":rgbColor
  618.                                         });
  619.  
  620.                                 }
  621.                                
  622.                         }
  623.                 });
  624.         };
  625.  
  626.         this.generateDynamicCssColor = function( color ){
  627.                
  628.                 $j.ajax({
  629.                         type:"POST",
  630.                         url:capfData.ajax_url,
  631.                         data:{
  632.                                 action:"px-plugin-ajax",
  633.                                 section:"generate-theme-color-style",
  634.                                 color:color
  635.                         },
  636.                         success:function(data){
  637.                                 var dynamicStyle = document.getElementById("px_base-inline-css");
  638.                                 dynamicStyle.innerHTML = data;
  639.                         },
  640.                         dataType:"html"
  641.                 });
  642.         };
  643.  
  644.         this.get_post_taxonomies_and_terms = function( callback ) {
  645.  
  646.                 $j.ajax({
  647.                         type:"POST",
  648.                         url:capfData.ajax_url,
  649.                         data:{
  650.                                 action:"lscf-administrator-ajax",
  651.                                 section:"get_taxonomies_and_terms",
  652.                                 post_type:capfData.postType
  653.                         },
  654.                         success:function(data){
  655.                                 callback( data );
  656.                         },
  657.                         dataType:"json"
  658.                 });
  659.  
  660.         };
  661.  
  662.         this.saveSettings = function( settings ) {
  663.  
  664.                 $j.ajax({
  665.                         type:"POST",
  666.                         url:capfData.ajax_url,
  667.                         data:{
  668.                                 action:"lscf-administrator-ajax",
  669.                                 section:"save-filter-settings",
  670.                                 filter_id:capfData.ID,
  671.                                 settings:settings
  672.                         },
  673.                         success:function(data){
  674.  
  675.                         },
  676.                         dataType:"html"
  677.                 });
  678.         };
  679.  
  680.         this.onFormAction = function( callback ){
  681.  
  682.                 var fieldType,
  683.                         dataType,
  684.                         fieldValue,
  685.                         data = {},
  686.                         customThemeIndex;
  687.  
  688.  
  689.                 $j('.lscf-sidebar-option').each(function(){
  690.                        
  691.                         fieldType = $j(this).attr('data-field-type');
  692.  
  693.                         switch ( fieldType ) {
  694.  
  695.                                 case 'dropdown':
  696.  
  697.                                         $j(this).find('.options li ').each(function(){
  698.                                                
  699.                                                 $j(this).click(function(){
  700.  
  701.                                                         fieldValue = $j(this).attr('rel');
  702.                                                         dataType = $j(this).closest('.lscf-sidebar-option').attr('data-type');
  703.  
  704.                                                         data = {
  705.                                                                 "fieldType":fieldType,
  706.                                                                 "dataType":dataType,
  707.                                                                 "fieldValue":fieldValue
  708.                                                         };
  709.  
  710.                                                         callback( data );
  711.  
  712.                                                 });
  713.  
  714.                                         });
  715.  
  716.                                         break;
  717.  
  718.                                 case 'checkbox':
  719.                                        
  720.                                         $j(this).find('#lscf-fields-ordering').click(function(){
  721.                                                
  722.                                                 var parent = $j(this).closest('.lscf-check-btn');
  723.                                                
  724.                                                 fieldValue = ( 'undefined' !== typeof parent.find('input[type="checkbox"]:checked').val() ? parseInt( parent.find('input[type="checkbox"]:checked').val() ) : 0 );
  725.                                                 dataType = $j(this).closest('.lscf-sidebar-option').attr('data-type');
  726.  
  727.                                                 data = {
  728.                                                         "fieldType":fieldType,
  729.                                                         "dataType":dataType,
  730.                                                         "fieldValue":!fieldValue
  731.                                                 };
  732.  
  733.                                                 callback( data );
  734.  
  735.                                         });
  736.  
  737.                                         break;
  738.  
  739.  
  740.                                 case 'radiobutton':
  741.  
  742.                                         $j(this).on('click', '.lscf-live-customizer-radiobutton-label', function(){
  743.  
  744.                                                         fieldValue = $j(this).attr('data-value');
  745.  
  746.                                                         self.initThemeOptions( fieldValue );
  747.  
  748.                                                         if ( 'custom-theme' == fieldValue  ) {
  749.                                                                 customThemeIndex = $j(this).attr('data-index');
  750.                                                         }
  751.  
  752.                                                         dataType = 'theme-style';
  753.  
  754.                                                         data = {
  755.                                                                 "fieldType":fieldType,
  756.                                                                 "dataType":dataType,
  757.                                                                 "fieldValue":fieldValue,
  758.                                                                 "custom_theme_active_index":customThemeIndex
  759.                                                         };
  760.  
  761.                                                         callback( data );
  762.                                         });
  763.  
  764.                                         break;
  765.  
  766.                                 case 'number':
  767.                                        
  768.                                         $j(this).find('input[type="number"]').blur(function(){
  769.  
  770.                                                 fieldValue = ('NaN' !== parseInt( $j(this).val() ) ? parseInt( $j(this).val() ) : 15 );
  771.                                                 dataType = $j(this).closest('.lscf-sidebar-option').attr('data-type');
  772.                                                
  773.                                                 data = {
  774.                                                         "fieldType":fieldType,
  775.                                                         "dataType":dataType,
  776.                                                         "fieldValue":fieldValue
  777.                                                 };
  778.  
  779.                                                 callback( data );
  780.                                         });
  781.                                        
  782.                                         break;
  783.  
  784.                         }
  785.  
  786.                 });
  787.  
  788.         };
  789.  
  790.         this.initThemeOptions = function( theme ) {
  791.                        
  792.                         $j('.lscf-optional-option').hide();
  793.  
  794.                         switch ( theme ) {
  795.                                
  796.                                 case 'default':
  797.  
  798.                                         $j('.lscf-optional-grid').fadeIn();
  799.                                         $j('.lscf-optional-viewchanger').fadeIn();
  800.  
  801.                                         break;
  802.                                
  803.                                 case 'accordion':
  804.                                        
  805.                                         $j('.lscf-optional-linktype').fadeIn();
  806.                                        
  807.                                         break;
  808.  
  809.                                 case 'portrait':
  810.                                        
  811.                                         $j('.lscf-optional-grid').fadeIn();
  812.                                        
  813.                                         break;
  814.  
  815.                                
  816.                                 case 'woocommerce-grid':
  817.                                 case 'basic-grid':
  818.                                        
  819.                                         $j('.lscf-optional-grid').fadeIn();
  820.  
  821.                                         break;
  822.                         }
  823.  
  824.         };
  825.  
  826.         this.initCustomDropdown = function(){
  827.                
  828.                 $j('.lscf-custom-select-dropwdown').each(function(){
  829.                         var dataClass=$j(this).attr('data-class');
  830.                         var $this=$j(this),
  831.                                 numberOfOptions=$j(this).children('option').length;
  832.                         $this.addClass('s-hidden');
  833.                         $this.wrap('<div class="select '+dataClass+'"></div>');
  834.                         $this.after('<div class="styledSelect"></div>');
  835.                         var $styledSelect=$this.next('div.styledSelect'),
  836.                                 optionValue,
  837.                                 selectedOptionIndex;
  838.  
  839.                         $this.find('option').each(function(index){
  840.                                
  841.                                 if ( $j(this).is(':selected') ) {
  842.                                         selectedOptionIndex = index;
  843.                                 }
  844.                         });
  845.  
  846.                         optionValue = ( $this.find('option:selected') ?  $this.find('option:selected').text() : $this.children('option').eq(0).text() );
  847.  
  848.                         $styledSelect.text( optionValue );
  849.                         var $list=$j('<ul />',{'class':'options'}).insertAfter($styledSelect);
  850.                         for ( var i=0; i<numberOfOptions; i++ ) {
  851.                                
  852.                                 var listClassName = ( selectedOptionIndex == i ? 'pxselect-hidden-list' : '' );
  853.                                
  854.                                 $j('<li />',{
  855.                                         text:$this.children('option').eq(i).text(),
  856.                                         rel:$this.children('option').eq(i).val(),
  857.                                         class:listClassName
  858.                                 }).appendTo( $list );
  859.                         }
  860.                         var $listItems = $list.children('li');
  861.                         $styledSelect.click(function(e){
  862.                                 e.stopPropagation();
  863.                                 $j('div.styledSelect.active').each(function(){
  864.                                         $j(this).removeClass('active').next('ul.options').hide();
  865.                                 });
  866.                                 $j(this).toggleClass('active').next('ul.options').toggle();
  867.                         });
  868.                         $listItems.click(function(e){
  869.                                 $listItems.removeClass('pxselect-hidden-list');
  870.                                 $j(this).addClass('pxselect-hidden-list');
  871.                                 e.stopPropagation();
  872.                                 $styledSelect.text($j(this).text()).removeClass('active');
  873.                                 $this.val($j(this).attr('rel'));
  874.                                 $list.hide();
  875.                         });
  876.                         $j(document).click(function(){
  877.                                 $styledSelect.removeClass('active');
  878.                                 $list.hide();
  879.                         });
  880.                 });
  881.  
  882.         };
  883.  
  884. }
  885.  
  886. function lscfGeneralAjaxRequests() {
  887.         var self = this,
  888.                 $j = jQuery,
  889.                 action = "px-plugin-ajax",
  890.                 adminAction = "lscf-administrator-ajax";
  891.        
  892.  
  893.         this.getCustomFieldsByPostType = function( postType, fieldType, callback ) {
  894.  
  895.                 $j.ajax({
  896.             type:"POST",
  897.             url:capfData.ajax_url,
  898.             data:{
  899.                 action:action,
  900.                 section:"getPostType_customFields",
  901.                 fieldType:fieldType,
  902.                 post_type:postType
  903.             },
  904.             success: function (data) {
  905.                 callback(data);
  906.             },
  907.             dataType:"json"
  908.         });
  909.  
  910.         };
  911.  
  912. }

Raw Paste

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