# better-payment/0.0.3/assets/js/admin.js

Better Payment – Instant Payments, Donations, Fundraising with Subscriptions &amp; More, version 0.0.3. 499 lines.

- Page: https://pluginprobe.com/plugins/better-payment/0.0.3/code/assets/js/admin.js
- Raw: https://pluginprobe.com/plugins/better-payment/0.0.3/raw/assets/js/admin.js
- Modified: 2022-04-18T10:23:46+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/better-payment/0.0.3/code/assets/js/admin.js#L10-L20`.

```javascript
(function($) {
    $(document).ready(function() {
        "use strict";

        //Settings Page Starts
        $(".bp-tabs .tab__link").on("click", function(e) {
            e.preventDefault();
            $(".bp-tabs .tab__link").removeClass("active");
            $(this).addClass("active");

            var dataId = $(this).data("id");

            $(".bp-tabs .tab__content__item").removeClass("show").fadeOut();
            $("#" + dataId)
                .addClass("show")
                .fadeIn();
        });

        $(document).on("click", ".sidebar__menu a", function(e) {
            e.preventDefault();

            let sidebar_link_class = "sidebar__link";
            if ($(this).hasClass("sidebar__link_submenu")) {
                sidebar_link_class = "sidebar__link_submenu";
            }

            $(".sidebar__menu ." + sidebar_link_class).removeClass("active");
            $(this).addClass("active");

            var dataId = $(this).data("id");
            $(".content__area__body .sidebar__tab__content")
                .removeClass("show")
                .fadeOut();
            $("#" + dataId)
                .addClass("show")
                .fadeIn();

            //Auto active first submenu item
            if (
                $(this).hasClass("sidebar__link") &&
                (dataId === "admin-email" || dataId === "paypal")
            ) {
                $(this).siblings("ul").find("li a").removeClass("active");
                $(this).siblings("ul").find("li:first-child a").addClass("active");
            }
        });

        $(document).on(
            "click",
            ".sidebar__item .sidebar__link, .email-additional-headers",
            function(e) {
                e.preventDefault();
                let $this = $(this);
                let bpTargetSelector = $(this).hasClass("email-additional-headers") ?
                    ".email-additional-headers-content" :
                    ".sub__menu";

                if ($this.siblings(bpTargetSelector).hasClass("show")) {
                    $this.siblings(bpTargetSelector).removeClass("show").slideUp();
                } else {
                    $(bpTargetSelector + ".show")
                        .slideUp()
                        .removeClass("show");
                    $this.siblings(bpTargetSelector).addClass("show").slideDown();
                }
            }
        );

        //PayPal toggle button
        $(document).on(
            "change",
            '.better-payment-settings-payment-paypal input[name="better_payment_settings_payment_paypal_live_mode"]',
            function(e) {
                e.preventDefault();
                let bpAdminSettingsPaymentPayPal = $(this).attr("data-targettest");

                if ($(this).is(":checked")) {
                    bpAdminSettingsPaymentPayPal = $(this).attr("data-targetlive");
                }

                $(".bp-paypal-key").removeClass("bp-d-block").addClass("bp-d-none");
                $(`.${bpAdminSettingsPaymentPayPal}`)
                    .removeClass("bp-d-none")
                    .addClass("bp-d-block");
            }
        );

        //Stripe toggle button
        $(document).on(
            "change",
            '.better-payment-settings-payment-stripe input[name="better_payment_settings_payment_stripe_live_mode"]',
            function(e) {
                e.preventDefault();
                let bpAdminSettingsPaymentStripe = $(this).attr("data-targettest");

                if ($(this).is(":checked")) {
                    bpAdminSettingsPaymentStripe = $(this).attr("data-targetlive");
                }

                $(".bp-stripe-key").removeClass("bp-d-block").addClass("bp-d-none");
                $(`.${bpAdminSettingsPaymentStripe}`)
                    .removeClass("bp-d-none")
                    .addClass("bp-d-block");
            }
        );

        //Settings Save
        $(document).on(
            "click",
            ".better-payment-admin-settings-button",
            function(e) {
                e.preventDefault();
                let bpAdminSettingsForm = $("#better-payment-admin-settings-form");
                bpAdminSettingsSave(this, bpAdminSettingsForm);
            }
        );

        function bpAdminSettingsSave(button, form) {
            let bpAdminSettingsSaveBtn = $(button),
                nonce = betterPaymentObj.nonce,
                formData = $(form).serializeArray();

            let bpIsFormValidated = bpValidateFormFields(formData);

            //Reset button
            $(".better-payment-settings-reset").val(0);
            if ($(button).hasClass("better-payment-reset-button")) {
                $(".better-payment-settings-reset").val(1);
            }

            if (!bpIsFormValidated) {
                return false;
            }

            let bpIsResetButton = $(button).hasClass("better-payment-reset-button");

            $.ajax({
                type: "POST",
                url: ajaxurl,
                data: {
                    action: "better_payment_settings_action",
                    nonce: nonce,
                    form_data: formData,
                    reset_button: bpIsResetButton,
                },
                beforeSend: function() {
                    bpAdminSettingsSaveBtn.addClass("is-loading");
                },
                success: function(res) {
                    bpAdminSettingsSaveBtn.removeClass("is-loading");
                    if (res.data === "success") {
                        toastr.success("Changes saved successfully!");
                    } else {
                        toastr.error("Opps! something went wrong!");
                    }
                },
            });
        }

        function bpValidateFormFields(formFields, emailFields = []) {
            $(`#better-payment-admin-settings-form input`).removeClass("is-danger");
            if (!emailFields.length) {
                emailFields = [
                    "better_payment_settings_general_email_to",
                    "better_payment_settings_general_email_from_email",
                    "better_payment_settings_general_email_reply_to",
                    "better_payment_settings_general_email_cc",
                    "better_payment_settings_general_email_bcc",
                    "better_payment_settings_general_email_to_customer",
                    "better_payment_settings_general_email_from_email_customer",
                    "better_payment_settings_general_email_reply_to_customer",
                    "better_payment_settings_general_email_cc_customer",
                    "better_payment_settings_general_email_bcc_customer",
                    "better_payment_settings_payment_paypal_email",
                ];
            }

            let formFieldName = "",
                formFieldValue = "",
                formField = "",
                isFormFieldValidated = false,
                errorMessageStr = "";
            for (const property in formFields) {
                formField = formFields[property];
                formFieldName = formField.name;
                formFieldValue = formField.value;

                if (emailFields.indexOf(formFieldName) >= 0 && formFieldValue != "") {
                    isFormFieldValidated = admin_better_email_validation(formFieldValue);

                    if (!isFormFieldValidated) {
                        if (formFieldName == "better_payment_settings_general_email_to") {
                            errorMessageStr = "Admin Email: To Email";
                        } else if (
                            formFieldName ==
                            "better_payment_settings_general_email_from_email"
                        ) {
                            errorMessageStr = "Admin Email: From Email";
                        } else if (
                            formFieldName == "better_payment_settings_general_email_reply_to"
                        ) {
                            errorMessageStr = "Admin Email: Reply-To";
                        } else if (
                            formFieldName == "better_payment_settings_general_email_cc"
                        ) {
                            errorMessageStr = "Admin Email: Cc";
                        } else if (
                            formFieldName == "better_payment_settings_general_email_bcc"
                        ) {
                            errorMessageStr = "Admin Email: Bcc";
                        }
                        if (
                            formFieldName ==
                            "better_payment_settings_general_email_to_customer"
                        ) {
                            errorMessageStr = "Customer Email: To Email";
                        } else if (
                            formFieldName ==
                            "better_payment_settings_general_email_from_email_customer"
                        ) {
                            errorMessageStr = "Customer Email: From Email";
                        } else if (
                            formFieldName ==
                            "better_payment_settings_general_email_reply_to_customer"
                        ) {
                            errorMessageStr = "Customer Email: Reply-To";
                        } else if (
                            formFieldName ==
                            "better_payment_settings_general_email_cc_customer"
                        ) {
                            errorMessageStr = "Customer Email: Cc";
                        } else if (
                            formFieldName ==
                            "better_payment_settings_general_email_bcc_customer"
                        ) {
                            errorMessageStr = "Customer Email: Bcc";
                        } else if (
                            formFieldName == "better_payment_settings_payment_paypal_email"
                        ) {
                            errorMessageStr = "PayPal Business Email";
                        }

                        toastr.error(`Invalid email address on ${errorMessageStr} field!`);
                        $(
                            `#better-payment-admin-settings-form input[name="${formFieldName}"]`
                        ).addClass("is-danger");
                        return false;
                    }
                }
            }

            return true;
        }

        function admin_better_email_validation(email) {
            return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email);
        }
        //Settings Page Ends

        //Transaction Page Starts
        $(document).on(
            "change",
            ".better-payment .header__show_entries select",
            function(e) {
                e.preventDefault();
                let perPageVal = $(this).val();
                location =
                    location.origin +
                    location.pathname +
                    location.search +
                    "&paged=1&per_page=" +
                    perPageVal +
                    location.hash;
            }
        );

        $(document).on(
            "click",
            ".better-payment-transaction-edit, .better-payment-transaction-email-resend",
            function(e) {
                e.preventDefault();
                toastr.warning("Coming REAL Soon!");
            }
        );
        //Pagination

        //Filter transactions
        $(document).on("click", ".better-payment-transaction-filter", function(e) {
            e.preventDefault();
            let paymentFromDate = $(".better-payment input[name='payment_date_from']").val();
            let paymentToDate = $(".better-payment input[name='payment_date_to']").val();
            if (paymentFromDate != "" && paymentToDate != "") {
                if (paymentFromDate > paymentToDate) {
                    toastr.error("From Date must be smaller than To Date!");
                    return false;
                }
            }
            let tableSelector = $(
                ".better-payment-admin-transactions-page .transaction__table"
            );

            let filterFormData = {};
            filterFormData.search_text = $(".better-payment .serch-text").val();

            filterFormData.payment_date_from = paymentFromDate;
            filterFormData.payment_date_to = paymentToDate;
            filterFormData.order_by = $(".better-payment input[name='order_by[]']:checked").val();
            filterFormData.order = $(".better-payment input[name='order[]']:checked").val();

            filterFormData.status = $(".better-payment input[name='status[]']:checked").val();
            filterFormData.source = $(".better-payment input[name='source[]']:checked").val();

            filterFormData.paged = $(".better-payment .paged").val();
            filterFormData.per_page = $(".better-payment .per-page").val();
            filterFormData.total_entry = $(".better-payment .total-entry").val();

            bpTransactionFilter(tableSelector, filterFormData);
        });

        let elements = document.getElementsByClassName("bp-copy-clipboard");
        Array.from(elements).forEach(function(element) {
            element.addEventListener("click", bpTransactionIdCopy);
        });

        function bpTransactionIdCopy() {
            let bpTxnCounter = $(this).attr("data-bp_txn_counter");
            let node = "bp_copy_clipboard_input_" + bpTxnCounter;

            node = document.getElementById(node);

            if (document.body.createTextRange) {
                const range = document.body.createTextRange();
                range.moveToElementText(node);
                range.select();

                document.execCommand("copy");
            } else if (window.getSelection) {
                const selection = window.getSelection();
                const range = document.createRange();
                range.selectNodeContents(node);
                selection.removeAllRanges();
                selection.addRange(range);

                document.execCommand("copy");
                selection.removeAllRanges();
            } else {
                console.warn("Could not select text in node: Unsupported browser.");
            }
            $(".bp-copy-clipboard").attr("title", "Copy").css("color", "#2a3256");
            $(this).attr("title", "Copied!").css("color", "#6e58f7");
        }

        function bpTransactionFilter(tableSelector, filterFormData) {
            $.ajax({
                type: "POST",
                url: ajaxurl,
                data: {
                    action: "better-payment-filter-transaction",
                    nonce: betterPaymentObj.nonce,
                    filterFormData: filterFormData,
                },
                dataType: "html",
                beforeSend: function() {
                    tableSelector.css("opacity", ".5");
                },
                success: function(resultHtml) {
                    $(".better-payment .transaction-table-wrapper").replaceWith(
                        resultHtml
                    );
                    tableSelector.css("opacity", "1");
                },
            });
        }

        // Custom Dropdown Button
        $(document).on(
            "click",
            ".better-payment .bp_time_period-custom-range",
            function (e) {
                $(".better-payment .modal.bp-custom-time-period").addClass(
                "is-active"
                );
            }
        );

        $(document).on("click", ".bp-select-custom-button", function(e) {
            e.preventDefault();
            let $this = $(this);
            let dataTarget = $this.attr("data-target");
            $(dataTarget).toggleClass("is-hidden");

            let dropdownInputs = ['status', 'order_by', 'order', 'source'];
            
            hideOtherDropdownsV2(dropdownInputs, dataTarget);
        });

        $(document).on("click", "body", function(e) {
            let dropdownInputs = ['status', 'order_by', 'order', 'source'];
            hideOtherDropdowns(dropdownInputs, e);
        });

        $(".bp-select-custom-button-dropdown input[type='checkbox']").change(
            function() {
                let inputName = $(this).attr("name");
                inputName = inputName.replace("[]", "");
                
                let inputValueDefault = $(this).closest('.bp-select-custom-button-dropdown').attr("data-defaultvalue");

                if (this.checked) {
                    //Uncheck other checkboxes but this one
                    $(`.${inputName}-dropdown input[name='${inputName}[]']`)
                        .not(this)
                        .prop("checked", false);

                    updateDropdownText(this.value, inputName);
                } else {
                    //If four checkboxes are unchecked then check Default checkbox
                    if (
                        !$(`.${inputName}-dropdown input[name='${inputName}[]']:checked`)
                        .length
                    ) {
                        if (typeof inputValueDefault !== "undefined") {
                            $(`.${inputName}-dropdown .${inputName}-${inputValueDefault}`).prop(
                                "checked",
                                true
                            );
                        }

                        updateDropdownText(capitalizeFirstLetter(inputName), inputName);
                    }
                }
            }
        );

        function hideOtherDropdowns(inputs = ['status', 'source'], e, containerClass = 'bp-select-custom-button-wrap') {
            let filter_button_container = $(`.${containerClass}`);

            if (
                !filter_button_container.is(e.target) &&
                filter_button_container.has(e.target).length === 0
            ) {
                if(inputs.length > 0) {
                    inputs.forEach(function(input) {
                        if (!$(`.${input}-dropdown`).hasClass("is-hidden")) {
                            $(`.${input}-dropdown`).addClass("is-hidden");
                        }
                    });
                }
            }
        }

        function hideOtherDropdownsV2(inputs, dataTarget){
            let currentInputName = dataTarget.replace(".", "").replace("-dropdown", "");
            if(inputs.length > 0) {
                inputs.forEach(function(inputName) {
                    if (inputName !== currentInputName) {
                        if (!$(`.${inputName}-dropdown`).hasClass("is-hidden")) {
                            $(`.${inputName}-dropdown`).addClass("is-hidden");
                        }
                    }
                });
            }
        }

        function capitalizeFirstLetter(string) {
            let capitalized = string.charAt(0).toUpperCase() + string.slice(1);
            return capitalized.replace('_', ' ');
        }

        function updateDropdownText(
            text,
            inputName = "status",
            buttonTextPrefix = ""
        ) {
            $(`.${inputName}-button-text`).html(
                buttonTextPrefix + capitalizeFirstLetter(text)
            );
        }

        //Transaction Page Ends

        //Helper Functions Starts
        function toasterOptions() {
            toastr.options = {
                timeOut: "2000",
                toastClass: "font-size-md",
                positionClass: "toast-top-center",
                showMethod: "slideDown",
                hideMethod: "slideUp",
            };
        }
        toasterOptions();

        $(".bp-datepicker").datepicker({
            dateFormat: "dd-mm-yy",
        });
        //Helper Functions Ends
    });
})(jQuery);
```
