123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- /**
- * @deprecated since version 2.2.0
- */
- define([
- 'jquery',
- 'mage/template',
- 'jquery/ui'
- ], 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;
- });
|