HEX
Server: Apache/2.4.41 (Ubuntu)
System: Linux ip-172-31-42-149 5.15.0-1084-aws #91~20.04.1-Ubuntu SMP Fri May 2 07:00:04 UTC 2025 aarch64
User: ubuntu (1000)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/vhost/disk-apps/magento.bikenow.co/lib/web/mage/list.js
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */

/**
 * @deprecated since version 2.2.0
 */
define([
    'jquery',
    'mage/template',
    'jquery-ui-modules/widget'
], function ($, mageTemplate) {
    'use strict';

    $.widget('mage.list', {
        options: {
            template: '[data-role=item]', //template for item,
            templateWrapper: null, //template wrapper
            templateClass: null, //template wrapper class
            destinationSelector: '[data-role=container]', //destination selector of list
            itemIndex: 0, //setting an item index
            itemCount: 0, //get count of items
            addButton: '[data-button=add]', //button for adding list item
            removeButton: '[data-button=remove]', //button for removing list item
            maxItems: null,
            maxItemsAlert: null
        },

        /**
         * @private
         */
        _create: function () {
            var options, destination, addButton;

            this.options.itemCount = this.options.itemIndex = 0;

            options = this.options;
            destination = $(options.destinationSelector);
            addButton = this.element.find($(options.addButton));

            this.element
                .addClass('list-widget');

            addButton.bind('click', $.proxy(this.handleAdd, this));

            //handle remove
            destination.on('click', this.options.removeButton, $.proxy(this.removeItem, this));
        },

        /**
         * @return {Boolean}
         */
        handleAdd: function () {
            this.addItem(++this.options.itemIndex);

            return false;
        },

        /**
         * @param {*} index
         * @param {*} parent
         * @return {*|jQuery|HTMLElement}
         */
        addItem: function (index, parent) {
            var options = this.options,
                template = $(options.template),
                destination = $(options.destinationSelector),
                item = $(options.templateWrapper),
                source, preTemplate, context, compiledTemplate;

            item.addClass(this.options.templateClass)
                .attr('id', 'list-item-' + index)
                .attr('data-role', 'addedItem')
                .attr('data-parent', parent);

            source = template.html();
            preTemplate = mageTemplate(source);
            context = this.handleContext(index);
            compiledTemplate = preTemplate({
                data: context
            });

            item.append(compiledTemplate);
            destination.append(item);

            this.checkLimit(++this.options.itemCount);

            return item;
        },

        /**
         * @param {*} index
         * @return {Object}
         */
        handleContext: function (index) {
            var context = {
                _index_: index
            };

            return context;
        },

        /**
         * @param {jQuery.Event} e
         * @return {Boolean}
         */
        removeItem: function (e) {
            $(e.currentTarget).closest('[data-role="addedItem"]').remove();

            this.checkLimit(--this.options.itemCount);

            return false;
        },

        /**
         * @param {*} index
         */
        checkLimit: function (index) {
            var addButton = $(this.options.addButton),
                maxItems = this.options.maxItems,
                maxItemsAlert = $(this.options.maxItemsAlert);

            if (maxItems !== null && index >= maxItems) {
                addButton.hide();
                maxItemsAlert.show();
            } else if (addButton.is(':hidden')) {
                addButton.show();
                maxItemsAlert.hide();
            }
        },

        /**
         * @private
         */
        _destroy: function () {
            var destination = $(this.options.destinationSelector);

            this.element
                .removeClass('list-widget');
            destination
                .find('[data-role="addedItem"]')
                .remove();
        }
    });

    return $.mage.list;
});