/** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ /** * @deprecated since version 2.2.0 */ /* global EditableMultiselect */ /* eslint-disable strict */ define([ 'jquery', 'Magento_Ui/js/modal/alert', 'Magento_Ui/js/modal/confirm', 'jquery/editableMultiselect/js/jquery.editable', 'jquery/editableMultiselect/js/jquery.multiselect' ], function ($, alert, confirm) { /** * Editable multiselect wrapper for multiselects * This class is defined in global scope ('var' is not needed). * * @param {Object} settings - settings object. * @param {String} settings.add_button_caption - caption of the 'Add New Value' button * @param {String} settings.new_url - URL to which new request has to be submitted * @param {String} settings.save_url - URL to which save request has to be submitted * @param {String} settings.delete_url - URL to which delete request has to be submitted * @param {String} settings.delete_confirm_message - confirmation message that is shown to user during * delete operation * @param {String} settings.target_select_id - HTML ID of target select element * @param {Hash} settings.submit_data - extra parameters to send with new/edit/delete requests * @param {String} settings.entity_value_name - name of the request parameter that represents select option text * @param {String} settings.entity_id_name - name of the request parameter that represents select option value * @param {Boolean} settings.is_entry_editable - flag that shows if user can add/edit/remove data * * @constructor */ window.EditableMultiselect = function (settings) { this.settings = settings || {}; this.addButtonCaption = this.settings['add_button_caption'] || 'Add new value'; this.newUrl = this.settings['new_url']; this.saveUrl = this.settings['save_url']; this.deleteUrl = this.settings['delete_url']; this.deleteConfirmMessage = this.settings['delete_confirm_message']; this.targetSelectId = this.settings['target_select_id']; this.submitData = this.settings['submit_data'] || {}; this.entityIdName = this.settings['entity_id_name'] || 'entity_id'; this.entityValueName = this.settings['entity_value_name'] || 'entity_value'; this.isEntityEditable = this.settings['is_entity_editable'] || false; /** * Initialize editable multiselect (make it visible in UI) */ EditableMultiselect.prototype.init = function () { var self = this, mselectOptions = { addText: this.addButtonCaption, /** * @param {*} value * @param {*} options */ mselectInputSubmitCallback: function (value, options) { self.createEntity(value, options); } }, mselectList; if (!this.isEntityEditable) { // Override default layout of editable multiselect mselectOptions.layout = '
' + '
' + '%items%' + '
' + '
' + '' + '' + '' + '
' + '
'; } $('#' + this.targetSelectId).multiselect(mselectOptions); // Make multiselect editable if needed if (this.isEntityEditable) { this.makeMultiselectEditable(); // Root element of HTML markup that represents select element in UI mselectList = $('#' + this.targetSelectId).next(); this.attachEventsToControls(mselectList); } }; /** * Attach required event handlers to control elements of editable multiselect * * @param {Object} mselectList */ EditableMultiselect.prototype.attachEventsToControls = function (mselectList) { mselectList.on('click.mselect-delete', '.mselect-delete', { container: this }, function (event) { // Pass the clicked button to container event.data.container.deleteEntity({ 'delete_button': this }); }); mselectList.on('click.mselect-checked', '.mselect-list-item input', { container: this }, function (event) { var el = $(this), checkedClassName = 'mselect-checked'; el[el.is(':checked') ? 'addClass' : 'removeClass'](checkedClassName); event.data.container.makeMultiselectEditable(); }); mselectList.on('click.mselect-edit', '.mselect-edit', { container: this }, function (event) { event.data.container.makeMultiselectEditable(); $(this).parent().find('label span').trigger('dblclick'); }); }; /** * Make multiselect editable */ EditableMultiselect.prototype.makeMultiselectEditable = function () { var entityIdName = this.entityIdName, entityValueName = this.entityValueName, selectList = $('#' + this.targetSelectId).next(); selectList.find('.mselect-list-item:not(.mselect-list-item-not-editable) label span').editable(this.saveUrl, { type: 'text', submit: '