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/ui/avatar-editor/src/canvas-tool/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/js/ui/avatar-editor/src/canvas-tool/canvas-zooming.js
import { Event, Dom } from 'main.core';
import { EventEmitter } from 'main.core.events';

export default class CanvasZooming extends EventEmitter
{
	#stepSize = 0.01;
	#value = 0;
	#defaultValue = 0;
	#containerWidth = 0;
	#minValue = -1;
	#maxValue = 1;
	#scale: Element;
	#knob: Element;

	constructor({ knob, scale, minus, plus }, defaultValue: ?Number)
	{
		super();
		this.setEventNamespace('Main.Avatar.Editor');

		Event.bind(minus, 'click', () => {
			this.#makeAStep(false);
		});
		Event.bind(plus, 'click', () => {
			this.#makeAStep(true);
		});

		this.stopMoving = this.stopMoving.bind(this);
		this.move = this.move.bind(this);

		Event.bind(knob, 'mousedown', (event) => {
			this.startMoving(event);
		});
		if (defaultValue)
		{
			this.setDefaultValue(defaultValue);
		}
		this.#scale = scale;
		this.#knob = knob;
		this.reset();
	}

	setDefaultValue(defaultValue): CanvasZooming
	{
		this.#defaultValue = defaultValue > this.#minValue && defaultValue <= this.#maxValue ? defaultValue : 0;

		return this;
	}

	getValue(): Number
	{
		return this.#value;
	}

	#getContainerWidth(): Number
	{
		if (this.#containerWidth > 0)
		{
			return this.#containerWidth;
		}
		const containerPos = Dom.getPosition(this.#scale);
		const width = containerPos.width - Dom.getPosition(this.#knob).width;
		if (width > 0)
		{
			this.#containerWidth = width;

			return this.#containerWidth;
		}

		return 0;
	}

	reset()
	{
		this.#value = this.#defaultValue;
		this.#adjust();
	}

	setValue(value)
	{
		// eslint-disable-next-line no-param-reassign
		value = Math.ceil(value * 1000) / 1000;
		if (value !== this.#value && value >= this.#minValue && value <= this.#maxValue)
		{
			this.#value = value;
			this.#adjust();
			this.emit('onChange', this.#value - this.#defaultValue);
		}
	}

	#makeAStep(increase)
	{
		const value = Math.min(
			Math.max(
				this.getValue() + (increase === false ? (-1) : 1) * this.#stepSize,
				0,
			),
			1,
		);
		this.setValue(value);
	}

	#adjust()
	{
		const middle = this.#getContainerWidth() / (this.#maxValue - this.#minValue);
		const value = middle + (middle * this.getValue());
		Dom.adjust(this.#knob, {
			style: {
				left: [Math.ceil(value), 'px'].join(''),
			},
		});
	}

	move({ pageX })
	{
		if (pageX > 0 && this.#getContainerWidth() > 0)
		{
			const percent = (pageX - this.#knob.startPageX) / this.#getContainerWidth();
			this.#knob.startPageX = pageX;
			this.setValue(this.getValue() + percent);
		}
	}

	startMoving({ pageX })
	{
		this.#knob.startPageX = pageX;

		Event.bind(document, 'mousemove', this.move);
		Event.bind(document, 'mouseup', this.stopMoving);
	}

	stopMoving()
	{
		Event.unbind(document, 'mousemove', this.move);
		Event.unbind(document, 'mouseup', this.stopMoving);
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit