110 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			110 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
| /**
 | |
|  * Copyright © Magento, Inc. All rights reserved.
 | |
|  * See COPYING.txt for license details.
 | |
|  */
 | |
| 
 | |
| /**
 | |
|  * @deprecated since version 2.2.0
 | |
|  */
 | |
| define([
 | |
|     'jquery',
 | |
|     'jquery-ui-modules/widget'
 | |
| ], function ($) {
 | |
|     'use strict';
 | |
| 
 | |
|     /**
 | |
|      * This widget will allow a control with the fieldsetResetControl widget attached to reset a set of input fields.
 | |
|      * The input fields to reset are defined by the inputSelector selector. The widget will store a clone of the fields
 | |
|      * on create, and on trigger of fieldsetReset event it resets the defined fields. The event is triggered by the
 | |
|      * reset control widget.
 | |
|      *
 | |
|      * For inputs of type file, the whole dom element is replaced as changing the value is a security violation
 | |
|      * For inputs of type checkbox or radio, the checked attribute is added or removed as appropriate
 | |
|      * For all others the jquery .val method is used to update to value to the original.
 | |
|      */
 | |
|     $.widget('mage.fieldsetControls', {
 | |
|         original: undefined,
 | |
|         options: {
 | |
|             inputSelector: '[data-reset="true"]'
 | |
|         },
 | |
| 
 | |
|         /**
 | |
|          * @private
 | |
|          */
 | |
|         _create: function () {
 | |
|             this.original = this.element.find(this.options.inputSelector).clone(true);
 | |
|             this._bind();
 | |
|         },
 | |
| 
 | |
|         /**
 | |
|          * @private
 | |
|          */
 | |
|         _bind: function () {
 | |
|             this._on({
 | |
|                 'fieldsetReset': '_onReset'
 | |
|             });
 | |
|         },
 | |
| 
 | |
|         /**
 | |
|          * @param {jQuery.Event} e
 | |
|          * @private
 | |
|          */
 | |
|         _onReset: function (e) {
 | |
|             var items;
 | |
| 
 | |
|             e.stopPropagation();
 | |
|             // find all the ones we have to remove
 | |
|             items = this.element.find(this.options.inputSelector);
 | |
|             // loop over replacing each one.
 | |
|             items.each($.proxy(function (index, item) {
 | |
|                 if ($(item).attr('type') == 'file') { //eslint-disable-line eqeqeq
 | |
|                     // Replace the current one we found with a clone of the original saved earlier
 | |
|                     $(item).replaceWith($(this.original[index]).clone(true));
 | |
|                 } else if ($(item).attr('type') == 'checkbox' || $(item).attr('type') == 'radio') { //eslint-disable-line
 | |
|                     // Return to original state.
 | |
|                     if ($(this.original[index]).attr('checked') === undefined) {
 | |
|                         $(item).removeAttr('checked');
 | |
|                     } else {
 | |
|                         $(item).attr('checked', $(this.original[index]).attr('checked'));
 | |
|                     }
 | |
|                 } else {
 | |
|                     // Replace the value with the original
 | |
|                     $(item).val($(this.original[index]).val());
 | |
|                 }
 | |
|             }, this));
 | |
|         }
 | |
|     });
 | |
| 
 | |
|     $.widget('mage.fieldsetResetControl', {
 | |
|         /**
 | |
|          * @private
 | |
|          */
 | |
|         _create: function () {
 | |
|             this._bind();
 | |
|         },
 | |
| 
 | |
|         /**
 | |
|          * @private
 | |
|          */
 | |
|         _bind: function () {
 | |
|             this._on({
 | |
|                 click: '_onClick'
 | |
|             });
 | |
|         },
 | |
| 
 | |
|         /**
 | |
|          * @param {jQuery.Event} e
 | |
|          * @private
 | |
|          */
 | |
|         _onClick: function (e) {
 | |
|             e.stopPropagation();
 | |
|             $(this.element).trigger('fieldsetReset');
 | |
|         }
 | |
|     });
 | |
| 
 | |
|     return {
 | |
|         fieldsetControls: $.mage.fieldsetControls,
 | |
|         fieldsetResetControl: $.mage.fieldsetResetControl
 | |
|     };
 | |
| });
 |