Your IP : 216.73.216.86


Current Path : /var/www/homesaver/www/bitrix/templates/landing24/assets/js/helpers/carousel/
Upload File :
Current File : /var/www/homesaver/www/bitrix/templates/landing24/assets/js/helpers/carousel/base_carousel_init.js

;(function ($)
{
	"use strict";

	BX.addCustomEvent("BX.Landing.Block:init", function (event)
	{
		BX.Landing.SliderHelper.init(event, BX.Landing.SliderHelper.ACTION_INIT);
	});

	/**
	 * Disable slider before removing block - to correctly work in history
	 */
	BX.addCustomEvent("BX.Landing.Block:remove", function (event)
	{
		BX.Landing.SliderHelper.destroy(event);
	});

	BX.addCustomEvent("BX.Landing.Block:beforeApplyContentChanges", function (event)
	{
		BX.Landing.SliderHelper.destroy(event);
	});

	BX.addCustomEvent("BX.Landing.Block:Node:update", BX.debounce(function (event)
	{
		if(!BX.Landing.SliderHelper.isEditorEnable())
		{
			// todo: lazy reinit if now editor enable?
			BX.Landing.SliderHelper.init(event, BX.Landing.SliderHelper.ACTION_UPDATE);
		}
	}, 300));

	/**
	 * Destroy slider, clone DOM-element, save content in DB and reinit slider later
	 */
	BX.addCustomEvent("BX.Landing.Block:Card:beforeAdd", function (event)
	{
		BX.Landing.SliderHelper.destroy(event);
	});

	/**
	 * Reinit slider after add new element in DOM
	 */
	BX.addCustomEvent("BX.Landing.Block:Card:add", function (event)
	{
		BX.Landing.SliderHelper.init(event, BX.Landing.SliderHelper.ACTION_ADD);
	});

	/**
	 * Destroy slider, clone DOM-element, save content in DB and reinit slider later
	 */
	BX.addCustomEvent("BX.Landing.Block:Cards:beforeUpdate", function (event)
	{
		BX.Landing.SliderHelper.destroy(event);
	});

	/**
	 * Reinit slider after add new element in DOM
	 */
	BX.addCustomEvent("BX.Landing.Block:Cards:update", function (event)
	{
		BX.Landing.SliderHelper.init(event, BX.Landing.SliderHelper.ACTION_UPDATE);
	});

	/**
	 * Destroy slider, clone DOM-element, save content in DB and reinit slider later
	 */
	BX.addCustomEvent("BX.Landing.Block:Card:beforeRemove", function (event)
	{
		BX.Landing.SliderHelper.destroy(event);
	});

	/**
	 * Reinit slider after add new element in DOM
	 */
	BX.addCustomEvent("BX.Landing.Block:Card:remove", function (event)
	{
		BX.Landing.SliderHelper.init(event, BX.Landing.SliderHelper.ACTION_REMOVE_SLIDE);
	});

	/**
	 * Rebuild slider after style change.
	 * Need if style may change width or height of cards and Slick will be incorrectly slide them
	 */
	BX.addCustomEvent("BX.Landing.Block:updateStyle", BX.debounce(function (event)
	{
		const relativeSelector = BX.Landing.SliderHelper.makeCarouselRelativeSelector(event);
		const sliders = [].slice.call(event.block.querySelectorAll(relativeSelector));
		let needUpdate = false;
		sliders.forEach(function (sliderNode)
		{
			// Now need rebuild only verticals sliders, i think.
			if ($(sliderNode).slick('slickGetOption', 'vertical'))
			{
				needUpdate = true;
			}
		});
		if (needUpdate)
		{
			BX.Landing.SliderHelper.init(event, BX.Landing.SliderHelper.ACTION_UPDATE);
		}

		// add style changes to slick
		if (event.node && event.data && event.data.style && Object.keys(event.data.style).length > 0)
		{
			event.node.forEach(slide => {
				let currentSavedStyles = $(slide).data('originalStyling') || '';
				for (const key in event.data.style)
				{
					currentSavedStyles += key + ':' + event.data.style[key] + ';'
				}
				$(slide).data('originalStyling', currentSavedStyles);
			});
		}
	}, 1000));

	/**
	 * Check if current editor in slider-block. If true - stor ALL sliders
	 */
	BX.addCustomEvent("BX.Landing.Editor:enable", function (target)
	{
		var parentBlock = BX.findParent(target, {class:'block-wrapper'});
		if(parentBlock)
		{
			if(parentBlock.querySelector('.' + BX.Landing.SliderHelper.CAROUSEL_CLASS))
			{
				BX.Landing.SliderHelper.setEditorEnable(true);
				$(".js-carousel").slick('slickPause');
			}
		}
	});

	/**
	 * Start ALL sliders. Always
	 */
	BX.addCustomEvent("BX.Landing.Editor:disable", function ()
	{
		BX.Landing.SliderHelper.setEditorEnable(false);
		$(".js-carousel").slick('slickPlay');
	});

	/**
	 * Set correct slider width after lazyload image
	 */
	BX.addCustomEvent("BX.Landing.Lazyload:loadImage", function (event)
	{
		var relativeSelector = BX.Landing.SliderHelper.makeCarouselRelativeSelector(event);
		var sliders = [].slice.call(event.block.querySelectorAll(relativeSelector));
		sliders.forEach(function (sliderNode)
		{
			var slickObj = $(sliderNode).slick('getSlick');
			if (slickObj)
			{
				slickObj.setPosition();
			}
		});
	});

	/**
	 * Reinit slider after change attribute
	 */
	BX.addCustomEvent("BX.Landing.Block:Node:updateAttr", function (event)
	{
		BX.Landing.SliderHelper.init(event, BX.Landing.SliderHelper.ACTION_UPDATE);
	});
})(window.jQueryLanding || jQuery);