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/control/image/

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/control/image/image.js
import 'ui.design-tokens';

import {BaseEvent} from 'main.core.events';
import {Dom, Tag, Type, Loc, Text} from 'main.core';
import {Image as ImageField} from 'landing.ui.field.image';
import {Backend} from 'landing.backend';
import {Env} from 'landing.env';
import {PageObject} from 'landing.pageobject';
import BaseControl from "../base_control/base_control";
import BgImageValue from '../../bg_image_value';
import './css/image.css';

export default class Image extends BaseControl
{
	// todo: move to type
	options: {
		block: BX.Landing.Block,
		styleNode: BX.Landing.UI.Style,
		contentRoot: ?HTMLDivElement,
		selector: string,
	};

	constructor(options)
	{
		super();
		this.setEventNamespace('BX.Landing.UI.Field.Color.Image');
		this.options = options;
		this.imgField = new ImageField({
			id: 'landing_ui_color_image_' + Text.getRandom().toLowerCase(),
			className: 'landing-ui-field-color-image-image',
			contextType: ImageField.CONTEXT_TYPE_STYLE,
			compactMode: true,
			disableLink: true,
			disableAltField: true,
			allowClear: true,
			isAiImageAvailable: Env.getInstance().getOptions()['ai_image_available'],
			isAiImageActive: Env.getInstance().getOptions()['ai_image_active'],
			aiUnactiveInfoCode: Env.getInstance().getOptions()['ai_unactive_info_code'],
			dimensions: {width: 1920},
			uploadParams: {
				action: "Block::uploadFile",
				block: this.options.block.id,
			},
			contentRoot: this.options.contentRoot,
		});
		this.imgField.subscribe('change', this.onImageChange.bind(this));

		this.sizeField = new BX.Landing.UI.Field.Dropdown({
			id: 'landing_ui_color_image_size_' + Text.getRandom().toLowerCase(),
			title: Loc.getMessage('LANDING_FIELD_COLOR-BG_SIZE_TITLE'),
			className: 'landing-ui-field-color-image-size',
			items: BgImageValue.getSizeItemsForButtons(),
			onChange: this.onSizeChange.bind(this),
			contentRoot: this.options.contentRoot,
		});

		this.attachmentField = new BX.Landing.UI.Field.Checkbox({
			id: 'landing_ui_color_image_attach_' + Text.getRandom().toLowerCase(),
			className: 'landing-ui-field-color-image-attachment',
			multiple: false,
			compact: true,
			items: [
				{ name: Loc.getMessage('LANDING_FIELD_COLOR-BG_FIXED'), value: 'fixed' },
			],
			onChange: this.onAttachmentChange.bind(this),
			value: [this.getAttachmentValue()],
		});
	}

	buildLayout(): HTMLDivElement
	{
		return Tag.render`
			<div class="landing-ui-field-color-image">
				${this.imgField.getLayout()}
				${this.sizeField.getLayout()}
				${this.attachmentField.getLayout()}
			</div>
		`;
	}

	onImageChange(event: BaseEvent)
	{
		const value = this.getValue() || new BgImageValue();
		if (event.getData().value.src)
		{
			value.setUrl(event.getData().value.src);
			value.setFileId(event.getData().value.id);
			if (event.getData().value.src2x)
			{
				value.setUrl2x(event.getData().value.src2x);
				value.setFileId2x(event.getData().value.id2x);
			}
		}
		else
		{
			value.setUrl(null);
			value.setFileId(null);
			value.setUrl2x(null);
			value.setFileId2x(null);
		}

		this.setValue(value);
		this.onChange();

		this.saveNode(value);
	}

	saveNode(value: BgImageValue)
	{
		const style = this.options.styleNode;
		const block = this.options.block;

		let selector;
		if (
			style.selector === block.selector
			|| style.selector === block.makeAbsoluteSelector(block.selector)
		)
		{
			selector = '#wrapper';
		}
		else if (!style.isSelectGroup())
		{
			selector = BX.Landing.Utils.join(
				style.selector.split("@")[0],
				"@",
				style.getElementIndex(style.getNode()[0])
			);
		}
		else
		{
			selector = style.selector.split("@")[0];
		}

		const data = {[selector]: {}};
		data[selector].id = value.getFileId() || -1;
		data[selector].id2x = value.getFileId2x() || -1;

		Backend.getInstance()
			.action(
				"Landing\\Block::updateNodes",
				{
					lid: this.options.block.lid,
					block: this.options.block.id,
					data: data,
				},
			)
	}

	onSizeChange(size: string)
	{
		if (Type.isString(size))
		{
			const value = this.getValue() || new BgImageValue();
			value.setSize(size);
			this.setValue(value);
			this.onChange();
		}
	}

	onAttachmentChange(event)
	{
		if (event instanceof BaseEvent)
		{
			const value = this.getValue() || new BgImageValue();
			value.setAttachment(
				BgImageValue.getAttachmentValueByBool(this.attachmentField.getValue()),
			);
			this.setValue(value);
			this.onChange();
		}
	}

	onChange(event: ?BaseEvent)
	{
		this.cache.delete('value');
		this.emit('onChange', {data: {image: this.getValue()}});
	}

	getValue(): ?BgImageValue
	{
		// todo: get size and attachement from controls
		return this.cache.remember('value', () => {
			const imgValue = this.imgField.getValue();
			const url = imgValue.src;
			if (url === null)
			{
				return null;
			}
			else
			{
				const value = new BgImageValue({
					url: url,
					fileId: imgValue.id,
				});
				if (imgValue.src2x)
				{
					value.setUrl2x(imgValue.src2x);
					value.setFileId2x(imgValue.fileId2x);
				}
				const size = this.sizeField.getValue();
				if (size !== null)
				{
					value.setSize(size);
				}

				value.setAttachment(BgImageValue.getAttachmentValueByBool(this.attachmentField.getValue()));

				// todo: set overlay

				return value;
			}
		});
	}

	setValue(value: ?BgImageValue)
	{
		if (this.isNeedSetValue(value))
		{
			// todo: can delete prev image
			super.setValue(value);

			if (value === null)
			{
				this.imgField.setValue({src: ''}, true);
				// todo: what set size and attachement?
			}
			else
			{
				if (value.getUrl() !== null)
				{
					this.setActive();
				}

				const imgFieldValue = {
					type: 'image',
					src: value.getUrl(),
					id: value.getFileId(),
				};
				if (value.getUrl2x())
				{
					imgFieldValue.src2x = value.getUrl2x();
					imgFieldValue.id2x = value.getFileId2x();
				}
				this.imgField.setValue(imgFieldValue, true);
				this.sizeField.setValue(this.getSizeValue(), true);
				this.attachmentField.setValue([this.getAttachmentValue()]);
			}
		}
	}

	setActive(): void
	{
		Dom.addClass(this.imgField.getLayout(), Image.ACTIVE_CLASS);
	}

	unsetActive(): void
	{
		Dom.removeClass(this.imgField.getLayout(), Image.ACTIVE_CLASS);
	}

	getAttachmentValue(): string
	{
		if (
			this.options
			&& this.options.block
			&& this.options.block.content
			&& Dom.hasClass(this.options.block.content, 'g-bg-image')
		)
		{
			const blockContentStyle = window.getComputedStyle(this.options.block.content);
			const bgAttachmentValue = blockContentStyle.getPropertyValue('background-attachment');

			return bgAttachmentValue.includes('fixed') ? 'fixed' : 'scroll';
		}

		return 'scroll';
	}

	getSizeValue(): string
	{
		if (
			this.options
			&& this.options.block
			&& this.options.block.content
			&& Dom.hasClass(this.options.block.content, 'g-bg-image')
		)
		{
			const blockContentStyle = window.getComputedStyle(this.options.block.content);
			const bgSizeValue = blockContentStyle.getPropertyValue('background-size');

			return bgSizeValue.includes('cover') ? 'cover' : 'auto';
		}

		return 'cover';
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit