File "settings.js"

Full Path: /home/siazco/grocery.siazco.se/wp-content/plugins/woocommerce-table-rate-shipping/assets/js/settings.js
File size: 19.55 KB
MIME-type: text/plain
Charset: utf-8

// Add functionality to Bolder Table Rates Products settings form
jQuery(document).ready(function($) {
    "use strict";


    // Event trigger expand/collapse all sections
    jQuery('#BETRS-method-options').on('click', 'a', function(e){
        e.preventDefault();

        var type = jQuery(this).attr('class');
        var betrs_sections = jQuery('.betrs_settings_section');

        if( type == 'expand' ) {
            betrs_sections.each(function( index ) {
                var inner = $( this ).find( '.betrs_settings_inner' );
                inner.slideDown('fast');
            });
        } else if( type == 'collapse') {
            betrs_sections.each(function( index ) {
                var inner = $( this ).find( '.betrs_settings_inner' );
                inner.slideUp('fast');
            });
        }
    });

    // Hide user permission settings from view unless selected
    if( jQuery('#user_permissions.betrs_settings_section') != undefined ) {
        var settings_table = jQuery('#user_permissions.betrs_settings_section table tbody tr');

        if( jQuery('#woocommerce_betrs_shipping_user_limitation').val() == 'everyone' )
            settings_table.eq(1).css( 'display', 'none' );

        switch( jQuery('#woocommerce_betrs_shipping_user_modification').val() ) {
            case 'specific-users':
                settings_table.eq(3).css( 'display', 'none' );
                break;
            case 'specific-roles':
                settings_table.eq(4).css( 'display', 'none' );
                break;
            case 'admins':
            default:
                settings_table.eq(3).css( 'display', 'none' );
                settings_table.eq(4).css( 'display', 'none' );
                break;
        }
    }
    jQuery('#user_permissions.betrs_settings_section').on('change', '#woocommerce_betrs_shipping_user_limitation', function(e){
        //prevent default action (hyperlink)
        e.preventDefault();

        var chosen = $( this ).val();
        var settings_table = jQuery('#user_permissions.betrs_settings_section table tbody tr');

        if( chosen == 'everyone' )
            settings_table.eq(1).css( 'display', 'none' );
        else
            settings_table.eq(1).css( 'display', '' );
    });
    jQuery('#user_permissions.betrs_settings_section').on('change', '#woocommerce_betrs_shipping_user_modification', function(e){
        //prevent default action (hyperlink)
        e.preventDefault();

        var chosen = $( this ).val();
        var settings_table = jQuery('#user_permissions.betrs_settings_section table tbody tr');

        settings_table.eq(3).css( 'display', 'none' );
        settings_table.eq(4).css( 'display', 'none' );

        if( chosen == 'specific-roles' ) {
            settings_table.eq(3).css( 'display', '' );
        } else if( chosen == 'specific-users' ) {
            settings_table.eq(4).css( 'display', '' );
        }
    });


    // Event trigger for adding method conditions to the settings page
    jQuery(document).on('click', '#conditions.betrs_settings_section a.betrs_add_method_cond', function(e){
        e.preventDefault();

        jQuery(this).block({ message: null, overlayCSS: { background: '#fff', opacity: 0.6 } });

        var link_clicked = jQuery(this);
        var conds_table = jQuery(this).closest('td').find('table#method_conditions');
        var conds_table_rows = conds_table.find('tr');

        if( conds_table.length == 1 ) {
            var cond_ID = conds_table_rows.length;
            var data = { action: 'betrs_add_method_condition', condID: cond_ID };

            $.post( ajaxurl, data, function( response ) {
                // append new row to table
                conds_table.append( response );
                link_clicked.find('.blockUI').remove();

            });
        }
    });

    // Event trigger for updating method conditions in the settings page
    jQuery(document).on('change', '#conditions.betrs_settings_section select.method_cond', function(e){
        e.preventDefault();

        var cond_changed = jQuery(this);
        var cond_container = cond_changed.closest('tr');
        var cond_selection = cond_changed.val();

        cond_container.block({ message: null, overlayCSS: { background: '#fff', opacity: 0.6 } });

        var cond_ID = cond_container.index();
        var data = { action: 'betrs_add_method_condition_extras', selected: cond_selection, condID: cond_ID };

        $.post( ajaxurl, data, function( response ) {
            // append new row to table
            if( cond_container.find('.cond_op_extras').length > 0 ) {
                cond_container.find('.cond_op_extras').replaceWith( response );
            } else {
                jQuery(cond_changed).parent().after( response );
            }

            jQuery(document).trigger( 'betrs_update_options' );
            jQuery(document).trigger( 'betrs_update_datepickers' );
            cond_container.find('.blockUI').remove();
            cond_container.trigger('wc-enhanced-select-init');

        });

    });

    // Event trigger for removing single cond from method conditions table
    jQuery(document).on('click', '#conditions.betrs_settings_section span.betrs_delete_method_cond', function(){
        var answer = confirm(betrs_data.text_delete_confirmation);

        if (answer) {
            jQuery(this).closest('tr').remove();
        }
        return false;
    });


    // Hide Per Class settings if not the selected option
    if( jQuery('#other.betrs_settings_section') != undefined ) {
        var settings_table = jQuery('#other.betrs_settings_section table tbody');
        var single_fields = settings_table.find('.per-class-only');

        if( jQuery('#woocommerce_betrs_shipping_condition').val() != 'per-class' ) {

            single_fields.each(function(i, el){
                jQuery(el).closest('tr').css( 'display', 'none' );
            });
        }
    }
    jQuery('#general.betrs_settings_section').on('change', '#woocommerce_betrs_shipping_condition', function(e){
        //prevent default action (hyperlink)
        e.preventDefault();

        var chosen = $( this ).val();

        if( chosen == 'per-class' ) {
            single_fields.each(function(i, el){
                jQuery(el).closest('tr').css( 'display', '' );
            });
        } else {
            single_fields.each(function(i, el){
                jQuery(el).closest('tr').css( 'display', 'none' );
            });
        }
    });


    // Toggle plus/minus icon
    jQuery('.betrs_settings_section').on('click', 'h3', function(e){
        //prevent default action (hyperlink)
        e.preventDefault();

        betrs_toggle_section_icon( jQuery(this) );

        var inner = $( this ).next( '.betrs_settings_inner' );
        inner.slideToggle('fast');
    });
    function betrs_toggle_section_icon( section_div ) {
        if( section_div.hasClass('open') )
            section_div.removeClass('open');
        else
            section_div.addClass('open');
    }

    // Create new category button
    jQuery('.betrs_settings_section').on('click', '.next-link a', function(e){
        //prevent default action (hyperlink)
        e.preventDefault();

        var inner = jQuery( this ).closest( '.betrs_settings_inner' );
        var inner_next = jQuery( this ).closest( '.betrs_settings_section' ).next( '.betrs_settings_section' ).find( '.betrs_settings_inner' );

        betrs_toggle_section_icon( inner.parent().find('h3') );
        inner.slideUp('fast');
        betrs_toggle_section_icon( inner_next.parent().find('h3') );
        inner_next.slideDown('fast');
    });

    // Swap voluemtric operand in printed equation
    jQuery('.betrs_settings_section').on('change', '.operand_selector', function(e){
        //prevent default action (hyperlink)
        e.preventDefault();

        var volumetric_operand = $( this ).val();
        var volumetric_divisor = jQuery( '.volumetric_number' ).next( '.description' ).find( 'span' );
        var volumetric_divisor_desc = volumetric_divisor.html();

        if( volumetric_operand == 'multiply' )
            var new_desc = volumetric_divisor_desc.replace( '/', 'x' );
        else
            var new_desc = volumetric_divisor_desc.replace( 'x', '/' );

        volumetric_divisor.html( new_desc );
    });

    // Handle sorting the options
    jQuery('.betrs_settings_section').on('click', '.betrs-move-option-up', function(e){
        //prevent default action (hyperlink)
        e.preventDefault();

        var current = jQuery(this).closest('.single-row');
        var previous = current.prev('.single-row');

        if( previous.length !== 0 ) {
            current.insertBefore( previous );
            betrs_update_input_names();
        }

        return false;
    });
    jQuery('.betrs_settings_section').on('click', '.betrs-move-option-down', function(e){
        //prevent default action (hyperlink)
        e.preventDefault();

        var current = jQuery(this).closest('.single-row');
        var next = current.next('.single-row');

        if( next.length !== 0 ) {
            current.insertAfter( next );
            betrs_update_input_names();
        }

        return false;
    });

    // Rename input names to match newly sorted options
    function betrs_update_input_names() {
        // gather all options on page and cycle through one by one
        var page_options = jQuery('');
        jQuery( ".betrs_settings_section .single-row" ).each(function( index ) {
            op_number = index + 1;

            // update row ID, option number, and title input
            jQuery(this).attr('data-row_id', op_number);
            jQuery(this).find('.shipping-headline').each(function() {
                jQuery(this).html( jQuery(this).html().replace( /(\d)+/, op_number) );
            });
            jQuery(this).find('.titlewrap input').each(function() {
                this.name = this.name.replace(/\[\d+\]/, '[' + op_number + ']');
                if(this.name.search('option_id') == 0){
                    this.value = op_number;
                }
            });

            // update additional options section
            additional_box = jQuery(this).find('.additional-settings');
            additional_box.html( additional_box.html().replace(/\[\d+\]/g, '[' + op_number + ']'));

            // update table inputs
            jQuery(this).find('table.table_rates tbody').children("tr").each(function (idx) {
                var $inp = jQuery(this).find('td:not(:first-child, :last-child)').find('input,textarea,select');

                $inp.each(function () {
                    this.name = this.name.replace(/\[\d+\]/, '[' + op_number + ']');
                })
            });
        });
    }

    // Handle Import Table link click
    jQuery('.betrs_settings_section').on('click', 'a.betrs_table_import', function(e) {
        e.preventDefault();

        var cost_table = jQuery(this).closest('.single-row').find('.wp-list-table.table_rates');
        var option_ID = jQuery(this).closest('.single-row').attr('data-row_id');
        var row_ID = cost_table.find("tbody > tr").length;

        //alter row_ID if there is only one row and it has the 'no-rows' class
        if( row_ID == 1 && cost_table.find("tbody").children('tr:first').hasClass('no-items') ) {
            row_ID--;
        }

        var create_form = 
        '<div id="betrs-import-table-popup" class="betrs-popup">' +
            '<div class="be-popup-container add_form" id="betrs-import-table-form">' +
                '<form method="post" enctype="multipart/form-data">' +
                '<h3>' + betrs_data.text_importing_table + '</h3>' +
                '<p><span>' + betrs_data.text_importing_csv + '</span></p>' +
                '<input type="hidden" name="option_ID" id="option_ID" value="' + option_ID + '" />' +
                '<input type="hidden" name="row_ID" id="row_ID" value="' + row_ID + '" />' +
                '<p><input type="file" name="betrs_import_csv" id="betrs_import_csv" accept=".csv, text/csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel" /></p>' +
                '<p><label><input type="checkbox" name="betrs_table_delete" id="betrs_table_delete" />' + betrs_data.text_importing_del + '</label></p>' +
                '<p><input type="submit" name="betrs_table_import" value="' + betrs_data.text_upload + '" class="form_submit" /> <a href="#" class="cancel">' + betrs_data.text_cancel + '</a></p>' +
                '</form>' +
            '</div>' +  
        '</div>';

        //insert lightbox HTML into page
        jQuery('body').append(create_form);
        betrswc_doBoxSize();

    });

    // Handle Import Table form submission
    jQuery(document).on('submit', '#betrs-import-table-form', function(e){
        e.preventDefault();

        var option_ID = jQuery(this).find('input#option_ID').val();
        var row_ID = jQuery(this).find('input#row_ID').val();
        var cost_table = jQuery('#BETRS-table-rates-parent').find('.single-row[data-row_id="' + option_ID + '"]').find('.wp-list-table.table_rates tbody');
        var delete_rows = jQuery(this).find('input#betrs_table_delete');
        var fileInput = jQuery(this).find('input#betrs_import_csv');
        var acceptable_types = [".csv", "text/csv", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "application/vnd.ms-excel"];
        var valid_extensions = /(\.csv)$/i;

        if ( fileInput.val() ) {
            var file = fileInput[0].files[0];
            var form_div = jQuery(this);

            // if a valid CSV file is entered
            if( acceptable_types.indexOf( file.type ) > -1 || valid_extensions.test( file.name ) ) {
                form_div.block({ message: null, overlayCSS: { background: '#fff', opacity: 0.6 } });
                var reader  = new FileReader();
                reader.readAsText(file);
                reader.onload = function(event) {
                    // Remove existing rows if option checked
                    if( delete_rows.is(':checked') ) {
                        cost_table.find('tr').remove();
                        row_ID = 0;
                    }

                    var csv = event.target.result;// Get form
                    var form = $('#betrs-import-table-form form')[0];
                    var form_data = new FormData(form);
                    form_data.append('betrs_import_csv', $('#betrs_import_csv').get(0).files);
                    form_data.append("action", "betrs_import_table");
                    form_data.append("rowID", row_ID);

                    $.ajax({
                        type: "POST",
                        enctype: 'multipart/form-data',
                        url: ajaxurl,
                        data: form_data,
                        processData: false,
                        contentType: false,
                        cache: false,
                        success: function (response) {
                            if( response.search('<tr') != -1 ) {

                                // append results
                                cost_table.append( response );

                                // reinitialize enhanced select boxes for new fields
                                $( document.body ).trigger( 'wc-enhanced-select-init' );

                                // Remove 'No Items' row if exists
                                if( cost_table.find( 'tr.no-items' ) != undefined )
                                    cost_table.find( 'tr.no-items' ).remove();
                                
                                jQuery('#betrs-import-table-popup').remove();
                            } else {
                                var form_desc = form_div.find('p span');
                                form_desc.text(betrs_data.text_error);
                                form_desc.css('color', '#f44336');
                                form_div.find('.blockUI').remove();
                            }
                        },
                        error: function (e) {

                            $("#result").text(e.responseText);
                            console.log("ERROR : ", e);
                            $("#btnSubmit").prop("disabled", false);

                        }
                    });
                }
            } else {
                jQuery(this).find('input[type="file"]').parent().css('border','1px solid #f44336');
            }
        } else {
            jQuery(this).find('input[type="file"]').parent().css('border','1px solid #f44336');
        }

        return false;
    });

    // Handle Export link click
    //jQuery('.betrs_settings_section').on('click', 'a.betrs_table_export', betrs_export_table);

    function betrs_export_table( e ) {
        e.preventDefault();

        var rows_selected = [];
        var link_clicked = jQuery(this);
        var cost_table = jQuery(this).closest('.single-row').find('.wp-list-table.table_rates tbody tr th input:checked');

        cost_table.each(function(i, el){
            var table_row = jQuery(el).closest('tr').find("input, select, textarea");
            rows_selected.push( table_row.serialize() )
        });

        if( rows_selected.length == 0 ) {
            alert( betrs_data.text_no_selection );
            return;
        }

        var create_form = 
        '<div id="betrs-export-table-popup" class="betrs-popup">' +
            '<div class="be-popup-container add_form">' +
                '<h2>' + betrs_data.text_exporting + '</h2>' +
                '<p><img src="' + betrs_data.ajax_loader_url + '" alt="loading..." />' +
            '</div>' +  
        '</div>';
            
        //insert lightbox HTML into page
        jQuery('body').append(create_form);
        betrswc_doBoxSize();

        var data = { action: 'betrs_export_table', rowsSelected: rows_selected };
        $.post( ajaxurl, data, function( response ) {

            if( response == 0 ) {
                jQuery('#betrs-export-table-popup').find('h2').text( betrs_data.text_error ).addClass('betrs_error');
                jQuery('#betrs-export-table-popup').find('h2').after( '<p>' + betrs_data.text_error_server + '</p>' );
                jQuery('#betrs-export-table-popup').find('img').parent().remove();
                setTimeout(function() {
                    jQuery('#betrs-export-table-popup').remove();
                }, 3000);
            } else {
                link_clicked.attr('href', 'data:text/csv;base64,' + response );
                jQuery('.betrs_settings_section').off('click', 'a.betrs_table_export');
                link_clicked[0].click();
                jQuery('#betrs-export-table-popup').remove();
                jQuery('.betrs_settings_section').on('click', 'a.betrs_table_export', betrs_export_table);
            }
        });

        return false;
    }

    // handle resizing of popup box
    function betrswc_doBoxSize() {
        // set max height for popup box
        var window_height = jQuery( window ).height();
        var box_height = window_height - 180;
        jQuery( '.be-popup-container' ).css( 'max-height', box_height +'px' );
    } jQuery( window ).on( 'resize', function() { betrswc_doBoxSize(); });
       
    // Hide popup window on cancel
    jQuery(document).on('click', '.be-popup-container .cancel', function() {
        jQuery( '.betrs-popup' ).remove();
        return false;
    });
             
});