![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/magento/module-wishlist/view/frontend/web/js/ |
/** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ define([ 'jquery', 'jquery-ui-modules/widget' ], function ($) { 'use strict'; $.widget('mage.addToWishlist', { options: { bundleInfo: 'div.control [name^=bundle_option]', configurableInfo: '.super-attribute-select', groupedInfo: '#super-product-table input', downloadableInfo: '#downloadable-links-list input', customOptionsInfo: '.product-custom-option', qtyInfo: '#qty', actionElement: '[data-action="add-to-wishlist"]', productListWrapper: '.product-item-info', productPageWrapper: '.product-info-main' }, /** @inheritdoc */ _create: function () { this._bind(); }, /** * @private */ _bind: function () { var options = this.options, dataUpdateFunc = '_updateWishlistData', validateProductQty = '_validateWishlistQty', changeCustomOption = 'change ' + options.customOptionsInfo, changeQty = 'change ' + options.qtyInfo, updateWishlist = 'click ' + options.actionElement, events = {}, key; if ('productType' in options) { if (typeof options.productType === 'string') { options.productType = [options.productType]; } } else { options.productType = []; } events[changeCustomOption] = dataUpdateFunc; events[changeQty] = dataUpdateFunc; events[updateWishlist] = validateProductQty; for (key in options.productType) { if (options.productType.hasOwnProperty(key) && options.productType[key] + 'Info' in options) { events['change ' + options[options.productType[key] + 'Info']] = dataUpdateFunc; } } this._on(events); }, /** * @param {jQuery.Event} event * @private */ _updateWishlistData: function (event) { var dataToAdd = {}, isFileUploaded = false, handleObjSelector = null, self = this; if (event.handleObj.selector == this.options.qtyInfo) { //eslint-disable-line eqeqeq this._updateAddToWishlistButton({}, event); event.stopPropagation(); return; } handleObjSelector = $(event.currentTarget).closest('form').find(event.handleObj.selector); handleObjSelector.each(function (index, element) { if ($(element).is('input[type=text]') || $(element).is('input[type=email]') || $(element).is('input[type=number]') || $(element).is('input[type=hidden]') || $(element).is('input[type=checkbox]:checked') || $(element).is('input[type=radio]:checked') || $(element).is('textarea') || $('#' + element.id + ' option:selected').length ) { if ($(element).data('selector') || $(element).attr('name')) { dataToAdd = $.extend({}, dataToAdd, self._getElementData(element)); } return; } if ($(element).is('input[type=file]') && $(element).val()) { isFileUploaded = true; } }); if (isFileUploaded) { this.bindFormSubmit(); } this._updateAddToWishlistButton(dataToAdd, event); event.stopPropagation(); }, /** * @param {Object} dataToAdd * @param {jQuery.Event} event * @private */ _updateAddToWishlistButton: function (dataToAdd, event) { var self = this, buttons = this._getAddToWishlistButton(event); buttons.each(function (index, element) { var params = $(element).data('post'), currentTarget = event.currentTarget, targetElement, targetValue; if (!params) { params = { 'data': {} }; } else if ($(currentTarget).data('selector') || $(currentTarget).attr('name')) { targetElement = self._getElementData(currentTarget); targetValue = Object.keys(targetElement)[0]; if (params.data.hasOwnProperty(targetValue) && !dataToAdd.hasOwnProperty(targetValue)) { delete params.data[targetValue]; } } params.data = $.extend({}, params.data, dataToAdd, { 'qty': $(self.options.qtyInfo).val() }); $(element).data('post', params); }); }, /** * @param {jQuery.Event} event * @private */ _getAddToWishlistButton: function (event) { var productListWrapper = $(event.currentTarget).closest(this.options.productListWrapper); if (productListWrapper.length) { return productListWrapper.find(this.options.actionElement); } return $(this.options.actionElement); }, /** * @param {Object} array1 * @param {Object} array2 * @return {Object} * @private * @deprecated */ _arrayDiffByKeys: function (array1, array2) { var result = {}; $.each(array1, function (key, value) { if (key.indexOf('option') === -1) { return; } if (!array2[key]) { result[key] = value; } }); return result; }, /** * @param {HTMLElement} element * @return {Object} * @private */ _getElementData: function (element) { var data, elementName, elementValue; element = $(element); data = {}; elementName = element.data('selector') ? element.data('selector') : element.attr('name'); elementValue = element.val(); if (element.is('select[multiple]') && elementValue !== null) { if (elementName.substr(elementName.length - 2) == '[]') { //eslint-disable-line eqeqeq elementName = elementName.substring(0, elementName.length - 2); } $.each(elementValue, function (key, option) { data[elementName + '[' + option + ']'] = option; }); } else if (elementName.substr(elementName.length - 2) == '[]') { //eslint-disable-line eqeqeq, max-depth elementName = elementName.substring(0, elementName.length - 2); data[elementName + '[' + elementValue + ']'] = elementValue; } else { data[elementName] = elementValue; } return data; }, /** * @param {Object} params * @param {Object} dataToAdd * @private * @deprecated */ _removeExcessiveData: function (params, dataToAdd) { var dataToRemove = this._arrayDiffByKeys(params.data, dataToAdd); $.each(dataToRemove, function (key) { delete params.data[key]; }); }, /** * Bind form submit. */ bindFormSubmit: function () { var self = this; $('[data-action="add-to-wishlist"]').on('click', function (event) { var element, params, form, action; event.stopPropagation(); event.preventDefault(); element = $('input[type=file]' + self.options.customOptionsInfo); params = $(event.currentTarget).data('post'); form = $(element).closest('form'); action = params.action; if (params.data.id) { $('<input>', { type: 'hidden', name: 'id', value: params.data.id }).appendTo(form); } if (params.data.uenc) { action += 'uenc/' + params.data.uenc; } $(form).attr('action', action).trigger('submit'); }); }, /** * Validate product quantity before updating Wish List * * @param {jQuery.Event} event * @private */ _validateWishlistQty: function (event) { var element = $(this.options.qtyInfo); if (!(element.validation() && element.validation('isValid'))) { event.preventDefault(); event.stopPropagation(); return; } } }); return $.mage.addToWishlist; });