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;
});