403Webshell
Server IP : 80.87.202.40  /  Your IP : 216.73.216.169
Web Server : Apache
System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64
User : bitrix ( 600)
PHP Version : 8.2.27
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : ON |  Perl : ON |  Python : OFF |  Sudo : ON |  Pkexec : ON
Directory :  /home/bitrix/ext_www/cvetdv.ru/bitrix/js/yandex.market/field/fieldset/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/cvetdv.ru/bitrix/js/yandex.market/field/fieldset/summary.js
(function(BX) {

	const Reference = BX.namespace('YandexMarket.Field.Reference');
	const Fieldset = BX.namespace('YandexMarket.Field.Fieldset');
	const utils = BX.namespace('YandexMarket.Utils');

	const constructor = Fieldset.Summary = Reference.Summary.extend({

		defaults: {
			modalElement: '.js-fieldset-summary__edit-modal',
			fieldElement: '.js-fieldset-summary__field',
			clearElement: '.js-fieldset-summary__clear',
			textElement: '.js-fieldset-summary__text',
			summary: null,

			modalWidth: 500,
			modalHeight: 300,

			lang: {},
			langPrefix: 'YANDEX_MARKET_FIELD_FIELDSET_'
		},

		initialize: function() {
			this.callParent('initialize', constructor);
			this.bind();
		},

		destroy: function() {
			this.unbind();
			this.callParent('destroy', constructor);
		},

		bind: function() {
			this.handleTextClick(true);
			this.handleClearClick(true);
		},

		unbind: function() {
			this.handleTextClick(false);
			this.handleClearClick(false);
		},

		handleTextClick: function(dir) {
			const textElement = this.getElement('text');

			textElement[dir ? 'on' : 'off']('click', $.proxy(this.onTextClick, this));
		},

		handleClearClick: function(dir) {
			const clearElement = this.getElement('clear');

			clearElement[dir ? 'on' : 'off']('click', $.proxy(this.onClearClick, this));
		},

		onTextClick: function(evt) {
			this.openEditModal();

			evt.preventDefault();
		},

		onClearClick: function(evt) {
			this.clear();

			evt.preventDefault();
		},

		refreshSummary: function() {
			const template = this.options.summary;
			const displayValues = this.getDisplayValue();
			const groupedValues = this.groupValues(displayValues);
			const summaryValues = this.summaryValues(groupedValues);
			const textElement = this.getElement('text');
			let text;

			if (template) {
				text = this.renderTemplate(template, summaryValues);
			} else {
				text = this.joinValues(summaryValues);
			}

			if (text === '') {
				text = this.getLang('PLACEHOLDER');
			}

			textElement.html(text);
		},

		groupValues: function(values) {
			const result = {};

			for (const key of Object.keys(values)) {
				const keyParts = key.split('[');
				let valueChain = result;

				if (keyParts[0] === '') { keyParts.shift(); }

				const keyPartLength = keyParts.length;

				for (let keyPartIndex = 0; keyPartIndex < keyPartLength; ++keyPartIndex) {
					let keyPart = keyParts[keyPartIndex];
					keyPart = keyPart.replace(']', '');

					if (keyPartIndex + 1 === keyPartLength) { // is last
						valueChain[keyPart] = values[key];
					} else {
						if (!(keyPart in valueChain)) {
							valueChain[keyPart] = {};
						}

						valueChain = valueChain[keyPart];
					}
				}
			}

			return result;
		},

		summaryValues: function(values) {
			let key;
			let value;
			let displayValueParts;
			let displayValue;
			let template;
			let unitOption;

			for (key in values) {
				if (!values.hasOwnProperty(key)) { continue; }
				if (typeof values[key] !== 'object' || values[key] == null) { continue; }

				value = values[key];
				template = this.getFieldSummaryTemplate(key);
				unitOption = this.getFieldSummaryUnit(key);

				if (Array.isArray(value)) {
					displayValueParts = value.map((valueItem) => this.summaryValueTemplate(valueItem, template, unitOption));
					displayValue = displayValueParts.join(', ');
				} else {
					displayValue = this.summaryValueTemplate(value, template, unitOption);
				}

				values[key] = displayValue;
			}

			return values;
		},

		summaryValueTemplate: function(value, template, unitOption) {
			let result = value;
			let unit;

			if (template != null) {
				result = this.renderTemplate(template, result);
			}

			if (unitOption != null) {
				unit = this.formatUnit(result, unitOption);

				if (unit != null) {
					result = '' + result + ' ' + unit;
				}
			}

			return result;
		},

		getFieldSummaryTemplate: function(key) {
			return this.getFieldOption(key, 'summary');
		},

		getFieldSummaryUnit: function(key) {
			let result = this.getFieldOption(key, 'unit');

			if (result != null && result.indexOf('|') !== -1) {
				result = result.split('|');
			}

			return result;
		},

		formatUnit: function(value, unit) {
			let number;

			if (typeof value === 'number') {
				number = parseInt(value, 10);
			} else if (typeof value === 'string') {
				const numberMatch = /(\d+([.,]\d+)?)\D*$/.exec(value); // extract last number

				if (numberMatch) {
					number = parseInt(numberMatch[1], 10);
				}
			}

			if (number != null && !isNaN(number)) {
				return Array.isArray(unit) ? utils.sklon(number, unit) : unit;
			}

			return null;
		},

		getFieldOption: function(key, type) {
			const optionKey =
				'field'
				+ key.substring(0, 1).toUpperCase()
				+ key.substring(1).toLowerCase()
				+ type.substring(0, 1).toUpperCase()
				+ type.substring(1).toLowerCase();

			return this.options[optionKey];
		},

		renderTemplate: function(template, values) {
			const usedKeys = this.getTemplateUsedKeys(template);
			const replaces = this.getTemplateReplaces(values, usedKeys);
			let result = template;

			result = this.applyTemplateRemoveVariables(result, usedKeys, replaces);
			result = this.applyTemplateReplaceVariables(result, replaces);

			return result;
		},

		getTemplateReplaces: function(values, keys) {
			const result = {};

			for (let keyIndex = 0; keyIndex < keys.length; keyIndex++) {
				const key = keys[keyIndex];
				const chain = key.split('.');
				let level = values;

				for (let chainIndex = 0; chainIndex < chain.length; chainIndex++) {
					const chainKey = chain[chainIndex];

					if (level[chainKey] == null) { break; }

					if (chainIndex < chain.length - 1) {
						level = level[chainKey];
					} else if (level[chainKey]) {
						result[key] = level[chainKey];
					}
				}
			}

			return result;
		},

		applyTemplateRemoveVariables: function(template, keys, replaces) {
			let result = template;

			for (let keyIndex = 0; keyIndex < keys.length; keyIndex++) {
				const key = keys[keyIndex];

				if (!(key in replaces)) {
					result = this.removeTemplateVariable(result, key);
				}
			}

			return result;
		},

		applyTemplateReplaceVariables: function(template, replaces) {
			let result = template;

			for (const key of Object.keys(replaces)) {
				result = this.replaceTemplateVariable(result, key, replaces[key]);
			}

			return result;
		},

		replaceTemplateVariable: function(template, key, value) {
			return template.replace('#' + key + '#', value);
		},

		removeTemplateVariable: function(template, key) {
			const search = '#' + key + '#';
			const searchLength = search.length;
			let searchPosition;
			let before;
			let beforeParentheses;
			let beforeOuter;
			let beforeInner;
			let after;
			let afterParentheses;
			let afterOuter;
			let afterInner;
			let result = template;

			while ((searchPosition = result.indexOf(search)) !== -1) {
				before = result.substring(0, searchPosition);
				after = result.substring(searchPosition + searchLength);
				beforeParentheses = before.indexOf('(');
				afterParentheses = after.indexOf(')');

				if (beforeParentheses !== -1 && afterParentheses !== -1) { // inside parentheses
					beforeOuter = before.substring(0, beforeParentheses + 1);
					beforeInner = before.substring(beforeParentheses + 1);
					afterOuter = after.substring(afterParentheses);
					afterInner = after.substring(0, afterParentheses);
					beforeInner = this.trimRightPart(beforeInner);
					afterInner = this.trimLeftPart(afterInner, beforeInner);

					if (beforeInner === '' && afterInner === '') { // then remove parentheses
						before = beforeOuter.substring(0, beforeParentheses);
						after = afterOuter.substring(1);
					} else {
						before = beforeOuter + beforeInner;
						after = afterInner + afterOuter;
					}
				} else {
					before = this.trimRightPart(before);
					after = this.trimLeftPart(after, before);
				}

				if (before !== '' && after !== '' && after[0] !== ')') {
					result = before + ' ' + after;
				} else {
					result = before + after;
				}
			}

			return result;
		},

		trimLeftPart: function(part, before) {
			let result = part.replace(/^[^#.,()&]+/, '');

			if (result[0] === ',' && (before === '' || before[before.length - 1] === '.')) {
				result = result.substring(1);

				if (before === '') {
					result = result.trim();
				}
			}

			return result;
		},

		trimRightPart: function(part) {
			return part.replace(/,?[^#.,():&]*$/, '');
		},

		getTemplateUsedKeys: function(template) {
			const pattern = /#([A-Z0-9_.]+?)#/g;
			let match;
			const result = [];

			while (match = pattern.exec(template)) {
				result.push(match[1]);
			}

			return result;
		},

		joinValues: function(values) {
			return Object.values(values).join(', ');
		},

		getFieldPlugin: function() {
			return Fieldset.Row;
		}

	}, {
		dataName: 'FieldFieldsetSummary',
		pluginName: 'YandexMarket.Field.Fieldset.Summary'
	});

})(BX);

Youez - 2016 - github.com/yon3zu
LinuXploit