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/ilovecveti.ru/bitrix/js/calendar/sharing/interface/src/controls/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/ilovecveti.ru/bitrix/js/calendar/sharing/interface/src/controls/dialog-new.js
import { Dom } from 'main.core';
import { EventEmitter } from 'main.core.events';
import { Popup } from 'main.popup';
import { Analytics } from 'calendar.sharing.analytics';
import type { RuleParams } from '../model/rule';
import type { Context, User } from '../model/index';
import { SettingsModel, CalendarSettings } from '../model/settings';
import { Layout } from './layout';
import { CalendarContext } from '../model';

import 'main.qrcode';
import 'ui.design-tokens';

type DialogOptions = {
	bindElement: HTMLElement,
	userInfo: ?User,
	sharingUrl: string,
	linkHash: string,
	sharingRule: RuleParams,
	calendarSettings: CalendarSettings,
	context: Context,
	readOnly: boolean,
	settingsCollapsed: boolean,
	sortJointLinksByFrequentUse: boolean,
	calendarContext: CalendarContext | null,
};

export default class DialogNew
{
	#popup: Popup;
	#layout: {
		wrapper: HTMLElement,
		bindElement: HTMLElement,
	};

	#dialogLayout: Layout;
	#settingsModel: SettingsModel;

	constructor(options: DialogOptions)
	{
		this.#layout = {};

		this.#layout.bindElement = options.bindElement;

		this.#settingsModel = new SettingsModel({
			context: options.context,
			linkHash: options.linkHash,
			sharingUrl: options.sharingUrl,
			userInfo: options.userInfo,
			rule: options.sharingRule,
			calendarSettings: options.calendarSettings,
			collapsed: options.settingsCollapsed,
			sortJointLinksByFrequentUse: options.sortJointLinksByFrequentUse,
			calendarContext: options.calendarContext,
		});

		this.bindEvents();
	}

	bindEvents(): void
	{
		EventEmitter.subscribe('CalendarSharing:LinkCopied', this.onSuccessfulCopyingLink.bind(this));
		EventEmitter.subscribe('SidePanel.Slider:onClose', (event): void => this.checkAndClosePopupOnSlider(event));
	}

	getPopup(): Popup
	{
		if (!this.#popup)
		{
			this.#popup = new Popup({
				bindElement: this.#layout.bindElement,
				targetContainer: document.body,
				className: 'calendar-sharing__dialog',
				closeByEsc: true,
				closeIcon: this.#isExternalSharing(),
				autoHide: true,
				padding: 0,
				width: 470,
				angle: this.#getAngleConfig(),
				autoHideHandler: (event) => this.canBeClosed(event),
				content: this.getPopupWrapper(),
				animation: 'fading-slide',
				events: {
					onPopupShow: this.onPopupShow.bind(this),
					onPopupClose: this.onPopupClose.bind(this),
				},
			});
		}

		return this.#popup;
	}

	onPopupShow(): void
	{
		Dom.addClass(this.#layout.bindElement, 'ui-btn-hover');

		Analytics.sendPopupOpened(this.#settingsModel.getContext());
	}

	onPopupClose(): void
	{
		Dom.removeClass(this.#layout.bindElement, 'ui-btn-hover');
		this.#dialogLayout.reset();
	}

	canBeClosed(event): boolean
	{
		const isClickInside = this.#layout.wrapper.contains(event.target);
		const layoutHasShownPopups = this.#dialogLayout.hasShownPopups();
		const topSlider = this.getTopSlider();
		const calendarOpenInTopSlider = topSlider && this.getCalendarSliderParams(topSlider);

		return !isClickInside
			&& !layoutHasShownPopups
			&& (
				!topSlider
				|| calendarOpenInTopSlider
				|| this.#isExternalSharing()
			)
		;
	}

	getPopupWrapper(): HTMLElement
	{
		if (!this.#layout.wrapper)
		{
			this.#dialogLayout = new Layout({
				readOnly: this.#settingsModel.getCalendarContext()?.sharingObjectType === 'group',
				settingsModel: this.#settingsModel,
			});
			this.#layout.wrapper = this.#dialogLayout.render();
		}

		this.#layout.wrapper = this.#dialogLayout.render();

		return this.#layout.wrapper;
	}

	onSuccessfulCopyingLink(): void
	{
		this.closePopup();
	}

	closePopup(): void
	{
		this.getPopup().close();
	}

	isShown(): boolean
	{
		return this.getPopup().isShown();
	}

	show(): void
	{
		this.#settingsModel.sortRanges();

		this.getPopup().adjustPosition({ forceBindPosition: true });
		this.getPopup().show();
	}

	destroy(): void
	{
		this.getPopup().destroy();
	}

	getTopSlider(): BX.SidePanel.Slider | null
	{
		return (this.#settingsModel.getContext() === 'calendar')
			? BX.SidePanel.Instance.getTopSlider()
			: false
		;
	}

	getCalendarSliderParams(slider: BX.SidePanel.Slider): Array | null
	{
		return slider.iframeSrc?.match(/\/workgroups\/group\/(\d+)\/calendar\//i);
	}

	checkAndClosePopupOnSlider(event): void
	{
		if (!this.isShown())
		{
			return;
		}

		const slider = event.getData() && event.getData()[0]?.slider;

		const sliderParams = slider && this.getCalendarSliderParams(slider);
		if (!sliderParams)
		{
			return;
		}

		const groupId = parseInt(sliderParams[1], 10);
		if (!groupId)
		{
			return;
		}

		const currentGroupId = this.#settingsModel.getCalendarContext()?.sharingObjectId;
		if (currentGroupId && groupId !== currentGroupId)
		{
			return;
		}

		this.closePopup();
	}

	#isExternalSharing(): boolean
	{
		return Boolean(this.#settingsModel.getCalendarContext()?.externalSharing);
	}

	#getAngleConfig()
	{
		if (this.#isExternalSharing())
		{
			return null;
		}

		return {
			offset: this.#layout.bindElement.offsetWidth / 2 + 16,
		};
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit