Advertisement
Guest User

Untitled

a guest
Dec 14th, 2015
337
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var WPViews = WPViews || {};
  2.  
  3. var wpv_stop_rollover = {};
  4. window.wpvPaginationAjaxLoaded = {};
  5. window.wpvPaginationAnimationFinished = {};
  6. window.wpvPaginationQueue = {};
  7.  
  8. // ------------------------------------
  9. // Clone
  10. // ------------------------------------
  11.  
  12. // Textarea and select clone() bug workaround | Spencer Tipping
  13. // Licensed under the terms of the MIT source code license
  14. // Motivation.
  15. // jQuery's clone() method works in most cases, but it fails to copy the value of textareas and select elements. This patch replaces jQuery's clone() method with a wrapper that fills in the
  16. // values after the fact.
  17. // An interesting error case submitted by Piotr Przybyl: If two <select> options had the same value, the clone() method would select the wrong one in the cloned box. The fix, suggested by Piotr
  18. // and implemented here, is to use the selectedIndex property on the <select> box itself rather than relying on jQuery's value-based val().
  19. ;( function() {
  20.     jQuery.fn.wpv_clone = function() {
  21.         var result = jQuery.fn.clone.apply( this, arguments ),
  22.         my_textareas = this.find( 'textarea' ).add( this.filter( 'textarea' ) ),
  23.         result_textareas = result.find( 'textarea' ).add( result.filter( 'textarea' ) ),
  24.         my_selects = this.find( 'select' ).add( this.filter( 'select' ) ),
  25.         result_selects = result.find( 'select' ).add( result.filter( 'select' ) );
  26.         for ( var i = 0, l = my_textareas.length; i < l; ++i ) {
  27.             jQuery( result_textareas[i] ).val( jQuery( my_textareas[i] ).val() );
  28.         }
  29.         for ( var i = 0, l = my_selects.length; i < l; ++i ) {
  30.             for ( var j = 0, m = my_selects[i].options.length; j < m; ++j ) {
  31.                 if ( my_selects[i].options[j].selected === true ) {
  32.                     result_selects[i].options[j].selected = true;
  33.                 } else {
  34.                     result_selects[i].options[j].selected = false;
  35.                 }
  36.             }
  37.         }
  38.         return result;
  39.     };
  40. })();
  41.  
  42. // ------------------------------------
  43. // Rollover
  44. // ------------------------------------
  45.  
  46. jQuery.fn.wpvRollover = function( data ) {
  47.     var args = jQuery.extend( {}, {id: 1, effect: "fade", speed: 5, page: 1, count: 1}, data ),
  48.     id = args.id,
  49.     effect = args.effect,
  50.     speed = args.speed*1000,
  51.     page = args.page,
  52.     count = args.count,
  53.     wpvInfiniteLoop;
  54.     if ( count > 1 ) {
  55.         if (
  56.             window.wpvPaginationAjaxLoaded.hasOwnProperty( id )
  57.             && window.wpvPaginationAjaxLoaded[id] === false
  58.         ) {
  59.             setTimeout( function() {
  60.                     jQuery( this ).wpvRollover( {
  61.                         id:id,
  62.                         effect:effect,
  63.                         speed:speed/1000,
  64.                         page:page,
  65.                         count:count,
  66.                     } );
  67.                 },
  68.                 100 );
  69.             return false;
  70.         }
  71.         window.wpvPaginationAjaxLoaded[id] = false;
  72.         wpvInfiniteLoop = setTimeout( function() {
  73.             if ( effect === 'slideright' || effect === 'slidedown' ) {
  74.                 if ( page <= 1 ) {
  75.                     page = count;
  76.                 } else {
  77.                     page--;
  78.                 }
  79.             } else {
  80.                 if ( page === count ) {
  81.                     page = 1;
  82.                 } else {
  83.                     page++;
  84.                 }
  85.             }
  86.             if ( ! wpv_stop_rollover.hasOwnProperty( id ) ) {
  87.                 WPViews.view_pagination.trigger_pagination( id, page );
  88.                 jQuery( this ).wpvRollover( {
  89.                     id:id,
  90.                     effect:effect,
  91.                     speed:speed/1000,
  92.                     page:page,
  93.                     count:count,
  94.                 } );
  95.             }
  96.         }, speed);
  97.     }
  98. };
  99.  
  100.  
  101. ////////////////////////////////////////////////////
  102. // Table sorting head click
  103. ////////////////////////////////////////////////////
  104.  
  105. // TODO create a table sorting object to wrap all related code
  106.  
  107. jQuery( document ).on( 'click', '.js-wpv-column-header-click', function( e ) {
  108.     e.preventDefault();
  109.     var thiz = jQuery( this ),
  110.     view_number = thiz.data( 'viewnumber' ),
  111.     name = thiz.data( 'name' ),
  112.     direction = thiz.data( 'direction' ),
  113.     data = {},
  114.     innerthis;
  115.     jQuery( 'form[name="wpv-filter-' + view_number + '"]' ).each( function() {
  116.         innerthis = jQuery( this );
  117.         innerthis.find( '#wpv_column_sort_id' ).val( name );
  118.         innerthis.find( '#wpv_column_sort_dir' ).val( direction );
  119.         WPViews.view_frontend_utils.add_url_controls_for_column_sort( data, innerthis );
  120.     });
  121.     jQuery( 'form[name="wpv-filter-' + view_number + '"]' ).submit();
  122.     return false;
  123. });
  124.  
  125. WPViews.ViewFrontendUtils = function( $ ) {
  126.    
  127.     // ------------------------------------
  128.     // Constants and variables
  129.     // ------------------------------------
  130.    
  131.     var self = this;
  132.    
  133.     // ------------------------------------
  134.     // Methods
  135.     // ------------------------------------
  136.    
  137.     self.just_return = function() {
  138.         return;
  139.     };
  140.    
  141.     /**
  142.     * extract_url_query_parameters
  143.     *
  144.     * Extracts parameters from a query string, managing arrays, and returns an array of pairs key => value
  145.     *
  146.     * @param string query_string
  147.     *
  148.     * @return array
  149.     *
  150.     * @note ##URLARRAYVALHACK## is a hacky constant
  151.     *
  152.     * @uses decodeURIComponent
  153.     *
  154.     * @since 1.9.0
  155.     */
  156.    
  157.     self.extract_url_query_parameters = function( query_string ) {
  158.         var query_string_pairs = {};
  159.         if ( query_string == "" ) {
  160.             return query_string_pairs;
  161.         }
  162.         var query_string_split = query_string.split( '&' ),
  163.         query_string_split_length = query_string_split.length;
  164.         for ( var i = 0; i < query_string_split_length; ++i ) {
  165.             var qs_part = query_string_split[i].split( '=' );
  166.             if ( qs_part.length != 2 ) {
  167.                 continue;
  168.             };
  169.             var thiz_key = qs_part[0],
  170.             thiz_val = decodeURIComponent( qs_part[1].replace( /\+/g, " " ) );
  171.             // Adjust thiz_key to work with POSTed arrays
  172.             thiz_key = thiz_key.replace( "[]", "" );
  173.             thiz_key = thiz_key.replace( "%5B%5D", "" );
  174.             if ( query_string_pairs.hasOwnProperty( thiz_key ) ) {
  175.                 if ( query_string_pairs[thiz_key] != thiz_val ) {
  176.                     // @hack alert!! WE can not avoid using this :-(
  177.                     query_string_pairs[thiz_key] += '##URLARRAYVALHACK##' + thiz_val;
  178.                 } else {
  179.                     query_string_pairs[thiz_key] = thiz_val;
  180.                 }
  181.             } else {
  182.                 query_string_pairs[thiz_key] = thiz_val;
  183.             }
  184.         }
  185.         return query_string_pairs;
  186.     };
  187.    
  188.     /**
  189.     * add_url_query_parameters
  190.     *
  191.     * Adds the current URL query parameters to the data array, on the get_params key
  192.     *
  193.     * @param array data
  194.     *
  195.     * @return array
  196.     *
  197.     * @uses self.extract_url_query_parameters
  198.     *
  199.     * @since 1.9.0
  200.     */
  201.  
  202.     self.add_url_query_parameters = function( data ) {
  203.         var query_s = self.extract_url_query_parameters( window.location.search.substr( 1 ) );
  204.         data['get_params'] = {};
  205.         for ( var prop in query_s ) {
  206.             if (
  207.                 query_s.hasOwnProperty( prop )
  208.                 && ! data.hasOwnProperty( prop )
  209.             ) {
  210.                 data['get_params'][prop] = query_s[prop];
  211.             }
  212.         }
  213.         return data;
  214.     };
  215.    
  216.     /**
  217.     * add_url_controls_for_column_sort
  218.     *
  219.     * @param object form
  220.     *
  221.     * @since 1.9
  222.     */
  223.    
  224.     self.add_url_controls_for_column_sort = function( data, form ) {
  225.         data = self.add_url_query_parameters( data );
  226.         $.each( data['get_params'], function( key, value ) {
  227.             if ( form.find( '[name=' + key + '], [name=' + key + '\\[\\]]' ).length === 0 ) {
  228.                 // @hack alert!! WE can not avoid this :-(
  229.                 var pieces = value.split( '##URLARRAYVALHACK##' ),
  230.                 pieces_length = pieces.length;
  231.                 if ( pieces_length < 2 ) {
  232.                     $( '<input>' ).attr({
  233.                         type: 'hidden',
  234.                         name: key,
  235.                         value: value
  236.                     })
  237.                     .appendTo( form );
  238.                 } else {
  239.                     for ( var iter = 0; iter < pieces_length; iter++ ) {
  240.                         $( '<input>' ).attr({
  241.                             type: 'hidden',
  242.                             name: key + "[]",
  243.                             value: pieces[iter]
  244.                         })
  245.                         .appendTo( form );
  246.                     }
  247.                 }
  248.             }
  249.         });
  250.         return data;
  251.     };
  252.    
  253.     /**
  254.     * utf8_encode
  255.     *
  256.     * @param string argString
  257.     *
  258.     * @return string
  259.     *
  260.     * @since 1.9.0
  261.     *
  262.     * @author Webtoolkit.info (http://www.webtoolkit.info/)
  263.     * @improved Kevin van Zonneveld (http://kevin.vanzonneveld.net)
  264.     * @improved sowberry
  265.     * @tweaked Jack
  266.     * @bugfixed Onno Marsman
  267.     * @improved Yves Sucaet
  268.     * @bugfixed Onno Marsman
  269.     * @bugfixed Ulrich
  270.     * @bugfixed Rafal Kukawski
  271.     * @improved kirilloid
  272.     */
  273.    
  274.     self.utf8_encode = function( argString ) {
  275.         if (
  276.             argString === null
  277.             || typeof argString === "undefined"
  278.         ) {
  279.             return "";
  280.         }
  281.         var string = ( argString + '' ),
  282.         utftext = '',
  283.         start = 0,
  284.         end = 0,
  285.         stringl = string.length;
  286.         for ( var n = 0; n < stringl; n++ ) {
  287.             var c1 = string.charCodeAt( n ),
  288.             enc = null;
  289.             if ( c1 < 128 ) {
  290.                 end++;
  291.             } else if ( c1 > 127 && c1 < 2048 ) {
  292.                 enc = String.fromCharCode( ( c1 >> 6 ) | 192, ( c1 & 63 ) | 128 );
  293.             } else {
  294.                 enc = String.fromCharCode( ( c1 >> 12 ) | 224, ( ( c1 >> 6 ) & 63 ) | 128, ( c1 & 63 ) | 128 );
  295.             }
  296.             if ( enc !== null ) {
  297.                 if ( end > start ) {
  298.                     utftext += string.slice( start, end );
  299.                 }
  300.                 utftext += enc;
  301.                 start = end = n + 1;
  302.             }
  303.         }
  304.         if ( end > start ) {
  305.             utftext += string.slice( start, stringl );
  306.         }
  307.         return utftext;
  308.     };
  309.    
  310.     /**
  311.     * encodeToHex
  312.     *
  313.     * Converts the given data structure to a JSON string.
  314.     *
  315.     * @param string str
  316.     *
  317.     * @return string
  318.     *
  319.     * @since 1.9.0
  320.     */
  321.    
  322.     self.encodeToHex = function( str ) {
  323.         var r="",
  324.         e = str.length,
  325.         c = 0,
  326.         h;
  327.         while( c < e ) {
  328.             h = str.charCodeAt( c++ ).toString( 16 );
  329.             while( h.length < 2 ) {
  330.                 h= "0" + h;
  331.             }
  332.             r += h;
  333.         }
  334.         return r;
  335.     };
  336.    
  337.     /**
  338.     * array2json
  339.     *
  340.     * Converts the given data structure to a JSON string
  341.     *
  342.     * @param array arr
  343.     *
  344.     * @return string
  345.     *
  346.     * @since 1.9.0
  347.     *
  348.     * @uses self.array2json
  349.     *
  350.     * @url http://www.openjs.com/scripts/data/json_encode.php
  351.     *
  352.     * @example var json_string = array2json(['e', {pluribus: 'unum'}]);
  353.     * @example var json = array2json({"success":"Sweet","failure":false,"empty_array":[],"numbers":[1,2,3],"info":{"name":"Binny","site":"http:\/\/www.openjs.com\/"}});
  354.     */
  355.     self.array2json = function( arr ) {
  356.         var parts = [],
  357.         is_list = ( Object.prototype.toString.apply( arr ) === '[object Array]' );
  358.         for( var key in arr ) {
  359.             var value = arr[key];
  360.             if ( typeof value == "object" ) { //Custom handling for arrays
  361.                 if ( is_list ) {
  362.                     parts.push( self.array2json( value ) ); /* :RECURSION: */
  363.                 } else {
  364.                     parts.push( '"' + key + '":' + self.array2json( value ) ); /* :RECURSION: */
  365.                 }
  366.             } else {
  367.                 var str = "";
  368.                 if ( ! is_list ) {
  369.                     str = '"' + key + '":';
  370.                 }
  371.                 //Custom handling for multiple data types
  372.                 if ( typeof value == "number" ) {
  373.                     str += value; //Numbers
  374.                 } else if ( value === false ) {
  375.                     str += 'false'; //The booleans
  376.                 } else if ( value === true ) {
  377.                     str += 'true';
  378.                 } else {
  379.                     str += '"' + self.utf8_encode( value ) + '"'; //All other things
  380.                 }
  381.                 // :TODO: Is there any more datatype we should be in the lookout for? (Functions?)
  382.                 parts.push( str );
  383.             }
  384.         }
  385.         var json = parts.join( "," );
  386.         if ( is_list ) {
  387.             return '[' + json + ']';//Return numerical JSON
  388.         }
  389.         return '{' + json + '}';//Return associative JSON
  390.     };
  391.    
  392.     /**
  393.     * serialize_array
  394.     *
  395.     * @param array data
  396.     *
  397.     * @return string
  398.     *
  399.     * @since 1.9.0
  400.     *
  401.     * @uses self.encodeToHex
  402.     * @uses self.array2json
  403.     */
  404.    
  405.     self.serialize_array = function( data ) {
  406.         return self.encodeToHex( self.array2json( data ) );
  407.     };
  408.    
  409.     /**
  410.     * render_frontend_datepicker
  411.     *
  412.     * Adds a datepicker to a selector but only if it has not been added before.
  413.     *
  414.     * Fired on document.ready, after AJAX pagination and after AJAX parametric search events.
  415.     *
  416.     * @since 1.9
  417.     */
  418.    
  419.     self.render_frontend_datepicker = function() {
  420.         $( '.js-wpv-frontend-datepicker:not(.js-wpv-frontend-datepicker-inited)' ).each( function() {
  421.             var thiz = $( this );
  422.             thiz
  423.                 .addClass( 'js-wpv-frontend-datepicker-inited' )
  424.                 .datepicker({
  425.                     onSelect: function( dateText, inst ) {
  426.                         var url_param = thiz.data( 'param' ),
  427.                         data = 'date=' + dateText,
  428.                         form = thiz.closest( 'form' );
  429.                         data += '&date-format=' + $( '.js-wpv-date-param-' + url_param + '-format' ).val();
  430.                         data += '&action=wpv_format_date';
  431.                         $.post( wpv_pagination_local.front_ajaxurl, data, function( response ) {
  432.                             response = $.parseJSON( response );
  433.                             form.find('.js-wpv-date-param-' + url_param ).html( response['display'] );
  434.                             form.find('.js-wpv-date-front-end-clear-' + url_param ).show();
  435.                             form.find('.js-wpv-date-param-' + url_param + '-value' ).val( response['timestamp'] ).trigger( 'change' );
  436.                         });
  437.                     },
  438.                     dateFormat: 'ddmmyy',
  439.                     minDate: wpv_pagination_local.datepicker_min_date,
  440.                     maxDate: wpv_pagination_local.datepicker_max_date,
  441.                     showOn: "button",
  442.                     buttonImage: wpv_pagination_local.calendar_image,
  443.                     buttonText: wpv_pagination_local.calendar_text,
  444.                     buttonImageOnly: true,
  445.                     changeMonth: true,
  446.                     changeYear: true
  447.                 });
  448.         });
  449.     };
  450.    
  451.     /**
  452.     * clone_form
  453.     *
  454.     * Clones a form using the fixed clone() method that covers select and textarea elements
  455.     *
  456.     * @param object fil
  457.     * @param array targets
  458.     *
  459.     * @since 1.9
  460.     */
  461.    
  462.     self.clone_form = function( fil, targets ) {
  463.         var cloned = fil.wpv_clone();
  464.         targets.each( function() {
  465.             $( this ).replaceWith( cloned );
  466.         });
  467.     };
  468.    
  469.     /**
  470.     * render_frontend_media_shortcodes
  471.     *
  472.     * Render the WordPress media players for items inside a container.
  473.     *
  474.     * @param object container
  475.     *
  476.     * @since 1.9
  477.     */
  478.    
  479.     self.render_frontend_media_shortcodes = function( container ) {
  480.         container.find( '.wp-audio-shortcode, .wp-video-shortcode' ).each( function() {
  481.             var thiz = $( this );
  482.             thiz.mediaelementplayer();
  483.         });
  484.         container.find( '.wp-playlist' ).each( function() {
  485.             var thiz = $( this );
  486.             return new WPPlaylistView({ el: this });
  487.         });
  488.     };
  489.    
  490.     // ------------------------------------
  491.     // Events
  492.     // ------------------------------------
  493.    
  494.     /**
  495.     * Window resize event
  496.     *
  497.     * Make Views layouts responsive
  498.     *
  499.     * @since 1.9
  500.     * @since 1.11 added debounce
  501.     */
  502.    
  503.     $( window ).on( 'resize', _.debounce(
  504.         function() {
  505.             /*
  506.             $( '.js-wpv-layout-responsive' ).each( function() {
  507.                 $( this ).css( 'width', $( this ).parent().width() );
  508.             });
  509.             */
  510.             $( '.js-wpv-layout-responsive' ).each( function() {
  511.                 $( this ).css( 'width', '' );
  512.             });
  513.         },
  514.         wpv_pagination_local.resize_debounce_tolerance
  515.     ));
  516.    
  517.     // ------------------------------------
  518.     // Init
  519.     // ------------------------------------
  520.    
  521.     self.init = function() {
  522.         self.render_frontend_datepicker();
  523.     };
  524.    
  525.     self.init();
  526.  
  527. };
  528.  
  529. WPViews.ViewPagination = function( $ ) {
  530.    
  531.     // ------------------------------------
  532.     // Constants and variables
  533.     // ------------------------------------
  534.    
  535.     var self = this;
  536.    
  537.     self.did_stop_rollover = {};
  538.     self.pagination_queue = {};
  539.    
  540.     self.pagination_effects = {};
  541.     self.pagination_effects_conditions = {};
  542.     self.pagination_effects_spinner = {};
  543.     self.paged_views = {};
  544.     self.paged_views_initial_page = {};
  545.    
  546.     self.last_paginated_view = [];
  547.     self.paginated_history_reach = 0;
  548.     self.add_paginated_history = true;
  549.     self.pagination_effect_state_push = [ 'fade', 'slidev', 'slideh' ];
  550.     self.pagination_effect_state_replace = [];
  551.     self.pagination_effect_state_keep = [ 'infinite' ];
  552.        
  553.     self.slide_data_defaults = {
  554.         view_number:        '',
  555.         page:               0,
  556.         max_pages:          0,
  557.         speed:              500,
  558.         next:               true,
  559.         effect:             'fade',
  560.         response:           null,
  561.         wpvPaginatorFilter: null,
  562.         wpvPaginatorLayout: null,
  563.         responseFilter:     null,
  564.         responseView:       null,
  565.         callback_next_func: WPViews.view_frontend_utils.just_return
  566.     };
  567.        
  568.     // ------------------------------------
  569.     // Methods
  570.     // ------------------------------------
  571.    
  572.     /**
  573.     * get_ajax_pagination_url
  574.     *
  575.     * Build the pagination URL to get the given page based on data
  576.     *
  577.     * @param object data
  578.     *
  579.     * @since 1.9
  580.     */
  581.    
  582.     self.get_ajax_pagination_url = function( data ) {
  583.         var url;
  584.         if ( wpv_pagination_local.ajax_pagination_url.slice( -'.php'.length ) === '.php' ) {
  585.             url = wpv_pagination_local.ajax_pagination_url + '?wpv-ajax-pagination=' + WPViews.view_frontend_utils.serialize_array( data );
  586.         } else {
  587.             url = wpv_pagination_local.ajax_pagination_url + WPViews.view_frontend_utils.serialize_array( data );
  588.         }
  589.         return url;
  590.     };
  591.    
  592.     /**
  593.     * add_view_parameters
  594.     *
  595.     * Add several information to the data used to get pagination pages.
  596.     * For example, add column sorting data, parametric search data and parent View data.
  597.     *
  598.     * @since 1.9
  599.     */
  600.    
  601.     self.add_view_parameters = function( data, page, view_number ) {
  602.         data['action'] = 'wpv_get_page';
  603.         data['page'] = page;
  604.         data['view_number'] = view_number;
  605.         var this_form = $( 'form.js-wpv-filter-form-' + view_number );
  606.         data['wpv_column_sort_id'] = this_form.find( 'input[name=wpv_column_sort_id]' ).val();
  607.         data['wpv_column_sort_dir'] = this_form.find( 'input[name=wpv_column_sort_dir]' ).val();
  608.         data['wpv_view_widget_id'] = this_form.data( 'viewwidgetid' );
  609.         data['view_hash'] = this_form.data( 'viewhash' );
  610.         if ( this_form.find( 'input[name=wpv_post_id]' ).length > 0 ) {
  611.             data['post_id'] = this_form.find( 'input[name=wpv_post_id]' ).val();
  612.         }
  613.         if ( this_form.find( 'input[name=wpv_aux_parent_term_id]' ).length > 0 ) {
  614.             data['wpv_aux_parent_term_id'] = this_form.find( 'input[name=wpv_aux_parent_term_id]' ).val();
  615.         }
  616.         if ( this_form.find( 'input[name=wpv_aux_parent_user_id]' ).length > 0 ) {
  617.             data['wpv_aux_parent_user_id'] = this_form.find( 'input[name=wpv_aux_parent_user_id]' ).val();
  618.         }
  619.         data['dps_pr'] = {};
  620.         data['dps_general'] = {};
  621.         var this_prelements = this_form.find( '.js-wpv-post-relationship-update' );
  622.         if ( this_prelements.length ) {
  623.             data['dps_pr'] = this_prelements.serializeArray();
  624.         }
  625.         if ( this_form.hasClass( 'js-wpv-dps-enabled' ) || this_form.hasClass( 'js-wpv-ajax-results-enabled' ) ) {
  626.             data['dps_general'] = this_form.find( '.js-wpv-filter-trigger, .js-wpv-filter-trigger-delayed' ).serializeArray();
  627.         }
  628.         return data;
  629.     };
  630.    
  631.     /**
  632.     * pagination_preload_pages
  633.     *
  634.     * Preload pages to a reach.
  635.     *
  636.     * @param object preload_data
  637.     *
  638.     * @since 1.9
  639.     */
  640.    
  641.     self.pagination_preload_pages = function( preload_data ) {
  642.         var page = parseInt( preload_data.page, 10 ),
  643.         max_pages = parseInt( preload_data.max_pages, 10 ),
  644.         max_reach = parseInt( preload_data.max_reach, 10 );
  645.        
  646.         if ( max_reach > max_pages ) {
  647.             max_reach = max_pages;
  648.         }
  649.        
  650.         if ( preload_data.preload_pages ) {
  651.             var reach = 1;
  652.             while ( reach < max_reach ) {
  653.                 self.pagination_preload_next_page( preload_data.view_number, page, max_pages, reach );
  654.                 self.pagination_preload_previous_page( preload_data.view_number, page, max_pages, reach );
  655.                 reach++;
  656.             }
  657.         }
  658.         if ( preload_data.cache_pages ) {
  659.             self.pagination_cache_current_page( preload_data.view_number, page );
  660.         }
  661.     };
  662.    
  663.     /**
  664.     * pagination_cache_current_page
  665.     *
  666.     * Cache current page.
  667.     *
  668.     * @param string view_number
  669.     * @param int    page
  670.     *
  671.     * @since 1.9
  672.     */
  673.    
  674.     self.pagination_cache_current_page = function( view_number, page ) {
  675.         window.wpvCachedPages[ view_number ] = window.wpvCachedPages[ view_number ] || [];
  676.         var dataCurrent = {},
  677.         content;
  678.         icl_lang = ( typeof icl_lang == 'undefined' ) ? false : icl_lang;
  679.         if ( ! window.wpvCachedPages[view_number].hasOwnProperty( page ) ) {
  680.             dataCurrent = self.add_view_parameters( dataCurrent, page, view_number );
  681.             dataCurrent = WPViews.view_frontend_utils.add_url_query_parameters( dataCurrent );
  682.             if ( icl_lang !== false ) {
  683.                 dataCurrent['lang'] = icl_lang;
  684.             }
  685.             $.get( self.get_ajax_pagination_url( dataCurrent ), '', function( response ) {
  686.                 window.wpvCachedPages[view_number][page] = response;
  687.                 content = $( response ).find( 'img' );
  688.                 content.each( function() {
  689.                     window.wpvCachedImages.push( this.src );
  690.                 });
  691.             });
  692.         }
  693.     };
  694.    
  695.     /**
  696.     * pagination_preload_next_page
  697.     *
  698.     * Load the next page, or the next one counting "reach" pages.
  699.     *
  700.     * @param string view_number
  701.     * @param int    page
  702.     * @param int    max_pages
  703.     * @param int    reach
  704.     *
  705.     * @since 1.9
  706.     */
  707.    
  708.     self.pagination_preload_next_page = function( view_number, page, max_pages, reach ) {
  709.         window.wpvCachedPages[ view_number ] = window.wpvCachedPages[ view_number ] || [];
  710.         var next_page = page + reach;
  711.         icl_lang = ( typeof icl_lang == 'undefined' ) ? false : icl_lang;
  712.         if ( ! window.wpvCachedPages[view_number].hasOwnProperty( next_page ) ) {
  713.             if ( ( next_page - 1 ) < max_pages ) {
  714.                 var dataNext = {};
  715.                 dataNext = self.add_view_parameters( dataNext, next_page, view_number );
  716.                 dataNext = WPViews.view_frontend_utils.add_url_query_parameters( dataNext );
  717.                 if ( icl_lang !== false ) {
  718.                     dataNext['lang'] = icl_lang;
  719.                 }
  720.                 $.get( self.get_ajax_pagination_url( dataNext ), '', function( response ) {
  721.                     window.wpvCachedPages[view_number][next_page] = response;
  722.                     var content = $( response ).find( 'img' );
  723.                     content.each( function() {
  724.                         window.wpvCachedImages.push( this.src );
  725.                     });
  726.                 });
  727.             }
  728.         }
  729.     };
  730.    
  731.     /**
  732.     * pagination_preload_previous_page
  733.     *
  734.     * Load the previous page, or the previous one counting "reach" pages.
  735.     *
  736.     * @param string view_number
  737.     * @param int    page
  738.     * @param int    max_pages
  739.     * @param int    reach
  740.     *
  741.     * @since 1.9
  742.     */
  743.    
  744.     self.pagination_preload_previous_page = function(view_number, page, max_pages, reach) {
  745.         window.wpvCachedPages[ view_number ] = window.wpvCachedPages[ view_number ] || [];
  746.         var previous_page = page - reach,
  747.         dataPrevious = {},
  748.         content;
  749.         icl_lang = ( typeof icl_lang == 'undefined' ) ? false : icl_lang;
  750.         if ( ! window.wpvCachedPages[view_number].hasOwnProperty( previous_page ) ) {
  751.             // LOAD PREVIOUS
  752.             if ( ( previous_page + 1 ) > 1 ) {
  753.                 dataPrevious = self.add_view_parameters( dataPrevious, previous_page, view_number );
  754.                 dataPrevious = WPViews.view_frontend_utils.add_url_query_parameters( dataPrevious );
  755.                 if ( icl_lang !== false ) {
  756.                     dataPrevious['lang'] = icl_lang;
  757.                 }
  758.                 $.get( self.get_ajax_pagination_url( dataPrevious ), '', function( response ) {
  759.                 window.wpvCachedPages[view_number][previous_page] = response;
  760.                 content = $( response ).find( 'img' );
  761.                     content.each( function() {
  762.                         window.wpvCachedImages.push( this.src );
  763.                     });
  764.                 });
  765.             } else if ( (previous_page + 1 ) === 1 ) { // LOAD LAST PAGE IF ON FIRST PAGE
  766.                 dataPrevious = self.add_view_parameters( dataPrevious, max_pages, view_number );
  767.                 dataPrevious = WPViews.view_frontend_utils.add_url_query_parameters( dataPrevious );
  768.                 if ( icl_lang !== false ) {
  769.                     dataPrevious['lang'] = icl_lang;
  770.                 }
  771.                 $.get( self.get_ajax_pagination_url( dataPrevious ), '', function( response ) {
  772.                     window.wpvCachedPages[view_number][max_pages] = response;
  773.                     window.wpvCachedPages[view_number][0] = response;
  774.                     content = $( response ).find( 'img' );
  775.                     content.each( function() {
  776.                         window.wpvCachedImages.push( this.src );
  777.                     });
  778.                 });
  779.             }
  780.         }
  781.     };
  782.    
  783.     /**
  784.     * trigger_pagination
  785.     *
  786.     * Manage the View pagination after a control has been inited
  787.     *
  788.     * @param string view_number
  789.     * @param int    page
  790.     *
  791.     * @since 1.9
  792.     */
  793.    
  794.     self.trigger_pagination = function( view_number, page ) {
  795.         if ( ! window.wpvPaginationAnimationFinished.hasOwnProperty( view_number ) ) {
  796.             window.wpvPaginationAnimationFinished[ view_number ] = false;
  797.         } else if ( window.wpvPaginationAnimationFinished[ view_number ] !== true ) {
  798.             if ( ! window.wpvPaginationQueue.hasOwnProperty( view_number ) ) {
  799.                 window.wpvPaginationQueue[view_number] = [];
  800.             }
  801.             window.wpvPaginationQueue[ view_number ].push( arguments );
  802.             return false;
  803.         }
  804.         if ( ! view_number in self.paged_views ) {
  805.             window.wpvPaginationAnimationFinished[ view_number ] = true;
  806.             return false;
  807.         }
  808.         window.wpvPaginationAnimationFinished[ view_number ] = false;
  809.        
  810.         if ( self.paged_views[ view_number ].effect in self.pagination_effects_conditions ) {
  811.             if ( ! self.pagination_effects_conditions[ self.paged_views[ view_number ].effect ]( self.paged_views[ view_number ], page ) ) {
  812.                 window.wpvPaginationAnimationFinished[ view_number ] = true;
  813.                 return;
  814.             }
  815.         }
  816.        
  817.         var data = {},
  818.         wpvPaginatorLayout = $( '#wpv-view-layout-' + view_number ),
  819.         wpvPaginatorFilter = $( 'form[name=wpv-filter-' + view_number + ']' ),
  820.         speed = 500,
  821.         next = true,
  822.         max_reach = parseInt( self.paged_views[ view_number ].pre_reach ) + 1,
  823.         callback_next_func = WPViews.view_frontend_utils.just_return,
  824.         data_for_get_page,
  825.         img;
  826.        
  827.         // Not using AJAX pagination
  828.         if ( self.paged_views[ view_number ].ajax == 'false' ) {
  829.            
  830.             data = WPViews.view_frontend_utils.add_url_controls_for_column_sort( data, wpvPaginatorFilter );
  831.             // Adjust the wpv_paged hidden input to the page that we want to show
  832.             if ( $( 'input[name=wpv_paged]' ).length > 0 ) {
  833.                 $( 'input[name=wpv_paged]' ).attr( 'value', page );
  834.             } else {
  835.                 $( '<input>')
  836.                     .attr({
  837.                         type: 'hidden',
  838.                         name: 'wpv_paged',
  839.                         value: page
  840.                     })
  841.                     .appendTo( wpvPaginatorFilter );
  842.             }
  843.             wpvPaginatorFilter[0].submit();
  844.             return false;
  845.         }
  846.         // Using AJAX pagination
  847.         window.wpvPaginationAjaxLoaded[view_number] = false;
  848.         window.wpvCachedPages[ view_number ] = window.wpvCachedPages[view_number] || [];
  849.        
  850.         if ( this.historyP.hasOwnProperty( view_number ) ) {
  851.             next = ( this.historyP[ view_number ] < page ) ? true : false;
  852.         }
  853.        
  854.         if ( self.paged_views[ view_number ].callback_next !== '' ) {
  855.             callback_next_func = window[ self.paged_views[ view_number ].callback_next ];
  856.             if ( typeof callback_next_func !== "function" ) {
  857.                 callback_next_func = WPViews.view_frontend_utils.just_return;
  858.             }
  859.         }
  860.        
  861.         data_for_get_page = {
  862.             view_number:        view_number,
  863.             page:               page,
  864.             max_pages:          parseInt( self.paged_views[ view_number ].max_pages, 10 ),
  865.             speed:              parseFloat( self.paged_views[ view_number ].duration ),
  866.             next:               next,
  867.             effect:             self.paged_views[ view_number ].effect,
  868.             wpvPaginatorFilter: wpvPaginatorFilter,
  869.             wpvPaginatorLayout: wpvPaginatorLayout,
  870.             responseView:       null,
  871.             callback_next_func: callback_next_func
  872.         };
  873.        
  874.         if (
  875.             window.wpvCachedPages[ view_number ].hasOwnProperty( page )
  876.         ) {
  877.             data_for_get_page.response = window.wpvCachedPages[ view_number ][ page ];
  878.             self.prepare_slide( data_for_get_page );
  879.         } else {
  880.             // Set loading class
  881.             if ( self.paged_views[ view_number ].spinner !== 'no' ) {
  882.                 if ( self.paged_views[ view_number ].effect in self.pagination_effects_spinner ) {
  883.                     self.pagination_effects_spinner[ self.paged_views[ view_number ].effect ]( view_number, wpvPaginatorLayout );
  884.                 } else {
  885.                     self.pagination_effects_spinner[ 'fade' ]( view_number, wpvPaginatorLayout );
  886.                 }
  887.             }
  888.            
  889.             data = self.add_view_parameters( data, page, view_number );
  890.             data = WPViews.view_frontend_utils.add_url_controls_for_column_sort( data, wpvPaginatorFilter );
  891.             icl_lang = ( typeof icl_lang == 'undefined' ) ? false : icl_lang;
  892.             if ( icl_lang !== false ) {
  893.                 data['lang'] = icl_lang;
  894.             }
  895.             $.get( self.get_ajax_pagination_url( data ), '', function( response ) {
  896.                 data_for_get_page.response = response;
  897.                 self.prepare_slide( data_for_get_page );
  898.             });
  899.         }
  900.         self.pagination_preload_pages({
  901.             view_number:    view_number,
  902.             cache_pages:    self.paged_views[ view_number ].cache_pages,
  903.             preload_pages:  self.paged_views[ view_number ].preload_pages,
  904.             page:           page,
  905.             max_reach:      max_reach,
  906.             max_pages:      self.paged_views[ view_number ].max_pages
  907.         });
  908.         this.historyP[ view_number ] = page;
  909.         return false;
  910.     };
  911.    
  912.     /**
  913.     * prepare_slide
  914.     *
  915.     * Wrap the old layout into a div.wpv_slide_remove and change its ID to ~-response
  916.     * Preload images on the new page if needed
  917.     * Fire self.pagination_slide
  918.     *
  919.     * @param object data
  920.     *
  921.     * @since 1.9
  922.     */
  923.    
  924.     self.prepare_slide = function( data ) {
  925.         var slide_data = $.extend( {}, self.slide_data_defaults, data ),
  926.         width = slide_data.wpvPaginatorLayout.width(),
  927.         outer_width = slide_data.wpvPaginatorLayout.outerWidth(),
  928.         height = slide_data.wpvPaginatorLayout.height(),
  929.         outer_height = slide_data.wpvPaginatorLayout.outerHeight(),
  930.         responseObj = $( '<div></div>' ).append( slide_data.response ),
  931.         preloadedImages,
  932.         images;
  933.        
  934.         slide_data.responseView = responseObj.find( '#wpv-view-layout-' + slide_data.view_number );
  935.         slide_data.responseFilter = responseObj.find( 'form[name=wpv-filter-' + slide_data.view_number + ']' ).html();
  936.         slide_data.pagination_page_permalink = slide_data.responseView.data( 'pagepermalink' );
  937.        
  938.         // Wrap old layout in a div.wpv_slide_remove nd change its ID to ~-response
  939.         slide_data.wpvPaginatorLayout
  940.             .attr( 'id', 'wpv-view-layout-' + slide_data.view_number + '-response' )
  941.             .wrap( '<div class="wpv_slide_remove" style="width:' + outer_width + 'px;height:' + outer_height + 'px;overflow:hidden;" />' )
  942.             .css( 'width', width );
  943.         // Add an ID attribute to the upcoming new layout, and hide it
  944.         slide_data.responseView
  945.             .attr( 'id', 'wpv-view-layout-' + slide_data.view_number )
  946.             .css( {
  947.                 'visibility': 'hidden',
  948.                 'width': width
  949.             } );
  950.        
  951.         // Preload images if needed
  952.         if ( slide_data.wpvPaginatorLayout.hasClass( 'js-wpv-layout-preload-images' ) ) {
  953.             preloadedImages = [];
  954.             images = slide_data.responseView.find( 'img' );
  955.             if ( images.length < 1 ) {
  956.                 self.pagination_slide( slide_data );
  957.             } else {
  958.                 images.one( 'load', function() {
  959.                     preloadedImages.push( $( this ).attr( 'src' ) );
  960.                     if ( preloadedImages.length === images.length ) {
  961.                         self.pagination_slide( slide_data );
  962.                     }
  963.                 }).each( function() {
  964.                     $( this ).load();
  965.                 });
  966.             }
  967.             // Fix inner nested Views with AJAX pagination: the inner View, when preloading mages, was rendered with visibility:hidden by default
  968.             slide_data.responseView
  969.                 .find( '.js-wpv-layout-preload-images' )
  970.                     .css( 'visibility', 'visible' );
  971.         } else {
  972.             self.pagination_slide( slide_data );
  973.         }
  974.         WPViews.view_frontend_utils.render_frontend_datepicker();
  975.     };
  976.    
  977.     /**
  978.     * pagination_slide
  979.     *
  980.     * Routes to the right pagination effect callback
  981.     *
  982.     * @param object data
  983.     *
  984.     * @since 1.9
  985.     */
  986.    
  987.     self.pagination_slide = function( data ) {
  988.         var slide_data = $.extend( {}, self.slide_data_defaults, data );
  989.        
  990.         switch ( slide_data.effect ) {
  991.             case 'slideleft':
  992.                 slide_data.next = true;
  993.                 slide_data.effect = 'slideh';
  994.                 break;
  995.             case 'slideright':
  996.                 slide_data.next = false;
  997.                 slide_data.effect = 'slideh';
  998.                 break;
  999.             case 'slidedown':
  1000.                 slide_data.next = false;
  1001.                 slide_data.effect = 'slidev';
  1002.                 break;
  1003.             case 'slideup':
  1004.                 slide_data.next = true;
  1005.                 slide_data.effect = 'slidev';
  1006.                 break;
  1007.         }
  1008.        
  1009.         if ( ! slide_data.effect in self.pagination_effects ) {
  1010.             slide_data.effect = 'fade';
  1011.         }
  1012.        
  1013.         self.pagination_effects[ slide_data.effect ]( slide_data );
  1014.     };
  1015.    
  1016.     /**
  1017.     * pagination_queue_trigger
  1018.     *
  1019.     * Manage multiple and fast pagination requests.
  1020.     *
  1021.     * @param int        view_number
  1022.     * @param boolean    next
  1023.     * @param object     wpvPaginatorFilter
  1024.     *
  1025.     * @todo why do we pass next and wpvPaginatorFilter here?
  1026.     *
  1027.     * @since 1.9
  1028.     */
  1029.    
  1030.     self.pagination_queue_trigger = function( view_number, next, wpvPaginatorFilter ) {
  1031.         var args,
  1032.         page,
  1033.         max_pages;
  1034.         if ( window.wpvPaginationQueue.hasOwnProperty( view_number ) && window.wpvPaginationQueue[view_number].length > 0 ) {
  1035.         // when double clicking,we have set window.wpvPaginationQueue[view_number][1] and maybe we could tweak it to change the page number. Maybe checkin historyP
  1036.             window.wpvPaginationQueue[view_number].sort();
  1037.             args = window.wpvPaginationQueue[view_number][0];
  1038.             window.wpvPaginationQueue[view_number].splice(0, 1);
  1039.             page = args[1];
  1040.             max_pages = args[4];
  1041.             if ( page > max_pages ) {
  1042.                 page = 1;
  1043.             } else if ( page < 1 ) {
  1044.                 page = max_pages;
  1045.             }
  1046.             self.trigger_pagination( view_number, page );
  1047.         }
  1048.     };
  1049.    
  1050.     // ------------------------------------
  1051.     // Events
  1052.     // ------------------------------------
  1053.    
  1054.     /**
  1055.     * Manage pagination triggered from prev/next links
  1056.     *
  1057.     * @since 1.9
  1058.     */
  1059.    
  1060.     $( document ).on( 'click', '.js-wpv-pagination-next-link, .js-wpv-pagination-previous-link', function( e ) {
  1061.         e.preventDefault();
  1062.         var thiz = $( this ),
  1063.         view_number = thiz.data( 'viewnumber' ),
  1064.         page = thiz.data( 'page' );
  1065.         wpv_stop_rollover[ view_number ] = true;
  1066.         return self.trigger_pagination( view_number, page );
  1067.     });
  1068.    
  1069.     /**
  1070.     * Manage pagination triggered by a change in the page selector dropdown
  1071.     *
  1072.     * @since 1.9
  1073.     */
  1074.    
  1075.     $( document ).on( 'change', '.js-wpv-page-selector', function( e ) {
  1076.         e.preventDefault();
  1077.         var thiz = $( this ),
  1078.         view_number = thiz.data( 'viewnumber' ),
  1079.         page = thiz.val();
  1080.         wpv_stop_rollover[ view_number ] = true
  1081.         return self.trigger_pagination( view_number, page );
  1082.     });
  1083.    
  1084.     /**
  1085.     * Manage pagination triggered by a click on a pagination link.
  1086.     *
  1087.     * @since 1.9
  1088.     *
  1089.     * @note Safari on iOS might need to also listen to the touchstart event. Investigate this!
  1090.     */
  1091.    
  1092.     $( document ).on( 'click', '.js-wpv-pagination-link', function( e ) {
  1093.         e.preventDefault();
  1094.         var thiz = $( this ),
  1095.         data_collected = {};
  1096.         data_collected.view_number = thiz.data( 'viewnumber');
  1097.         data_collected.page = thiz.data( 'page' );
  1098.         var i;
  1099.         // TODO this can be improved: we should not need a loop here at all
  1100.         for ( i = 1; i <= data_collected.max_pages; i++ ) {
  1101.             if ( i === data_collected.page ) {
  1102.                 $( '#wpv-page-link-' + data_collected.view_number + '-' + i ).addClass( 'wpv_page_current' );
  1103.             } else {
  1104.                 $( '#wpv-page-link-' + data_collected.view_number + '-' + i ).removeClass( 'wpv_page_current' );
  1105.             }
  1106.            
  1107.         }
  1108.         wpv_stop_rollover[ data_collected.view_number ] = true
  1109.         self.trigger_pagination( data_collected.view_number, data_collected.page );
  1110.     });
  1111.    
  1112.     /*
  1113.     $( document ).on( 'click', '.js-wpv-pagination-pause-rollover', function( e ) {
  1114.         e.preventDefault();
  1115.         var view_num = $( this ).data( 'viewnumber' );
  1116.         wpv_stop_rollover[view_num] = true;
  1117.     });
  1118.    
  1119.     $( document ).on( 'click', '.js-wpv-pagination-resume-rollover', function( e ) {
  1120.         e.preventDefault();
  1121.         var view_num = $( this ).data( 'viewnumber' );
  1122.         delete wpv_stop_rollover[view_num];
  1123.     });
  1124.     */
  1125.    
  1126.     // ------------------------------------
  1127.     // Custom events
  1128.     // ------------------------------------
  1129.    
  1130.     /**
  1131.     * js_event_wpv_pagination_completed
  1132.     *
  1133.     * Event fired after a pagination transition has been completed
  1134.     *
  1135.     * @param data
  1136.     *   - view_unique_id
  1137.     *   - effect
  1138.     *   - speed
  1139.     *   - layout
  1140.     *
  1141.     * @since 1.9
  1142.     */
  1143.    
  1144.     $( document ).on( 'js_event_wpv_pagination_completed', function( event, data ) {
  1145.         WPViews.view_frontend_utils.render_frontend_media_shortcodes( data.layout );
  1146.     });
  1147.    
  1148.     // ------------------------------------
  1149.     // Init
  1150.     // ------------------------------------
  1151.    
  1152.     /**
  1153.     * init_effects
  1154.     *
  1155.     * Define the default pagination effects, can be extended by third parties.
  1156.     * Each callback gets the foloring parameters:
  1157.     * @param object slide_data
  1158.     *
  1159.     * @since 1.11
  1160.     */
  1161.    
  1162.     self.init_effects = function() {
  1163.         self.pagination_effects = {
  1164.             infinite: function( slide_data ) {
  1165.                
  1166.                 if ( slide_data.page != ( self.paged_views[ slide_data.view_number ].page + 1 ) ) {
  1167.                     // This should never happen! See self.pagination_effects_conditions
  1168.                     $( '#wpv_slide_loading_img_' + slide_data.view_number ).fadeOut( function() {
  1169.                         $( this ).remove();
  1170.                     });
  1171.                     slide_data.wpvPaginatorLayout
  1172.                         .animate( { opacity: 1 }, 300 )
  1173.                         .unwrap()// If it got here, it has a -response suffix in the ID and is wrapped in an auxiliar div
  1174.                         .attr( 'id', 'wpv-view-layout-' + slide_data.view_number  );
  1175.                     window.wpvPaginationAjaxLoaded[slide_data.view_number] = true;
  1176.                     window.wpvPaginationAnimationFinished[slide_data.view_number] = true;
  1177.                    
  1178.                 } else {
  1179.                
  1180.                     // content.match(/<!-- HOOK OPEN -->(W?)\<!-- HOOK CLOSE -->/);
  1181.                     var data_for_events = {},
  1182.                     data_for_history = {};
  1183.                    
  1184.                     data_for_events.view_unique_id  = slide_data.view_number;
  1185.                     data_for_events.effect          = 'infinite';
  1186.                     data_for_events.speed           = slide_data.speed;
  1187.                    
  1188.                     data_for_history.view_number                = slide_data.view_number;
  1189.                     data_for_history.page                       = slide_data.page;
  1190.                     data_for_history.effect                     = 'infinite';
  1191.                     data_for_history.pagination_page_permalink  = slide_data.pagination_page_permalink;
  1192.                    
  1193.                     if (
  1194.                         slide_data.wpvPaginatorLayout.find( '.js-wpv-loop' ).length > 0
  1195.                         && slide_data.responseView.find( '.js-wpv-loop' ).length > 0
  1196.                     ) {
  1197.                         slide_data.responseView
  1198.                             .find( '.js-wpv-loop' )
  1199.                             .children()
  1200.                                 .addClass( 'wpv-loop-item-blink' )
  1201.                                 .css( { 'opacity': '0.3' } );
  1202.                         slide_data.responseView
  1203.                             .find( '.js-wpv-loop' )
  1204.                             .prepend(
  1205.                                 slide_data.wpvPaginatorLayout
  1206.                                     .find( '.js-wpv-loop' )
  1207.                                     .html()
  1208.                             );
  1209.                         slide_data.wpvPaginatorLayout.html( slide_data.responseView.html() );
  1210.                         slide_data.wpvPaginatorLayout
  1211.                             .find( '.wpv-loop-item-blink' )
  1212.                                 .removeClass( 'wpv-loop-item-blink' )
  1213.                                 .animate( { opacity: 1 }, slide_data.speed );
  1214.                                
  1215.                     } else {
  1216.                         var oldHTML = slide_data.wpvPaginatorLayout.html(),
  1217.                         oldArray = oldHTML.split( '<!-- WPV_Infinite_Scroll -->', 3 ),
  1218.                         oldReplace = ( oldArray.length > 2 ) ? oldArray[1] : '';
  1219.                         slide_data.wpvPaginatorLayout.html(
  1220.                             slide_data.responseView.html().replace(
  1221.                                 '<!-- WPV_Infinite_Scroll_Insert -->',
  1222.                                 oldReplace
  1223.                             )
  1224.                         );
  1225.                     }
  1226.                     data_for_events.layout = slide_data.wpvPaginatorLayout;
  1227.                     $( '#wpv_slide_loading_img_' + slide_data.view_number ).fadeOut( function() {
  1228.                         $( this ).remove();
  1229.                     });
  1230.                     slide_data.wpvPaginatorLayout
  1231.                         .animate( { opacity: 1 }, 300 )
  1232.                         .unwrap()
  1233.                         .attr( 'id', 'wpv-view-layout-' + slide_data.view_number  );
  1234.                                        
  1235.                     slide_data.wpvPaginatorFilter.html( slide_data.responseFilter );
  1236.                    
  1237.                     self.paged_views[ slide_data.view_number ].page = slide_data.page;
  1238.                    
  1239.                     window.wpvPaginationAjaxLoaded[slide_data.view_number] = true;
  1240.                     window.wpvPaginationAnimationFinished[slide_data.view_number] = true;
  1241.                     slide_data.callback_next_func();
  1242.                     self.manage_browser_history( data_for_history );
  1243.                     $( document ).trigger( 'js_event_wpv_pagination_completed', [ data_for_events ] );
  1244.                     self.pagination_queue_trigger( slide_data.view_number, slide_data.next, slide_data.wpvPaginatorFilter );
  1245.                 }
  1246.             },
  1247.             slideh: function( slide_data ) {
  1248.                 var height = slide_data.wpvPaginatorLayout.height(),
  1249.                 old_height = slide_data.wpvPaginatorLayout.outerHeight(),
  1250.                 new_height,
  1251.                 data_for_events = {},
  1252.                 data_for_history = {};
  1253.                
  1254.                 data_for_events.view_unique_id  = slide_data.view_number;
  1255.                 data_for_events.effect          = 'slideh';
  1256.                 data_for_events.speed           = slide_data.speed;
  1257.                 data_for_events.layout          = slide_data.responseView;
  1258.                
  1259.                 data_for_history.view_number                = slide_data.view_number;
  1260.                 data_for_history.page                       = slide_data.page;
  1261.                 data_for_history.effect                     = 'slideh';
  1262.                 data_for_history.pagination_page_permalink  = slide_data.pagination_page_permalink;
  1263.                
  1264.                 if ( slide_data.next === true ) {
  1265.                     slide_data.wpvPaginatorLayout.css( 'float', 'left' );
  1266.                     slide_data.responseView.css( {"float": "left", "visibility": "visible"} );
  1267.                     slide_data.wpvPaginatorLayout
  1268.                         .after( slide_data.responseView )
  1269.                         .parent()
  1270.                             .children()
  1271.                                 .wrapAll( '<div style="width:5000px;" />' );
  1272.                     $( '#wpv_slide_loading_img_' + slide_data.view_number ).fadeOut(function() {
  1273.                         $( this ).remove();
  1274.                     });
  1275.                     new_height = slide_data.responseView.outerHeight();
  1276.                     if ( old_height === new_height ) {
  1277.                         slide_data.wpvPaginatorLayout
  1278.                             .parent()
  1279.                                 .animate( {marginLeft: '-' + slide_data.wpvPaginatorLayout.outerWidth()+'px'}, slide_data.speed+500, function() {
  1280.                                     slide_data.responseView.css( {'position': 'static', 'float': 'none'} );
  1281.                                     slide_data.wpvPaginatorLayout.unwrap().unwrap().remove();
  1282.                                    
  1283.                                     slide_data.wpvPaginatorFilter.html( slide_data.responseFilter );
  1284.                                    
  1285.                                     window.wpvPaginationAjaxLoaded[slide_data.view_number] = true;
  1286.                                     window.wpvPaginationAnimationFinished[slide_data.view_number] = true;
  1287.                                     slide_data.callback_next_func();
  1288.                                     self.manage_browser_history( data_for_history );
  1289.                                     $( document ).trigger( 'js_event_wpv_pagination_completed', [ data_for_events ] );
  1290.                                     self.pagination_queue_trigger( slide_data.view_number, slide_data.next, slide_data.wpvPaginatorFilter );
  1291.                                 });
  1292.                     } else if ( old_height > new_height ) {
  1293.                         slide_data.wpvPaginatorLayout
  1294.                             .parent()
  1295.                                 .animate( {marginLeft: '-' + slide_data.wpvPaginatorLayout.outerWidth()+'px'}, slide_data.speed+500, function() {
  1296.                                     slide_data.wpvPaginatorLayout
  1297.                                         .parent().parent()
  1298.                                             .animate( {height: slide_data.responseView.outerHeight()+'px'}, slide_data.speed/2, function() {
  1299.                                                 slide_data.responseView.css( {'position': 'static', 'float': 'none'} );
  1300.                                                 slide_data.wpvPaginatorLayout.unwrap().unwrap().remove();
  1301.                                                
  1302.                                                 slide_data.wpvPaginatorFilter.html( slide_data.responseFilter );
  1303.                                                
  1304.                                                 window.wpvPaginationAjaxLoaded[slide_data.view_number] = true;
  1305.                                                 window.wpvPaginationAnimationFinished[slide_data.view_number] = true;
  1306.                                                 slide_data.callback_next_func();
  1307.                                                 self.manage_browser_history( data_for_history );
  1308.                                                 $( document ).trigger( 'js_event_wpv_pagination_completed', [ data_for_events ] );
  1309.                                                 self.pagination_queue_trigger( slide_data.view_number, slide_data.next, slide_data.wpvPaginatorFilter );
  1310.                                             });
  1311.                                 });
  1312.                     } else {
  1313.                         slide_data.wpvPaginatorLayout
  1314.                             .parent().parent()
  1315.                                 .animate( {height: slide_data.responseView.outerHeight()+'px'}, slide_data.speed/2, function() {
  1316.                                     slide_data.wpvPaginatorLayout
  1317.                                         .parent()
  1318.                                             .animate( {marginLeft: '-' + slide_data.wpvPaginatorLayout.outerWidth()+'px'}, slide_data.speed+500, function() {
  1319.                                                 slide_data.responseView.css( {'position': 'static', 'float': 'none'} );
  1320.                                                 slide_data.wpvPaginatorLayout.unwrap().unwrap().remove();
  1321.                                                
  1322.                                                 slide_data.wpvPaginatorFilter.html( slide_data.responseFilter );
  1323.                                                
  1324.                                                 window.wpvPaginationAjaxLoaded[slide_data.view_number] = true;
  1325.                                                 window.wpvPaginationAnimationFinished[slide_data.view_number] = true;
  1326.                                                 slide_data.callback_next_func();
  1327.                                                 self.manage_browser_history( data_for_history );
  1328.                                                 $( document ).trigger( 'js_event_wpv_pagination_completed', [ data_for_events ] );
  1329.                                                 self.pagination_queue_trigger( slide_data.view_number, slide_data.next, slide_data.wpvPaginatorFilter );
  1330.                                             });
  1331.                                 });
  1332.                     }
  1333.                 } else {
  1334.                     slide_data.wpvPaginatorLayout.css( 'float', 'right' );
  1335.                     slide_data.responseView.css( {'float': 'right', 'visibility': 'visible'} );
  1336.                     slide_data.wpvPaginatorLayout
  1337.                         .after( slide_data.responseView )
  1338.                         .parent()
  1339.                             .children()
  1340.                                 .wrapAll( '<div style="height:' + height +  ';width:' + ( slide_data.responseView.outerWidth() + slide_data.wpvPaginatorLayout.outerWidth() ) + 'px; margin-left:-' + ( slide_data.wpvPaginatorLayout.outerWidth() ) + 'px;" />' );
  1341.                     $( '#wpv_slide_loading_img_' + slide_data.view_number ).fadeOut( function() {
  1342.                         $( this ).remove();
  1343.                     });
  1344.                     new_height = slide_data.responseView.outerHeight();
  1345.                     if ( old_height === new_height ) {
  1346.                         slide_data.wpvPaginatorLayout
  1347.                             .parent()
  1348.                                 .animate( {marginLeft: '0px'}, slide_data.speed+500, function() {
  1349.                                     slide_data.responseView.css( {'position': 'static', 'margin': '0px', 'float': 'none'} );
  1350.                                     slide_data.wpvPaginatorLayout.unwrap().unwrap().remove();
  1351.                                    
  1352.                                     slide_data.wpvPaginatorFilter.html( slide_data.responseFilter );
  1353.                                    
  1354.                                     window.wpvPaginationAjaxLoaded[slide_data.view_number] = true;
  1355.                                     window.wpvPaginationAnimationFinished[slide_data.view_number] = true;
  1356.                                     slide_data.callback_next_func();
  1357.                                     self.manage_browser_history( data_for_history );
  1358.                                     $( document ).trigger( 'js_event_wpv_pagination_completed', [ data_for_events ] );
  1359.                                     self.pagination_queue_trigger( slide_data.view_number, slide_data.next, slide_data.wpvPaginatorFilter );
  1360.                                 });
  1361.                     } else if ( old_height > new_height ) {
  1362.                         slide_data.wpvPaginatorLayout
  1363.                             .parent()
  1364.                                 .animate( {marginLeft: '0px'}, slide_data.speed+500, function() {
  1365.                                     slide_data.wpvPaginatorLayout
  1366.                                         .parent().parent()
  1367.                                             .animate( {height: slide_data.responseView.outerHeight()+'px'}, slide_data.speed/2, function() {
  1368.                                                 slide_data.responseView.css( {'position': 'static', 'margin': '0px', 'float': 'none'} );
  1369.                                                 slide_data.wpvPaginatorLayout.unwrap().unwrap().remove();
  1370.                                                
  1371.                                                 slide_data.wpvPaginatorFilter.html( slide_data.responseFilter );
  1372.                                                
  1373.                                                 window.wpvPaginationAjaxLoaded[slide_data.view_number] = true;
  1374.                                                 window.wpvPaginationAnimationFinished[slide_data.view_number] = true;
  1375.                                                 slide_data.callback_next_func();
  1376.                                                 self.manage_browser_history( data_for_history );
  1377.                                                 $( document ).trigger( 'js_event_wpv_pagination_completed', [ data_for_events ] );
  1378.                                                 self.pagination_queue_trigger( slide_data.view_number, slide_data.next, slide_data.wpvPaginatorFilter );
  1379.                                             });
  1380.                                 });
  1381.                     } else {
  1382.                         slide_data.wpvPaginatorLayout
  1383.                             .parent().parent()
  1384.                                 .animate( {height: slide_data.responseView.outerHeight()+'px'}, slide_data.speed/2, function() {
  1385.                                     slide_data.wpvPaginatorLayout
  1386.                                         .parent()
  1387.                                             .animate( {marginLeft: '0px'}, slide_data.speed+500, function() {
  1388.                                                 slide_data.responseView.css( {'position': 'static', 'margin': '0px', 'float': 'none'} );
  1389.                                                 slide_data.wpvPaginatorLayout.unwrap().unwrap().remove();
  1390.                                                
  1391.                                                 slide_data.wpvPaginatorFilter.html( slide_data.responseFilter );
  1392.                                                
  1393.                                                 window.wpvPaginationAjaxLoaded[slide_data.view_number] = true;
  1394.                                                 window.wpvPaginationAnimationFinished[slide_data.view_number] = true;
  1395.                                                 slide_data.callback_next_func();
  1396.                                                 self.manage_browser_history( data_for_history );
  1397.                                                 $( document ).trigger( 'js_event_wpv_pagination_completed', [ data_for_events ] );
  1398.                                                 self.pagination_queue_trigger( slide_data.view_number, slide_data.next, slide_data.wpvPaginatorFilter );
  1399.                                             });
  1400.                                 });
  1401.                     }
  1402.                 }
  1403.             },
  1404.             slidev: function( slide_data ) {
  1405.                 var old_height = slide_data.wpvPaginatorLayout.outerHeight(),
  1406.                 new_height,
  1407.                 data_for_events = {},
  1408.                 data_for_history = {};
  1409.                
  1410.                 data_for_events.view_unique_id  = slide_data.view_number;
  1411.                 data_for_events.effect          = 'slidev';
  1412.                 data_for_events.speed           = slide_data.speed;
  1413.                 data_for_events.layout          = slide_data.responseView;
  1414.                
  1415.                 data_for_history.view_number                = slide_data.view_number;
  1416.                 data_for_history.page                       = slide_data.page;
  1417.                 data_for_history.effect                     = 'slidev';
  1418.                 data_for_history.pagination_page_permalink  = slide_data.pagination_page_permalink;
  1419.                
  1420.                 if ( slide_data.next === true ) {
  1421.                     slide_data.responseView.css( 'visibility', 'visible' );
  1422.                     slide_data.wpvPaginatorLayout
  1423.                         .after( slide_data.responseView )
  1424.                         .parent()
  1425.                             .children()
  1426.                                 .wrapAll( '<div />' );
  1427.                     $( '#wpv_slide_loading_img_' + slide_data.view_number ).fadeOut( function(){
  1428.                         $( this ).remove();
  1429.                     });
  1430.                     new_height = slide_data.responseView.outerHeight();
  1431.                     if ( old_height === new_height ) {
  1432.                         slide_data.wpvPaginatorLayout
  1433.                             .parent()
  1434.                                 .animate( {marginTop: '-' + slide_data.responseView.outerHeight()+'px'}, slide_data.speed+500, function() {
  1435.                                     slide_data.responseView.css( {'position': 'static', 'margin': '0px'} );
  1436.                                     slide_data.wpvPaginatorLayout.unwrap().unwrap().remove();
  1437.                                    
  1438.                                     slide_data.wpvPaginatorFilter.html( slide_data.responseFilter );
  1439.                                    
  1440.                                     window.wpvPaginationAjaxLoaded[slide_data.view_number] = true;
  1441.                                     window.wpvPaginationAnimationFinished[slide_data.view_number] = true;
  1442.                                     slide_data.callback_next_func();
  1443.                                     self.manage_browser_history( data_for_history );
  1444.                                     $( document ).trigger( 'js_event_wpv_pagination_completed', [ data_for_events ] );
  1445.                                     self.pagination_queue_trigger( slide_data.view_number, slide_data.next, slide_data.wpvPaginatorFilter );
  1446.                                 });
  1447.                     } else if ( old_height > new_height ) {
  1448.                         slide_data.wpvPaginatorLayout
  1449.                             .parent()
  1450.                                 .animate( {marginTop: '-'+old_height+'px'}, slide_data.speed+500, function() {
  1451.                                     slide_data.wpvPaginatorLayout
  1452.                                         .parent().parent()
  1453.                                             .animate( {height: slide_data.responseView.outerHeight()+'px'}, slide_data.speed/2, function() {
  1454.                                                 slide_data.responseView.css( {'position': 'static', 'margin': '0px'} );
  1455.                                                 slide_data.wpvPaginatorLayout.unwrap().unwrap().remove();
  1456.                                                
  1457.                                                 slide_data.wpvPaginatorFilter.html( slide_data.responseFilter );
  1458.                                                
  1459.                                                 window.wpvPaginationAjaxLoaded[slide_data.view_number] = true;
  1460.                                                 window.wpvPaginationAnimationFinished[slide_data.view_number] = true;
  1461.                                                 slide_data.callback_next_func();
  1462.                                                 self.manage_browser_history( data_for_history );
  1463.                                                 $( document ).trigger( 'js_event_wpv_pagination_completed', [ data_for_events ] );
  1464.                                                 self.pagination_queue_trigger( slide_data.view_number, slide_data.next, slide_data.wpvPaginatorFilter );
  1465.                                             });
  1466.                                 });
  1467.                     } else {
  1468.                         slide_data.wpvPaginatorLayout
  1469.                             .parent().parent()
  1470.                                 .animate( {height: slide_data.responseView.outerHeight()+'px'}, slide_data.speed/2, function() {
  1471.                                     slide_data.wpvPaginatorLayout
  1472.                                         .parent()
  1473.                                             .animate( {marginTop: '-'+old_height+'px'}, slide_data.speed+500, function() {
  1474.                                                 slide_data.responseView.css( {'position': 'static', 'margin': '0px'} );
  1475.                                                 slide_data.wpvPaginatorLayout.unwrap().unwrap().remove();
  1476.                                                
  1477.                                                 slide_data.wpvPaginatorFilter.html( slide_data.responseFilter );
  1478.                                                
  1479.                                                 window.wpvPaginationAjaxLoaded[slide_data.view_number] = true;
  1480.                                                 window.wpvPaginationAnimationFinished[slide_data.view_number] = true;
  1481.                                                 slide_data.callback_next_func();
  1482.                                                 self.manage_browser_history( data_for_history );
  1483.                                                 $( document ).trigger( 'js_event_wpv_pagination_completed', [ data_for_events ] );
  1484.                                                 self.pagination_queue_trigger( slide_data.view_number, slide_data.next, slide_data.wpvPaginatorFilter );
  1485.                                             });
  1486.                                 });
  1487.                     }
  1488.                 } else {
  1489.                     slide_data.responseView.css( 'visibility', 'visible' );
  1490.                     slide_data.wpvPaginatorLayout
  1491.                         .before( slide_data.responseView )
  1492.                         .parent()
  1493.                             .children()
  1494.                                 .wrapAll( '<div />' );
  1495.                     $( '#wpv_slide_loading_img_' + slide_data.view_number ).fadeOut( function() {
  1496.                         $( this ).remove();
  1497.                     });
  1498.                     new_height = slide_data.responseView.outerHeight();
  1499.                     slide_data.wpvPaginatorLayout.parent().css( {'position': 'relative', 'margin-top': '-' + slide_data.responseView.outerHeight() + 'px'} );
  1500.                     if ( old_height === new_height ) {
  1501.                         slide_data.wpvPaginatorLayout
  1502.                             .parent()
  1503.                                 .animate( {marginTop: '0px'}, slide_data.speed+500, function() {
  1504.                                     slide_data.responseView.css( {'position': 'static', 'margin': '0px'} );
  1505.                                     slide_data.wpvPaginatorLayout.unwrap().unwrap().remove();
  1506.                                    
  1507.                                     slide_data.wpvPaginatorFilter.html( slide_data.responseFilter );
  1508.                                    
  1509.                                     window.wpvPaginationAjaxLoaded[slide_data.view_number] = true;
  1510.                                     window.wpvPaginationAnimationFinished[slide_data.view_number] = true;
  1511.                                     slide_data.callback_next_func();
  1512.                                     self.manage_browser_history( data_for_history );
  1513.                                     $( document ).trigger( 'js_event_wpv_pagination_completed', [ data_for_events ] );
  1514.                                     self.pagination_queue_trigger( slide_data.view_number, slide_data.next, slide_data.wpvPaginatorFilter );
  1515.                                 });
  1516.                     } else if ( old_height > new_height ) {
  1517.                         slide_data.wpvPaginatorLayout
  1518.                             .parent()
  1519.                                 .animate( {marginTop: '0px'}, slide_data.speed+500, function() {
  1520.                                     slide_data.wpvPaginatorLayout
  1521.                                         .parent().parent()
  1522.                                             .animate( {height: slide_data.responseView.outerHeight()+'px'}, slide_data.speed/2, function() {
  1523.                                                 slide_data.responseView.css( {'position': 'static', 'margin': '0px'} );
  1524.                                                 slide_data.wpvPaginatorLayout.unwrap().unwrap().remove();
  1525.                                                
  1526.                                                 slide_data.wpvPaginatorFilter.html( slide_data.responseFilter );
  1527.                                                
  1528.                                                 window.wpvPaginationAjaxLoaded[slide_data.view_number] = true;
  1529.                                                 window.wpvPaginationAnimationFinished[slide_data.view_number] = true;
  1530.                                                 slide_data.callback_next_func();
  1531.                                                 self.manage_browser_history( data_for_history );
  1532.                                                 $( document ).trigger( 'js_event_wpv_pagination_completed', [ data_for_events ] );
  1533.                                                 self.pagination_queue_trigger( slide_data.view_number, slide_data.next, slide_data.wpvPaginatorFilter );
  1534.                                             });
  1535.                         });
  1536.                     } else {
  1537.                         slide_data.wpvPaginatorLayout
  1538.                             .parent().parent()
  1539.                                 .animate( {height: slide_data.responseView.outerHeight()+'px'}, slide_data.speed/2, function() {
  1540.                                     slide_data.wpvPaginatorLayout
  1541.                                         .parent()
  1542.                                             .animate( {marginTop: '0px'}, slide_data.speed+500, function() {
  1543.                                                 slide_data.responseView.css( {'position': 'static', 'margin': '0px'} );
  1544.                                                 slide_data.wpvPaginatorLayout.unwrap().unwrap().remove();
  1545.                                                
  1546.                                                 slide_data.wpvPaginatorFilter.html( slide_data.responseFilter );
  1547.                                                
  1548.                                                 window.wpvPaginationAjaxLoaded[slide_data.view_number] = true;
  1549.                                                 window.wpvPaginationAnimationFinished[slide_data.view_number] = true;
  1550.                                                 slide_data.callback_next_func();
  1551.                                                 self.manage_browser_history( data_for_history );
  1552.                                                 $( document ).trigger( 'js_event_wpv_pagination_completed', [ data_for_events ] );
  1553.                                                 self.pagination_queue_trigger( slide_data.view_number, slide_data.next, slide_data.wpvPaginatorFilter );
  1554.                                             });
  1555.                                 });
  1556.                     }
  1557.                 }
  1558.             },
  1559.             fade: function( slide_data ) {
  1560.                 var old_height = slide_data.wpvPaginatorLayout.outerHeight(),
  1561.                 new_height,
  1562.                 data_for_events = {},
  1563.                 data_for_history = {};
  1564.  
  1565.                 data_for_events.view_unique_id  = slide_data.view_number;
  1566.                 data_for_events.effect          = 'fade';
  1567.                 data_for_events.speed           = slide_data.speed;
  1568.                 data_for_events.layout          = slide_data.responseView;
  1569.                
  1570.                 data_for_history.view_number                = slide_data.view_number;
  1571.                 data_for_history.page                       = slide_data.page;
  1572.                 data_for_history.effect                     = 'fade';
  1573.                 data_for_history.pagination_page_permalink  = slide_data.pagination_page_permalink;
  1574.                
  1575.                 $( '#wpv_slide_loading_img_' + slide_data.view_number ).fadeOut( function() {
  1576.                     $( this ).remove();
  1577.                 });
  1578.                
  1579.                 slide_data.wpvPaginatorLayout
  1580.                     .css( {'position': 'absolute', 'z-index': '5'} )
  1581.                     .after( slide_data.responseView )
  1582.                         .next()
  1583.                         .css( 'position', 'static' );
  1584.                 new_height = slide_data.responseView.outerHeight();
  1585.                 if ( old_height === new_height ) {
  1586.                     slide_data.wpvPaginatorLayout.fadeOut( slide_data.speed, function() {
  1587.                         slide_data.wpvPaginatorLayout.unwrap().remove();
  1588.                        
  1589.                         slide_data.wpvPaginatorFilter.html( slide_data.responseFilter );
  1590.                        
  1591.                         window.wpvPaginationAjaxLoaded[slide_data.view_number] = true;
  1592.                         window.wpvPaginationAnimationFinished[slide_data.view_number] = true;
  1593.                         slide_data.callback_next_func();
  1594.                         self.manage_browser_history( data_for_history );
  1595.                         $( document ).trigger( 'js_event_wpv_pagination_completed', [ data_for_events ] );
  1596.                         WPViews.view_pagination.pagination_queue_trigger( slide_data.view_number, slide_data.next, slide_data.wpvPaginatorFilter );
  1597.                     });
  1598.                     slide_data.responseView
  1599.                         .hide()
  1600.                         .css( 'visibility', 'visible' )
  1601.                         .fadeIn( slide_data.speed );
  1602.                 } else {
  1603.                     slide_data.wpvPaginatorLayout.fadeOut( slide_data.speed, function() {
  1604.                         slide_data.wpvPaginatorLayout
  1605.                             .parent()
  1606.                                 .animate( {height: new_height+'px'}, slide_data.speed, function() {
  1607.                                     slide_data.wpvPaginatorLayout.unwrap().remove();
  1608.                                    
  1609.                                     slide_data.wpvPaginatorFilter.html( slide_data.responseFilter );
  1610.                                    
  1611.                                     window.wpvPaginationAjaxLoaded[slide_data.view_number] = true;
  1612.                                     window.wpvPaginationAnimationFinished[slide_data.view_number] = true;
  1613.                                     slide_data.callback_next_func();
  1614.                                     self.manage_browser_history( data_for_history );
  1615.                                     $( document ).trigger( 'js_event_wpv_pagination_completed', [ data_for_events ] );
  1616.                                     WPViews.view_pagination.pagination_queue_trigger( slide_data.view_number, slide_data.next, slide_data.wpvPaginatorFilter );
  1617.                                     slide_data.responseView
  1618.                                         .hide()
  1619.                                         .css( 'visibility', 'visible' )
  1620.                                         .fadeIn( slide_data.speed );
  1621.                                 });
  1622.                     });
  1623.                 }
  1624.             }
  1625.         };
  1626.    
  1627.     };
  1628.    
  1629.     /**
  1630.     * manage_browser_history
  1631.     *
  1632.     * Makes the history in the browser work with AJAX pagination, except infinite scrolling and sliders
  1633.     *
  1634.     * @note Some View IDs are stored in WPViews.rollower_ids as numbers, so we need to check parseInt( data.view_number ) too
  1635.     *
  1636.     * @param object data
  1637.     *
  1638.     * @since 1.11
  1639.     */
  1640.    
  1641.     self.manage_browser_history = function( data ) {
  1642.         var num_view_number = $.isNumeric( data.view_number ) ? parseInt( data.view_number ) : data.view_number;
  1643.         if (
  1644.             ! _.has( WPViews, 'rollower_ids' )
  1645.             || (
  1646.                 ! _.contains( WPViews.rollower_ids, data.view_number )
  1647.                 && ! _.contains( WPViews.rollower_ids, num_view_number )
  1648.             )
  1649.         ) {
  1650.             if ( self.add_paginated_history == true ) {
  1651.                 if ( ! _.contains( self.pagination_effect_state_keep, data.effect ) ) {
  1652.                     if ( _.contains( self.pagination_effect_state_replace, data.effect ) ) {
  1653.                         history.replaceState( null, '', data.pagination_page_permalink );
  1654.                     } else {
  1655.                         self.last_paginated_view.push( data.view_number );
  1656.                         state_obj = {
  1657.                             view_number: data.view_number,
  1658.                             page: data.page
  1659.                         };
  1660.                         history.pushState( state_obj, '', data.pagination_page_permalink );
  1661.                         // http://scrollsample.appspot.com/items
  1662.                         // http://html5.gingerhost.com/
  1663.                         self.paginated_history_reach = self.paginated_history_reach + 1;
  1664.                     }
  1665.                 }
  1666.             } else {
  1667.                 self.add_paginated_history = true;
  1668.             }
  1669.         }
  1670.     };
  1671.    
  1672.     /**
  1673.     * window.onpopstate
  1674.     *
  1675.     * Manages the browser back button click based on daya added by Views pagination
  1676.     *
  1677.     * @since 1.11
  1678.     */
  1679.    
  1680.     window.onpopstate = function( event ) {
  1681.         if ( event.state == null ) {
  1682.             var last_paginated_view_number = self.last_paginated_view.pop();
  1683.             if ( last_paginated_view_number != undefined ) {
  1684.                 self.add_paginated_history = false;
  1685.                 self.paged_views_initial_page[ last_paginated_view_number ] = self.paged_views_initial_page[ last_paginated_view_number ] || 1;
  1686.                 self.trigger_pagination( last_paginated_view_number, self.paged_views_initial_page[ last_paginated_view_number ] );
  1687.             }
  1688.         } else {
  1689.             if (
  1690.                 _.has( event.state, 'view_number' )
  1691.                 && _.has( event.state, 'page' )
  1692.             ) {
  1693.                 self.add_paginated_history = false;
  1694.                 self.trigger_pagination( event.state.view_number, event.state.page );
  1695.             }
  1696.         }
  1697.     };
  1698.    
  1699.     /**
  1700.     * When the parametric search with automatic results has been completed, reset the pagination history and add a state with the current URL
  1701.     *
  1702.     * @since 1.11
  1703.     */
  1704.    
  1705.     $( document ).on( 'js_event_wpv_parametric_search_results_updated', function( event, data ) {
  1706.         var pagination_page_permalink = data.pagepermalink;
  1707.         self.paged_views[ data.view_unique_id ] = data.layout.data( 'pagination' );
  1708.         window.wpvCachedPages[ data.view_unique_id ] = [];
  1709.         self.last_paginated_view = [];
  1710.         if ( self.paginated_history_reach > 0 ) {
  1711.             window.history.go( -Math.abs( self.paginated_history_reach ) );
  1712.             self.paginated_history_reach = 0;
  1713.         }
  1714.         // HACK! HACK! HACK!
  1715.         // Chrome and Safari execute history.replaceState before history.go so we end up with a mess
  1716.         // That is why we need to set a timeout here
  1717.         // See https://code.google.com/p/chromium/issues/detail?id=529810
  1718.         setTimeout( function() {
  1719.             history.replaceState( null, '', pagination_page_permalink );
  1720.         }, 100 );
  1721.     });
  1722.    
  1723.     /**
  1724.     * init_effects_conditions
  1725.     *
  1726.     * Lets you define a condition that an effect must meet to be applied, doing nothing otherwise.
  1727.     * Each callback gets the following parameters:
  1728.     * @param object view_pagination_data
  1729.     * @param int    page
  1730.     *
  1731.     * @since 1.11
  1732.     */
  1733.    
  1734.     self.init_effects_conditions = function() {
  1735.         self.pagination_effects_conditions = {
  1736.             infinite: function( view_pagination_data, page ) {
  1737.                 if ( page != ( view_pagination_data.page + 1 ) ) {
  1738.                     return false;
  1739.                 }
  1740.                 return true;               
  1741.             }
  1742.         };
  1743.     };
  1744.    
  1745.     /**
  1746.     * init_effects_conditions
  1747.     *
  1748.     * Lets you define a condition that an effect must meet to be applied, doing nothing otherwise.
  1749.     * Each callback gets the following parameters:
  1750.     * @param string view_number
  1751.     * @param object wpvPaginatorLayout
  1752.     *
  1753.     * @since 1.11
  1754.     */
  1755.    
  1756.     self.init_effects_spinner = function() {
  1757.         self.pagination_effects_spinner['fade']         =
  1758.         self.pagination_effects_spinner['slideleft']    =
  1759.         self.pagination_effects_spinner['slideright']   =
  1760.         self.pagination_effects_spinner['slideh']       =
  1761.         self.pagination_effects_spinner['slideup']      =
  1762.         self.pagination_effects_spinner['slidedown']    =
  1763.         self.pagination_effects_spinner['slidev']       = function( view_number, wpvPaginatorLayout ) {
  1764.             var img = new Image();
  1765.             img.src = self.paged_views[ view_number ].spinner_image;
  1766.             img.onload = function() {
  1767.                 var wpvPaginatorLayoutOffset = wpvPaginatorLayout.position(),
  1768.                 wpvPaginatorSpinner = '<div style="'
  1769.                     + 'width:' + img.width + 'px;'
  1770.                     + 'height:' + img.height + 'px;'
  1771.                     + 'border:none;'
  1772.                     + 'background:transparent 50% 50% no-repeat url(' + self.paged_views[ view_number ].spinner_image + ');'
  1773.                     + 'position:absolute;'
  1774.                     + 'z-index:99;'
  1775.                     + 'top:' + ( Math.round( wpvPaginatorLayoutOffset.top ) + ( Math.round( wpvPaginatorLayout.height()/2 ) ) - ( Math.round( img.height/2 ) ) ) + 'px;'
  1776.                     + 'left:' + ( Math.round( wpvPaginatorLayoutOffset.left ) + ( Math.round( wpvPaginatorLayout.width()/2 ) ) - ( Math.round( img.width/2 ) ) ) + 'px;'
  1777.                     + '" '
  1778.                     + 'id="wpv_slide_loading_img_' + view_number + '" '
  1779.                     + 'class="wpv_slide_loading_img"'
  1780.                     + '>'
  1781.                     + '</div>';
  1782.                 wpvPaginatorLayout
  1783.                     .before( wpvPaginatorSpinner )
  1784.                         .animate( { opacity: 0.5 }, 300 );
  1785.             };
  1786.         };
  1787.         self.pagination_effects_spinner['infinite'] = function( view_number, wpvPaginatorLayout ) {
  1788.             var img = new Image();
  1789.             img.src = self.paged_views[ view_number ].spinner_image;
  1790.             img.onload = function() {
  1791.                 var wpvPaginatorLayoutOffset = wpvPaginatorLayout.position(),
  1792.                 wpvPaginatorSpinner = '<div style="'
  1793.                     + 'width:' + img.width + 'px;'
  1794.                     + 'height:' + img.height + 'px;'
  1795.                     + 'border:none;'
  1796.                     + 'background:transparent 50% 50% no-repeat url(' + self.paged_views[ view_number ].spinner_image + ');'
  1797.                     + 'position:absolute;'
  1798.                     + 'z-index:99;'
  1799.                     + 'top:' + ( Math.round( wpvPaginatorLayoutOffset.top ) + ( wpvPaginatorLayout.height() ) - ( Math.round( img.height/2 ) ) ) + 'px;'
  1800.                     + 'left:' + ( Math.round( wpvPaginatorLayoutOffset.left ) + ( Math.round( wpvPaginatorLayout.width()/2 ) ) - ( Math.round( img.width/2 ) ) ) + 'px;'
  1801.                     + '" '
  1802.                     + 'id="wpv_slide_loading_img_' + view_number + '" '
  1803.                     + 'class="wpv_slide_loading_img"'
  1804.                     + '>'
  1805.                     + '</div>';
  1806.                 wpvPaginatorLayout
  1807.                     .before( wpvPaginatorSpinner )
  1808.                         .animate( { opacity: 0.5 }, 300 );
  1809.             };
  1810.         };
  1811.     };
  1812.    
  1813.     /**
  1814.     * init_paged_views
  1815.     *
  1816.     * Gather the data for paginating each of the Views rendered in a page
  1817.     *
  1818.     * @since 1.11
  1819.     */
  1820.    
  1821.     self.init_paged_views = function() {
  1822.         var init_scrolling_event = false;
  1823.         this.historyP = this.historyP || [];
  1824.         window.wpvCachedPages = window.wpvCachedPages || [];
  1825.         window.wpvCachedImages = window.wpvCachedImages || [];
  1826.         $( '.js-wpv-view-layout' ).each( function() {
  1827.             var thiz = $( this ),
  1828.             view_number = thiz.data( 'viewnumber' );
  1829.             self.init_paged_view( view_number );
  1830.             if (
  1831.                 self.paged_views[ view_number ].effect == 'infinite'
  1832.                 && self.paged_views[ view_number ].page == 1
  1833.             ) {
  1834.                 init_scrolling_event = true;
  1835.             }
  1836.         });
  1837.         if ( init_scrolling_event ) {
  1838.             self.init_scrolling_event_callback();
  1839.         }
  1840.     };
  1841.    
  1842.     /**
  1843.     * init_paged_view
  1844.     *
  1845.     * Gather pagination info for a specific View rendered in a page.
  1846.     * Note that this is also used to init the View pagination data after a parametric search change.
  1847.     *
  1848.     * @since 1.11
  1849.     */
  1850.    
  1851.     self.init_paged_view = function( view_number ) {
  1852.         self.paged_views[ view_number ] = $( '#wpv-view-layout-' + view_number ).data( 'pagination' );
  1853.         self.paged_views_initial_page[ view_number ] = self.paged_views[ view_number ].page;
  1854.         window.wpvCachedPages[ view_number ] = [];
  1855.         if (
  1856.             self.paged_views[ view_number ].ajax != 'false'
  1857.             && self.paged_views[ view_number ].page > 1
  1858.         ) {
  1859.             // Infinite scrolling only can br triggered from the first page - individual URLs can not have that effect
  1860.             $( '#wpv-view-layout-' + view_number ).removeClass( 'js-wpv-layout-infinite-scrolling' );
  1861.         }
  1862.     };
  1863.    
  1864.     /**
  1865.     * is_infinite_triggable
  1866.     *
  1867.     * Auxiliar method to check whether the scroll got to a point where a pagination event should be triggered
  1868.     *
  1869.     * @param object view_layout
  1870.     *
  1871.     * @since 1.11
  1872.     */
  1873.    
  1874.     self.is_infinite_triggable = function( view_layout ) {
  1875.         var flag_element = view_layout;
  1876.         if ( view_layout.find( '.js-wpv-loop' ).length > 0 ) {
  1877.             flag_element = view_layout.find( '.js-wpv-loop' );
  1878.         }
  1879.         return (
  1880.             ( flag_element.offset().top + flag_element.outerHeight() )
  1881.             <=
  1882.             ( $( window ).scrollTop() + $( window ).height() )
  1883.         );
  1884.     };
  1885.    
  1886.     /**
  1887.     * init_scrolling_event_callback
  1888.     *
  1889.     * Init the scrolling event callback, only when there is a View with infinite scrlling in a page
  1890.     *
  1891.     * @since 1.11
  1892.     */
  1893.    
  1894.     self.init_scrolling_event_callback = function() {
  1895.         $( window ).on( 'scroll', _.debounce(
  1896.             _.throttle(
  1897.                 function() {
  1898.                     $( '.js-wpv-layout-infinite-scrolling' ).each( function() {
  1899.                         var thiz = $( this ),
  1900.                         thiz_view_number = thiz.data( 'viewnumber' );
  1901.                         if (
  1902.                             self.paged_views[ thiz_view_number ].page < self.paged_views[ thiz_view_number ].max_pages
  1903.                             && self.is_infinite_triggable( thiz )
  1904.                         ) {
  1905.                             return self.trigger_pagination( thiz_view_number, self.paged_views[ thiz_view_number ].page + 1 );
  1906.                         }
  1907.                     });
  1908.                 },
  1909.                 1000
  1910.             ),
  1911.             1000
  1912.         ));
  1913.     };
  1914.    
  1915.     /**
  1916.     * pagination_init_preload_images
  1917.     *
  1918.     * Init-preload images.
  1919.     *
  1920.     * @since 1.9
  1921.     */
  1922.    
  1923.     self.init_preload_images = function() {
  1924.         $('.js-wpv-layout-preload-images').css('visibility', 'hidden'); // TODO move it to the CSS file and test
  1925.         $( '.js-wpv-layout-preload-images' ).each( function() {
  1926.             var preloadedImages = [],
  1927.             element = $( this ),
  1928.             images = element.find( 'img' );
  1929.             if ( images.length < 1 ) {
  1930.                 element.css( 'visibility', 'visible' );
  1931.             } else {
  1932.                 images.one( 'load', function() {
  1933.                     preloadedImages.push( $( this ).attr( 'src' ) );
  1934.                     if ( preloadedImages.length === images.length ) {
  1935.                         element.css( 'visibility', 'visible' );
  1936.                     }
  1937.                 }).each( function() {
  1938.                     if( this.complete ) {
  1939.                         $( this ).load();
  1940.                     }
  1941.                 });
  1942.                 setTimeout( function() {
  1943.                     element.css( 'visibility', 'visible' );
  1944.                 }, 3000 );
  1945.             }
  1946.         });
  1947.     };
  1948.    
  1949.     self.init_preload_pages = function() {
  1950.         $( '.js-wpv-layout-preload-pages' ).each( function() {
  1951.             var thiz = $( this ),
  1952.             view_number = thiz.data( 'viewnumber' ),
  1953.             max_pages = parseInt( self.paged_views[ view_number ].max_pages, 10 ),
  1954.             max_reach = parseInt( self.paged_views[ view_number ].pre_reach, 10 ) + 1;
  1955.            
  1956.             self.pagination_preload_pages({
  1957.                 view_number:    view_number,
  1958.                 cache_pages:    false,
  1959.                 preload_pages:  true,
  1960.                 page:           1,
  1961.                 max_reach:      max_reach,
  1962.                 max_pages:      max_pages
  1963.             });
  1964.         });
  1965.     };
  1966.    
  1967.     self.init = function() {
  1968.         self.init_effects();
  1969.         self.init_effects_conditions();
  1970.         self.init_effects_spinner();
  1971.         self.init_paged_views();
  1972.         self.init_preload_images();
  1973.         self.init_preload_pages();
  1974.     }
  1975.    
  1976.     self.init();
  1977.  
  1978. };
  1979.  
  1980. WPViews.ViewParametricSearch = function( $ ) {
  1981.    
  1982.     // ------------------------------------
  1983.     // Constants and variables
  1984.     // ------------------------------------
  1985.    
  1986.     var self = this;
  1987.    
  1988.     // ------------------------------------
  1989.     // Methods
  1990.     // ------------------------------------
  1991.    
  1992.     /**
  1993.     * manage_update_form
  1994.     *
  1995.     *
  1996.     *
  1997.     * @since 1.9
  1998.     *
  1999.     * @todo we are not handling 3rd party URL parameters here
  2000.     */
  2001.  
  2002.     self.manage_update_form = function( fil, ajax_get ) {
  2003.         var view_num = fil.data( 'viewnumber' ),
  2004.         view_id = fil.data( 'viewid' ),
  2005.         aux_fil,
  2006.         data = {
  2007.             action: 'wpv_update_parametric_search',
  2008.             valz: fil.serializeArray(),
  2009.             viewid: view_id,
  2010.             view_num: view_num,
  2011.             getthis: ajax_get
  2012.         },
  2013.         attr_data = fil.find('.js-wpv-view-attributes'),
  2014.         ajax_data = {};
  2015.        
  2016.         wpv_stop_rollover[view_num] = true;
  2017.         if ( attr_data.length > 0 ) {
  2018.             data['attributes'] = attr_data.data();
  2019.         }
  2020.        
  2021.         if ( fil.attr( 'data-targetid' ) ) {
  2022.             data.targetid = fil.data( 'targetid' );
  2023.         } else if ( ajax_get == 'both' ) {
  2024.             aux_fil = $( '.js-wpv-form-only.js-wpv-filter-form-' + view_num );
  2025.             data.targetid = aux_fil.data( 'targetid' );
  2026.         }
  2027.        
  2028.         icl_lang = ( typeof icl_lang == 'undefined' ) ? false : icl_lang;
  2029.        
  2030.         ajax_data.type = "POST";
  2031.         ajax_data.url = wpv_pagination_local.front_ajaxurl;
  2032.         ajax_data.data = data;
  2033.        
  2034.         if ( icl_lang !== false ) {
  2035.             ajax_data.xhrFields = {
  2036.                 withCredentials: true
  2037.             };
  2038.         }
  2039.        
  2040.         return $.ajax( ajax_data );
  2041.     };
  2042.    
  2043.    
  2044.     self.manage_update_results = function( data ) {
  2045.         if ( data.ajax_before !== '' ) {
  2046.             var ajax_before_func = window[data.ajax_before];
  2047.             if ( typeof ajax_before_func === "function" ) {
  2048.                 ajax_before_func( data.view_num );
  2049.             }
  2050.         }
  2051.         var data_for_events = {};
  2052.         data_for_events.view_unique_id  = data.view_num;
  2053.         data_for_events.pagepermalink   = data.pagepermalink;
  2054.         data.layout.fadeOut( 200, function() {
  2055.             data.layout.html( data.new_layout.html() )
  2056.                 .attr( 'data-pagination', data.new_layout.attr( 'data-pagination' ) )
  2057.                 .data( 'pagination', data.new_layout.data( 'pagination' ) )
  2058.                 .fadeIn( 'fast', function() {
  2059.                     var ajax_after_func = window[data.ajax_after];
  2060.                     if ( typeof ajax_after_func === "function" ) {
  2061.                         ajax_after_func( data.view_num );
  2062.                     }
  2063.                     data_for_events.layout = data.layout;
  2064.                     $( document ).trigger( 'js_event_wpv_parametric_search_results_updated', [ data_for_events ] );
  2065.                 });    
  2066.         });
  2067.     };
  2068.    
  2069.     /**
  2070.     * manage_changed_form
  2071.     *
  2072.     * @param
  2073.     *
  2074.     * @since 1.9
  2075.     */
  2076.    
  2077.     self.manage_changed_form = function( fil, force_form_update, force_results_update ) {
  2078.         var view_num = fil.data( 'viewnumber' ),
  2079.         lay = $( '#wpv-view-layout-' + view_num ),
  2080.         full_data = fil.find( '.js-wpv-filter-data-for-this-form' ),
  2081.         ajax_pre_before = full_data.data( 'ajaxprebefore' ),
  2082.         ajax_before = full_data.data( 'ajaxbefore' ),
  2083.         ajax_after = full_data.data( 'ajaxafter' ),
  2084.         view_type = 'full',
  2085.         additional_forms = $( '.js-wpv-filter-form-' + view_num ).not( fil ),
  2086.         additional_forms_only,
  2087.         additional_forms_full,
  2088.         ajax_get = 'both',
  2089.         new_content_form,
  2090.         new_content_form_filter,
  2091.         new_content_full,
  2092.         new_content_full_filter,
  2093.         new_content_full_layout,
  2094.         spinnerContainer = fil.find( '.js-wpv-dps-spinner' ).add( additional_forms.find( '.js-wpv-dps-spinner' ) ),//TODO maybe add a view_num here to select all spinnerContainers
  2095.         spinnerItems = spinnerContainer.length
  2096.         data_for_events = {},
  2097.         data_for_manage_updated_results = {};
  2098.         data_for_events.view_unique_id = view_num;
  2099.         if ( fil.hasClass( 'js-wpv-form-only' ) ) {
  2100.             view_type = 'form';
  2101.         }
  2102.         if ( fil.hasClass( 'js-wpv-dps-enabled' ) || force_form_update === true ) {
  2103.             if ( additional_forms.length > 0 ) {
  2104.                 additional_forms_only = additional_forms.not( '.js-wpv-form-full' );
  2105.                 additional_forms_full = additional_forms.not( '.js-wpv-form-only' );
  2106.                 if ( view_type == 'form' ) {
  2107.                     if ( additional_forms_full.length > 0 || ( fil.hasClass( 'js-wpv-ajax-results-enabled' ) && lay.length > 0 ) ) {
  2108.                         ajax_get = 'both';                 
  2109.                     } else {
  2110.                         ajax_get = 'form';
  2111.                     }
  2112.                     if (
  2113.                         ( fil.hasClass( 'js-wpv-ajax-results-enabled' ) && lay.length > 0 )
  2114.                         || force_results_update
  2115.                     ) {
  2116.                         if ( ajax_pre_before !== '' ) {
  2117.                             var ajax_pre_before_func = window[ajax_pre_before];
  2118.                             if ( typeof ajax_pre_before_func === "function" ) {
  2119.                                 ajax_pre_before_func( view_num );
  2120.                             }
  2121.                         }
  2122.                         $( document ).trigger( 'js_event_wpv_parametric_search_started', [ data_for_events ] );
  2123.                     }
  2124.                     if ( spinnerItems ) {// TODO maybe only when updating results
  2125.                         $( spinnerContainer ).fadeIn( 'fast' );
  2126.                     }
  2127.                     self.manage_update_form( fil, ajax_get ).done(function(result) {
  2128.                         decoded_response = $.parseJSON(result);
  2129.                         new_content_form = $( '<div></div>' ).append( decoded_response.form );
  2130.                         new_content_full = $( '<div></div>' ).append( decoded_response.full );
  2131.                         new_content_form_filter = new_content_form.find( '.js-wpv-filter-form' );
  2132.                         new_content_full_filter = new_content_full.find( '.js-wpv-filter-form' );
  2133.                         new_content_full_layout = new_content_full.find( '.js-wpv-view-layout' );
  2134.                        
  2135.                         fil.html( new_content_form_filter.html() );
  2136.                         $( ".js-wpv-frontend-datepicker" )
  2137.                             .removeClass( 'js-wpv-frontend-datepicker-inited' )
  2138.                             .datepicker( "destroy" );
  2139.                         WPViews.view_frontend_utils.clone_form( fil, additional_forms_only );
  2140.                         additional_forms_full.each( function() {
  2141.                             $( this ).html( new_content_full_filter.html() );
  2142.                         });
  2143.                         data_for_events.view_changed_form = fil;
  2144.                         data_for_events.view_changed_form_additional_forms_only = additional_forms_only;
  2145.                         data_for_events.view_changed_form_additional_forms_full = additional_forms_full;
  2146.                         $( document ).trigger( 'js_event_wpv_parametric_search_form_updated', [ data_for_events ] );
  2147.                         if (
  2148.                             ( fil.hasClass( 'js-wpv-ajax-results-enabled' ) && lay.length > 0 )
  2149.                             || force_results_update
  2150.                         ) {
  2151.                             data_for_manage_updated_results.layout          = lay;
  2152.                             data_for_manage_updated_results.new_layout      = new_content_full_layout;
  2153.                             data_for_manage_updated_results.view_num        = view_num;
  2154.                             data_for_manage_updated_results.ajax_before     = ajax_before;
  2155.                             data_for_manage_updated_results.ajax_after      = ajax_after;
  2156.                             data_for_manage_updated_results.pagepermalink   = decoded_response.pagepermalink;
  2157.                             self.manage_update_results( data_for_manage_updated_results );
  2158.                         }
  2159.                         spinnerContainer.hide();
  2160.                     }).fail(function() {
  2161.                         // an error occurred
  2162.                     });
  2163.                 } else {
  2164.                     if ( additional_forms_only.length > 0 ) {
  2165.                         ajax_get = 'both';
  2166.                     } else {
  2167.                         ajax_get = 'full';
  2168.                     }
  2169.                     if (
  2170.                         ( fil.hasClass( 'js-wpv-ajax-results-enabled' ) && lay.length > 0 )
  2171.                         || force_results_update
  2172.                     ) {
  2173.                         if ( ajax_pre_before !== '' ) {
  2174.                             var ajax_pre_before_func = window[ajax_pre_before];
  2175.                             if ( typeof ajax_pre_before_func === "function" ) {
  2176.                                 ajax_pre_before_func( view_num );
  2177.                             }
  2178.                         }
  2179.                         $( document ).trigger( 'js_event_wpv_parametric_search_started', [ data_for_events ] );
  2180.                     }
  2181.                     if ( spinnerItems ) {// TODO maybe only when updating results
  2182.                         $( spinnerContainer ).fadeIn( 'fast' );
  2183.                     }
  2184.                     self.manage_update_form( fil, ajax_get ).done(function(result) {
  2185.                         decoded_response = $.parseJSON(result);
  2186.                         new_content_form = $( '<div></div>' ).append( decoded_response.form );
  2187.                         new_content_full = $( '<div></div>' ).append( decoded_response.full );
  2188.                         new_content_form_filter = new_content_form.find( '.js-wpv-filter-form' );
  2189.                         new_content_full_filter = new_content_full.find( '.js-wpv-filter-form' );
  2190.                         new_content_full_layout = new_content_full.find( '.js-wpv-view-layout' );
  2191.                        
  2192.                         fil.html( new_content_full_filter.html() );
  2193.                         $( ".js-wpv-frontend-datepicker" )
  2194.                             .removeClass( 'js-wpv-frontend-datepicker-inited' )
  2195.                             .datepicker( "destroy" );
  2196.                         WPViews.view_frontend_utils.clone_form( fil, additional_forms_full );
  2197.                         additional_forms_only.each( function() {
  2198.                             $( this ).html( new_content_form_filter.html() );
  2199.                         });
  2200.                         data_for_events.view_changed_form = fil;
  2201.                         data_for_events.view_changed_form_additional_forms_only = additional_forms_only;
  2202.                         data_for_events.view_changed_form_additional_forms_full = additional_forms_full;
  2203.                         $( document ).trigger( 'js_event_wpv_parametric_search_form_updated', [ data_for_events ] );
  2204.                         if (
  2205.                             ( fil.hasClass( 'js-wpv-ajax-results-enabled' ) && lay.length > 0 )
  2206.                             || force_results_update
  2207.                         ) {
  2208.                             data_for_manage_updated_results.layout          = lay;
  2209.                             data_for_manage_updated_results.new_layout      = new_content_full_layout;
  2210.                             data_for_manage_updated_results.view_num        = view_num;
  2211.                             data_for_manage_updated_results.ajax_before     = ajax_before;
  2212.                             data_for_manage_updated_results.ajax_after      = ajax_after;
  2213.                             data_for_manage_updated_results.pagepermalink   = decoded_response.pagepermalink;
  2214.                             self.manage_update_results( data_for_manage_updated_results );
  2215.                         }
  2216.                         spinnerContainer.hide();
  2217.                     }).fail(function() {
  2218.                         // an error occurred
  2219.                     });
  2220.                 }
  2221.             } else {
  2222.                 if ( view_type == 'form' ) {
  2223.                     if ( fil.hasClass( 'js-wpv-ajax-results-enabled' ) && lay.length > 0 ) {
  2224.                         ajax_get = 'both';
  2225.                         // NOTE this should never happen:
  2226.                         // If change is done on an only-form and there is no extra form, there is no full form thus there is no layout
  2227.                         // WARNING this can be executed on an only-form form from a View with automatic results
  2228.                         // I might want to avoid this branch completely
  2229.                         // NOTE-2 might be a good idea to keep-on-clear// As we might be displaying the layout in non-standard ways
  2230.                         // So keeping the check for lay.length should suffice
  2231.                        
  2232.                     } else {
  2233.                         ajax_get = 'form';
  2234.                     }
  2235.                    
  2236.                     if (
  2237.                         ( fil.hasClass( 'js-wpv-ajax-results-enabled' ) && lay.length > 0 )
  2238.                         || force_results_update
  2239.                     ) {
  2240.                         if ( ajax_pre_before !== '' ) {
  2241.                             var ajax_pre_before_func = window[ajax_pre_before];
  2242.                             if ( typeof ajax_pre_before_func === "function" ) {
  2243.                                 ajax_pre_before_func( view_num );
  2244.                             }
  2245.                         }
  2246.                         $( document ).trigger( 'js_event_wpv_parametric_search_started', [ data_for_events ] );
  2247.                     }
  2248.                     if ( spinnerItems ) {// TODO maybe only when updating results
  2249.                         $( spinnerContainer ).fadeIn( 'fast' );
  2250.                     }
  2251.                     self.manage_update_form( fil, ajax_get ).done(function(result) {
  2252.                         decoded_response = $.parseJSON(result);
  2253.                         new_content_form = $( '<div></div>' ).append( decoded_response.form );
  2254.                         new_content_full = $( '<div></div>' ).append( decoded_response.full );
  2255.                         new_content_form_filter = new_content_form.find( '.js-wpv-filter-form' );
  2256.                         //new_content_full_filter = new_content_full.find( '.js-wpv-filter-form' ).html();
  2257.                         new_content_full_layout = new_content_full.find( '.js-wpv-view-layout' );
  2258.                         fil.html( new_content_form_filter.html() );
  2259.                         data_for_events.view_changed_form = fil;
  2260.                         data_for_events.view_changed_form_additional_forms_only = additional_forms_only;
  2261.                         data_for_events.view_changed_form_additional_forms_full = additional_forms_full;
  2262.                         $( document ).trigger( 'js_event_wpv_parametric_search_form_updated', [ data_for_events ] );
  2263.                         if (
  2264.                             ( fil.hasClass( 'js-wpv-ajax-results-enabled' ) && lay.length > 0 )
  2265.                             || force_results_update
  2266.                         ) {
  2267.                             data_for_manage_updated_results.layout          = lay;
  2268.                             data_for_manage_updated_results.new_layout      = new_content_full_layout;
  2269.                             data_for_manage_updated_results.view_num        = view_num;
  2270.                             data_for_manage_updated_results.ajax_before     = ajax_before;
  2271.                             data_for_manage_updated_results.ajax_after      = ajax_after;
  2272.                             data_for_manage_updated_results.pagepermalink   = decoded_response.pagepermalink;
  2273.                             self.manage_update_results( data_for_manage_updated_results );
  2274.                         }
  2275.                         spinnerContainer.hide();
  2276.                     }).fail(function() {
  2277.                         // an error occurred
  2278.                     });
  2279.                 } else {
  2280.                     if (
  2281.                         ( fil.hasClass( 'js-wpv-ajax-results-enabled' ) && lay.length > 0 )
  2282.                         || force_results_update
  2283.                     ) {
  2284.                         if ( ajax_pre_before !== '' ) {
  2285.                             var ajax_pre_before_func = window[ajax_pre_before];
  2286.                             if ( typeof ajax_pre_before_func === "function" ) {
  2287.                                 ajax_pre_before_func( view_num );
  2288.                             }
  2289.                         }
  2290.                         $( document ).trigger( 'js_event_wpv_parametric_search_started', [ data_for_events ] );
  2291.                     }
  2292.                     if ( spinnerItems ) {// TODO maybe only when updating results
  2293.                         $( spinnerContainer ).fadeIn( 'fast' );
  2294.                     }
  2295.                     self.manage_update_form( fil, 'full' ).done(function(result) {
  2296.                         decoded_response = $.parseJSON(result);
  2297.                         //new_content_form = $( '<div></div>' ).append( ajax_result.form );
  2298.                         new_content_full = $( '<div></div>' ).append( decoded_response.full );
  2299.                         //new_content_form_filter = new_content_form.find( '.js-wpv-filter-form' ).html();
  2300.                         new_content_full_filter = new_content_full.find( '.js-wpv-filter-form' );
  2301.                         new_content_full_layout = new_content_full.find( '.js-wpv-view-layout' );
  2302.                         fil.html( new_content_full_filter.html() );
  2303.                         data_for_events.view_changed_form = fil;
  2304.                         data_for_events.view_changed_form_additional_forms_only = additional_forms_only;
  2305.                         data_for_events.view_changed_form_additional_forms_full = additional_forms_full;
  2306.                         $( document ).trigger( 'js_event_wpv_parametric_search_form_updated', [ data_for_events ] );
  2307.                         if (
  2308.                             ( fil.hasClass( 'js-wpv-ajax-results-enabled' ) && lay.length > 0 )
  2309.                             || force_results_update
  2310.                         ) {
  2311.                             data_for_manage_updated_results.layout          = lay;
  2312.                             data_for_manage_updated_results.new_layout      = new_content_full_layout;
  2313.                             data_for_manage_updated_results.view_num        = view_num;
  2314.                             data_for_manage_updated_results.ajax_before     = ajax_before;
  2315.                             data_for_manage_updated_results.ajax_after      = ajax_after;
  2316.                             data_for_manage_updated_results.pagepermalink   = decoded_response.pagepermalink;
  2317.                             self.manage_update_results( data_for_manage_updated_results );
  2318.                         }
  2319.                         spinnerContainer.hide();
  2320.                     }).fail(function() {
  2321.                         // an error occurred
  2322.                     });
  2323.                 }
  2324.             }
  2325.         } else {
  2326.             if ( additional_forms.length > 0 ) {
  2327.                 additional_forms_only = additional_forms.not( '.js-wpv-form-full' );
  2328.                 additional_forms_full = additional_forms.not( '.js-wpv-form-only' );
  2329.                 if ( view_type == 'form' ) {
  2330.                     $( ".js-wpv-frontend-datepicker" )
  2331.                         .removeClass( 'js-wpv-frontend-datepicker-inited' )
  2332.                         .datepicker( "destroy" );
  2333.                     WPViews.view_frontend_utils.clone_form( fil, additional_forms_only );
  2334.                     if ( additional_forms_full.length > 0 || ( fil.hasClass( 'js-wpv-ajax-results-enabled' ) && lay.length > 0 ) ) {
  2335.                         if (
  2336.                             ( fil.hasClass( 'js-wpv-ajax-results-enabled' ) && lay.length > 0 )
  2337.                             || force_results_update
  2338.                         ) {
  2339.                             if ( ajax_pre_before !== '' ) {
  2340.                                 var ajax_pre_before_func = window[ajax_pre_before];
  2341.                                 if ( typeof ajax_pre_before_func === "function" ) {
  2342.                                     ajax_pre_before_func( view_num );
  2343.                                 }
  2344.                             }
  2345.                             $( document ).trigger( 'js_event_wpv_parametric_search_started', [ data_for_events ] );
  2346.                         }
  2347.                         if ( spinnerItems ) {// TODO maybe only when updating results
  2348.                             $( spinnerContainer ).fadeIn( 'fast' );
  2349.                         }
  2350.                         self.manage_update_form( fil, 'full' ).done(function(result) {
  2351.                             decoded_response = $.parseJSON(result);
  2352.                             //new_content_form = $( '<div></div>' ).append( decoded_response.form );
  2353.                             new_content_full = $( '<div></div>' ).append( decoded_response.full );
  2354.                             //new_content_form_filter = new_content_form.find( '.js-wpv-filter-form' ).html();
  2355.                             new_content_full_filter = new_content_full.find( '.js-wpv-filter-form' );
  2356.                             new_content_full_layout = new_content_full.find( '.js-wpv-view-layout' );
  2357.                            
  2358.                             additional_forms_full.each( function() {
  2359.                                 $( this ).html( new_content_full_filter.html() );
  2360.                             });
  2361.                             data_for_events.view_changed_form = fil;
  2362.                             data_for_events.view_changed_form_additional_forms_only = additional_forms_only;
  2363.                             data_for_events.view_changed_form_additional_forms_full = additional_forms_full;
  2364.                             $( document ).trigger( 'js_event_wpv_parametric_search_form_updated', [ data_for_events ] );
  2365.                             if (
  2366.                                 ( fil.hasClass( 'js-wpv-ajax-results-enabled' ) && lay.length > 0 )
  2367.                                 || force_results_update
  2368.                             ) {
  2369.                                 data_for_manage_updated_results.layout          = lay;
  2370.                                 data_for_manage_updated_results.new_layout      = new_content_full_layout;
  2371.                                 data_for_manage_updated_results.view_num        = view_num;
  2372.                                 data_for_manage_updated_results.ajax_before     = ajax_before;
  2373.                                 data_for_manage_updated_results.ajax_after      = ajax_after;
  2374.                                 data_for_manage_updated_results.pagepermalink   = decoded_response.pagepermalink;
  2375.                                 self.manage_update_results( data_for_manage_updated_results );
  2376.                             }
  2377.                             spinnerContainer.hide();
  2378.                         }).fail(function() {
  2379.                             // an error occurred
  2380.                         });
  2381.                     } else {
  2382.                         data_for_events.view_changed_form = fil;
  2383.                         data_for_events.view_changed_form_additional_forms_only = additional_forms_only;
  2384.                         data_for_events.view_changed_form_additional_forms_full = additional_forms_full;
  2385.                         $( document ).trigger( 'js_event_wpv_parametric_search_form_updated', [ data_for_events ] );
  2386.                     }
  2387.                 } else {
  2388.                     $( ".js-wpv-frontend-datepicker" )
  2389.                         .removeClass( 'js-wpv-frontend-datepicker-inited' )
  2390.                         .datepicker( "destroy" );
  2391.                     WPViews.view_frontend_utils.clone_form( fil, additional_forms_full );
  2392.                     WPViews.view_frontend_utils.render_frontend_datepicker();
  2393.                     if ( additional_forms_only.length > 0 || ( fil.hasClass( 'js-wpv-ajax-results-enabled' ) && lay.length > 0 ) ) {
  2394.                         if ( additional_forms_only.length > 0 ) {
  2395.                             ajax_get = 'both';
  2396.                         } else {
  2397.                             ajax_get = 'full';
  2398.                         }
  2399.                        
  2400.                         if (
  2401.                             ( fil.hasClass( 'js-wpv-ajax-results-enabled' ) && lay.length > 0 )
  2402.                             || force_results_update
  2403.                         ) {
  2404.                             if ( ajax_pre_before !== '' ) {
  2405.                                 var ajax_pre_before_func = window[ajax_pre_before];
  2406.                                 if ( typeof ajax_pre_before_func === "function" ) {
  2407.                                     ajax_pre_before_func( view_num );
  2408.                                 }
  2409.                             }
  2410.                             $( document ).trigger( 'js_event_wpv_parametric_search_started', [ data_for_events ] );
  2411.                         }
  2412.                         if ( spinnerItems ) {// TODO maybe only when updating results
  2413.                             $( spinnerContainer ).fadeIn( 'fast' );
  2414.                         }
  2415.                         self.manage_update_form( fil, ajax_get ).done(function(result) {
  2416.                             decoded_response = $.parseJSON(result);
  2417.                             new_content_form = $( '<div></div>' ).append( decoded_response.form );
  2418.                             new_content_full = $( '<div></div>' ).append( decoded_response.full );
  2419.                             new_content_form_filter = new_content_form.find( '.js-wpv-filter-form' );
  2420.                             //new_content_full_filter = new_content_full.find( '.js-wpv-filter-form' ).html();
  2421.                             new_content_full_layout = new_content_full.find( '.js-wpv-view-layout' );
  2422.                             additional_forms_only.each( function() {
  2423.                                 $( this ).html( new_content_form_filter.html() );
  2424.                             });
  2425.                             data_for_events.view_changed_form = fil;
  2426.                             data_for_events.view_changed_form_additional_forms_only = additional_forms_only;
  2427.                             data_for_events.view_changed_form_additional_forms_full = additional_forms_full;
  2428.                             $( document ).trigger( 'js_event_wpv_parametric_search_form_updated', [ data_for_events ] );
  2429.                             if (
  2430.                                 ( fil.hasClass( 'js-wpv-ajax-results-enabled' ) && lay.length > 0 )
  2431.                                 || force_results_update
  2432.                             ) {
  2433.                                 data_for_manage_updated_results.layout          = lay;
  2434.                                 data_for_manage_updated_results.new_layout      = new_content_full_layout;
  2435.                                 data_for_manage_updated_results.view_num        = view_num;
  2436.                                 data_for_manage_updated_results.ajax_before     = ajax_before;
  2437.                                 data_for_manage_updated_results.ajax_after      = ajax_after;
  2438.                                 data_for_manage_updated_results.pagepermalink   = decoded_response.pagepermalink;
  2439.                                 self.manage_update_results( data_for_manage_updated_results );
  2440.                             }
  2441.                             spinnerContainer.hide();
  2442.                         }).fail(function() {
  2443.                             // an error occurred
  2444.                         });
  2445.                     }
  2446.                 }
  2447.             } else {
  2448.                 if (
  2449.                     ( fil.hasClass( 'js-wpv-ajax-results-enabled' ) && lay.length > 0 )
  2450.                     || force_results_update
  2451.                 ) {
  2452.                     if ( ajax_pre_before !== '' ) {
  2453.                         var ajax_pre_before_func = window[ajax_pre_before];
  2454.                         if ( typeof ajax_pre_before_func === "function" ) {
  2455.                             ajax_pre_before_func( view_num );
  2456.                         }
  2457.                     }
  2458.                     $( document ).trigger( 'js_event_wpv_parametric_search_started', [ data_for_events ] );
  2459.                     if ( spinnerItems ) {// TODO maybe only when updating results
  2460.                         $( spinnerContainer ).fadeIn( 'fast' );
  2461.                     }
  2462.                     self.manage_update_form( fil, 'full' ).done(function(result) {
  2463.                         decoded_response = $.parseJSON(result);
  2464.                         //new_content_form = $( '<div></div>' ).append( decoded_response.form );
  2465.                         new_content_full = $( '<div></div>' ).append( decoded_response.full );
  2466.                         //new_content_form_filter = new_content_form.find( '.js-wpv-filter-form' ).html();
  2467.                         //new_content_full_filter = new_content_full.find( '.js-wpv-filter-form' ).html();
  2468.                         new_content_full_layout = new_content_full.find( '.js-wpv-view-layout' );
  2469.                         data_for_manage_updated_results.layout          = lay;
  2470.                         data_for_manage_updated_results.new_layout      = new_content_full_layout;
  2471.                         data_for_manage_updated_results.view_num        = view_num;
  2472.                         data_for_manage_updated_results.ajax_before     = ajax_before;
  2473.                         data_for_manage_updated_results.ajax_after      = ajax_after;
  2474.                         data_for_manage_updated_results.pagepermalink   = decoded_response.pagepermalink;
  2475.                         self.manage_update_results( data_for_manage_updated_results );
  2476.                         spinnerContainer.hide();
  2477.                     }).fail(function() {
  2478.                         // an error occurred
  2479.                     });
  2480.                 }
  2481.             }
  2482.         }
  2483.     };
  2484.    
  2485.     // ------------------------------------
  2486.     // Events
  2487.     // ------------------------------------
  2488.    
  2489.     // Show datepicker on date string click
  2490.     $( document ).on( 'click', '.js-wpv-date-display', function() {
  2491.         var url_param = $( this ).data( 'param' );
  2492.         $( '.js-wpv-date-front-end-' + url_param ).datepicker( 'show' );
  2493.     });
  2494.  
  2495.     // Remove current selected date
  2496.     $( document ).on( 'click', '.js-wpv-date-front-end-clear', function(e) {
  2497.         e.preventDefault();
  2498.         var thiz = $( this ),
  2499.         url_param = thiz.data( 'param' ),
  2500.         form = thiz.closest( 'form' );
  2501.         form.find( '.js-wpv-date-param-' + url_param ).html( '' );
  2502.         form.find( '.js-wpv-date-front-end-' + url_param ).val( '' );
  2503.         thiz.hide();
  2504.         form.find('.js-wpv-date-param-' + url_param + '-value' )
  2505.             .val( '' )
  2506.             .trigger( 'change' );
  2507.     });
  2508.    
  2509.     $( document ).on( 'change', '.js-wpv-post-relationship-update', function() {
  2510.         var thiz = $( this ),
  2511.         fil = thiz.closest( 'form' ),
  2512.         view_number = fil.data( 'viewnumber' ),
  2513.         additional_forms = $( '.js-wpv-filter-form-' + view_number ).not( fil ),
  2514.         currentposttype = thiz.data( 'currentposttype' ),
  2515.         watchers = fil.find( '.js-wpv-' + currentposttype + '-watch' ).add( additional_forms.find( '.js-wpv-' + currentposttype + '-watch' ) ),
  2516.         watcherslength = watchers.length,
  2517.         i;
  2518.         if ( watcherslength ) {
  2519.             for( i = 0; i < watcherslength; i++ ) {
  2520.                 $( watchers[i] )
  2521.                     .attr( 'disabled', true )
  2522.                     .removeAttr( 'checked' )
  2523.                     .removeAttr( 'selected' )
  2524.                     .not( ':button, :submit, :reset, :hidden, :radio, :checkbox' )
  2525.                     .val( '0' );
  2526.             }
  2527.         }
  2528.         $( document ).trigger( 'js_event_wpv_parametric_search_triggered', [ { view_unique_id: view_number, form: fil, force_form_update: true } ] );
  2529.     });
  2530.  
  2531.     $( document ).on( 'change', '.js-wpv-filter-trigger', function() {
  2532.         var thiz = $( this ),
  2533.         fil = thiz.closest( 'form' ),
  2534.         view_number = fil.data( 'viewnumber' );
  2535.         $( document ).trigger( 'js_event_wpv_parametric_search_triggered', [ { view_unique_id: view_number, form: fil } ] );
  2536.     });
  2537.  
  2538.     $( document ).on( 'click', '.js-wpv-ajax-results-enabled .js-wpv-submit-trigger, .js-wpv-ajax-results-submit-enabled .js-wpv-submit-trigger', function( e ) {
  2539.         e.preventDefault();
  2540.         var thiz = $( this ),
  2541.         fil = thiz.closest( 'form' ),
  2542.         view_number = fil.data( 'viewnumber' );
  2543.         $( document ).trigger( 'js_event_wpv_parametric_search_triggered', [ { view_unique_id: view_number, form: fil, force_form_update: false, force_results_update: true } ] );
  2544.     });
  2545.  
  2546.     $( document).on( 'keypress', '.js-wpv-ajax-results-enabled .js-wpv-filter-trigger-delayed, .js-wpv-ajax-results-submit-enabled .js-wpv-filter-trigger-delayed', function( e ) {
  2547.         // Enter pressed?
  2548.         if ( e.which == 13 ) {
  2549.             e.preventDefault();
  2550.             var thiz = $( this ),
  2551.             fil = thiz.closest( 'form' ),
  2552.             view_number = fil.data( 'viewnumber' );
  2553.             $( document ).trigger( 'js_event_wpv_parametric_search_triggered', [ { view_unique_id: view_number, form: fil, force_results_update: true } ] );
  2554.         }
  2555.     });
  2556.  
  2557.     $( document ).on( 'click', '.js-wpv-reset-trigger', function( e ) {
  2558.         e.preventDefault();
  2559.         var thiz = $( this ),
  2560.         fil = thiz.closest( 'form' ),
  2561.         view_number = fil.data( 'viewnumber' ),
  2562.         additional_forms = $( '.js-wpv-filter-form-' + view_number ).not( fil ),
  2563.         watchers,
  2564.         watcherslength,
  2565.         i,
  2566.         target = fil.attr( 'action' );
  2567.         if ( fil.hasClass( 'js-wpv-ajax-results-enabled' ) || fil.hasClass( 'js-wpv-ajax-results-submit-enabled' ) ) {
  2568.             watchers = fil.find( 'input, select' ).add( additional_forms.find( 'input, select' ) );
  2569.             watcherslength = watchers.length;
  2570.             if ( watcherslength ) {
  2571.                 for ( i = 0; i < watcherslength; i++ ) {
  2572.                     if ( ! $( watchers[i] ).hasClass( 'js-wpv-keep-on-clear' ) ) {
  2573.                         $( watchers[i] )
  2574.                             .attr( 'disabled', true )
  2575.                             .removeAttr( 'checked' )
  2576.                             .removeAttr( 'selected' )
  2577.                             .not( ':button, :submit, :reset, :hidden, :radio, :checkbox' )
  2578.                             .val( '' );
  2579.                     }
  2580.                 }
  2581.             }
  2582.             $( document ).trigger( 'js_event_wpv_parametric_search_triggered', [ { view_unique_id: view_number, form: fil, force_form_update: true, force_results_update: true } ] );
  2583.         } else {
  2584.             window.location.href = target;
  2585.         }
  2586.     });
  2587.    
  2588.     $( document ).on( 'js_event_wpv_parametric_search_triggered', function( event, data ) {
  2589.         var defaults = {
  2590.             force_form_update: false,
  2591.             force_results_update: false
  2592.         },
  2593.         settings = $.extend( {}, defaults, data );
  2594.         self.manage_changed_form( settings.form, settings.force_form_update, settings.force_results_update );
  2595.     });
  2596.  
  2597.     // Also, stop the rollover if we do any modification on the parametric search form
  2598.  
  2599.     $( document ).on( 'change', '.js-wpv-filter-trigger, .js-wpv-filter-trigger-delayed', function() {
  2600.         var thiz = $( this ),
  2601.         fil = thiz.closest( 'form' ),
  2602.         view_num = fil.data( 'viewnumber' );
  2603.         wpv_stop_rollover[view_num] = true;
  2604.     });
  2605.    
  2606.     // ------------------------------------
  2607.     // Custom events
  2608.     // ------------------------------------
  2609.    
  2610.     /**
  2611.     * js_event_wpv_parametric_search_started
  2612.     *
  2613.     * Event fired before updating the parametric search forms and results.
  2614.     *
  2615.     * @param data
  2616.     *   - view_unique_id
  2617.     *
  2618.     * @since 1.9
  2619.     */
  2620.    
  2621.     $( document ).on( 'js_event_wpv_parametric_search_started', function( event, data ) {
  2622.        
  2623.     });
  2624.    
  2625.    
  2626.     /**
  2627.     * js_event_wpv_parametric_search_form_updated
  2628.     *
  2629.     * Event fired after updating the parametric search forms.
  2630.     *
  2631.     * @param data
  2632.     *   - view_unique_id
  2633.     *   - view_changed_form
  2634.     *   - view_changed_form_additional_forms_only
  2635.     *   - view_changed_form_additional_forms_full
  2636.     *
  2637.     * @since 1.9
  2638.     */
  2639.    
  2640.     $( document ).on( 'js_event_wpv_parametric_search_form_updated', function( event, data ) {
  2641.         WPViews.view_frontend_utils.render_frontend_datepicker();
  2642.     });
  2643.    
  2644.     /**
  2645.     * js_event_wpv_parametric_search_results_updated
  2646.     *
  2647.     * Event fired after updating the parametric search results.
  2648.     *
  2649.     * @param data
  2650.     *   - view_unique_id
  2651.     *   - layout
  2652.     *
  2653.     * @since 1.9
  2654.     */
  2655.    
  2656.     $( document ).on( 'js_event_wpv_parametric_search_results_updated', function( event, data ) {
  2657.         WPViews.view_frontend_utils.render_frontend_media_shortcodes( data.layout );
  2658.     });
  2659.    
  2660.     // ------------------------------------
  2661.     // Init
  2662.     // ------------------------------------
  2663.    
  2664.     self.init = function() {
  2665.        
  2666.     }
  2667.    
  2668.     self.init();
  2669.  
  2670. };
  2671.  
  2672. jQuery( document ).ready( function( $ ) {
  2673.     WPViews.view_frontend_utils = new WPViews.ViewFrontendUtils( $ );
  2674.     WPViews.view_pagination = new WPViews.ViewPagination( $ );
  2675.     WPViews.view_parametric_search = new WPViews.ViewParametricSearch( $ );
  2676. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement