# king-addons/51.1.86/includes/wishlist/assets/script.js

King Addons for Elementor – 100+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce Builder, Mega Menu, Popup Builder, version 51.1.86. 224 lines.

- Page: https://pluginprobe.com/plugins/king-addons/51.1.86/code/includes/wishlist/assets/script.js
- Raw: https://pluginprobe.com/plugins/king-addons/51.1.86/raw/includes/wishlist/assets/script.js
- Modified: 2026-09-23T19:18:30+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/king-addons/51.1.86/code/includes/wishlist/assets/script.js#L10-L20`.

```javascript
(function ($) {
    'use strict';

    const settings = window.kingAddonsWishlist || {};

    const getVariationId = ($button) => {
        const explicit = parseInt($button.data('variation-id'), 10);
        if (explicit) {
            return explicit;
        }

        const $form = $button.closest('form.variations_form');
        if ($form.length) {
            const picked = parseInt($form.find('input.variation_id').val(), 10);
            if (!isNaN(picked) && picked > 0) {
                return picked;
            }
        }

        return 0;
    };

    const updateButtonState = ($button, state) => {
        const labelDefault = $button.attr('data-label-default') || settings.labels?.add || '';
        const labelAdded = $button.attr('data-label-added') || settings.labels?.added || '';
        const isAdded = state === 'added';

        $button.attr('data-state', isAdded ? 'added' : 'default');
        $button.attr('aria-pressed', isAdded ? 'true' : 'false');
        $button.toggleClass('king-addons-wishlist-button--added', isAdded);
        $button.toggleClass('king-addons-wishlist-button--default', !isAdded);
        $button.attr('aria-label', isAdded ? labelAdded : labelDefault);

        const $label = $button.find('.king-addons-wishlist-button__label');
        if ($label.length) {
            $label.text(isAdded ? labelAdded : labelDefault);
        }
    };

    const updateCounters = (count) => {
        $('.king-addons-wishlist-counter').each(function () {
            const $counter = $(this);
            $counter.attr('data-count', count);
            $counter.text(count);
        });
    };

    const restoreEmptyRows = () => {
        $('.king-addons-wishlist-table tbody').each(function () {
            const $tbody = $(this);
            if ($tbody.find('.king-addons-wishlist-table__row').length) {
                return;
            }
            if ($tbody.find('.king-addons-wishlist-table__empty').length) {
                return;
            }
            const cols = $tbody.closest('table').find('thead th').length || 1;
            $tbody.append(
                '<tr><td colspan="' + cols + '" class="king-addons-wishlist-table__empty">' +
                (settings.labels?.empty || 'No products in wishlist yet.') +
                '</td></tr>'
            );
        });
    };

    const syncButtons = (productId, variationId, state) => {
        $('.king-addons-wishlist-button').each(function () {
            const $btn = $(this);
            const pid = parseInt($btn.attr('data-product-id'), 10);
            const vid = parseInt($btn.attr('data-variation-id'), 10) || 0;
            if (pid !== productId || vid !== variationId) {
                return;
            }
            if ($btn.hasClass('king-addons-wishlist-button--table-remove')) {
                if (state === 'default') {
                    $btn.closest('tr').remove();
                }
                return;
            }
            updateButtonState($btn, state);
        });
        if (state === 'default') {
            restoreEmptyRows();
        }
    };

    const handleToggle = ($button) => {
        const productId = parseInt($button.data('product-id'), 10);
        const wishlistId = $button.data('wishlist-id') || '';
        const variationId = getVariationId($button);

        if (!productId) {
            return;
        }

        $button.prop('disabled', true);

        $.post(settings.ajaxUrl, {
            action: 'king_addons_wishlist_toggle',
            nonce: settings.nonce,
            product_id: productId,
            variation_id: variationId,
            wishlist_id: wishlistId,
        })
            .done((response) => {
                if (response.success && response.data) {
                    syncButtons(productId, variationId, response.data.state);
                    if (response.data.count !== undefined) {
                        updateCounters(response.data.count);
                    }
                } else if (response?.data?.message) {
                    alert(response.data.message);
                } else {
                    alert(settings.labels?.error || 'Error');
                }
            })
            .fail((xhr) => {
                if (xhr?.responseJSON?.data?.message) {
                    alert(xhr.responseJSON.data.message);
                } else {
                    alert(settings.labels?.error || 'Error');
                }
            })
            .always(() => {
                $button.prop('disabled', false);
            });
    };

    $(document).on('click', '.king-addons-wishlist-button', function (event) {
        event.preventDefault();
        handleToggle($(this));
    });

    // Notes functionality (Pro)
    const handleNoteSave = ($container) => {
        const productId = parseInt($container.data('product-id'), 10);
        const variationId = parseInt($container.data('variation-id'), 10) || 0;
        const wishlistId = $container.data('wishlist-id') || '';
        const note = $container.find('.king-addons-wishlist-notes__input').val().trim();

        const $saveBtn = $container.find('.king-addons-wishlist-notes__save');
        $saveBtn.prop('disabled', true).text('...');

        $.post(settings.ajaxUrl, {
            action: 'king_addons_wishlist_update_note',
            nonce: settings.nonce,
            product_id: productId,
            variation_id: variationId,
            wishlist_id: wishlistId,
            note: note,
        })
            .done((response) => {
                if (response.success) {
                    const $display = $container.find('.king-addons-wishlist-notes__display');
                    const $form = $container.find('.king-addons-wishlist-notes__form');
                    const $text = $container.find('.king-addons-wishlist-notes__text');

                    $text.text(note);

                    if (note) {
                        $display.show();
                        $form.hide();
                    } else {
                        $display.hide();
                        $form.show();
                    }
                } else if (response?.data?.message) {
                    alert(response.data.message);
                }
            })
            .fail((xhr) => {
                if (xhr?.responseJSON?.data?.message) {
                    alert(xhr.responseJSON.data.message);
                } else {
                    alert(settings.labels?.error || 'Error');
                }
            })
            .always(() => {
                $saveBtn.prop('disabled', false).text('Save');
            });
    };

    // Edit note button click
    $(document).on('click', '.king-addons-wishlist-notes__edit-btn', function (event) {
        event.preventDefault();
        const $container = $(this).closest('.king-addons-wishlist-notes');
        $container.find('.king-addons-wishlist-notes__display').hide();
        $container.find('.king-addons-wishlist-notes__form').show();
        $container.find('.king-addons-wishlist-notes__input').focus();
    });

    // Save note button click
    $(document).on('click', '.king-addons-wishlist-notes__save', function (event) {
        event.preventDefault();
        const $container = $(this).closest('.king-addons-wishlist-notes');
        handleNoteSave($container);
    });

    // Cancel note edit
    $(document).on('click', '.king-addons-wishlist-notes__cancel', function (event) {
        event.preventDefault();
        const $container = $(this).closest('.king-addons-wishlist-notes');
        const $display = $container.find('.king-addons-wishlist-notes__display');
        const $form = $container.find('.king-addons-wishlist-notes__form');
        const originalNote = $display.find('.king-addons-wishlist-notes__text').text();

        $container.find('.king-addons-wishlist-notes__input').val(originalNote);
        $display.show();
        $form.hide();
    });

    // Submit on Enter key
    $(document).on('keydown', '.king-addons-wishlist-notes__input', function (event) {
        if (event.key === 'Enter' && !event.shiftKey) {
            event.preventDefault();
            const $container = $(this).closest('.king-addons-wishlist-notes');
            handleNoteSave($container);
        }
    });
})(jQuery);




```
