• Модуль: landing
  • Путь к файлу: ~/bitrix/modules/landing/lib/node/embed.php
  • Класс: BitrixLandingNodeEmbed
  • Вызов: Embed::saveNode
static function saveNode(BitrixLandingBlock $block, $selector, array $data)
{
	$doc = $block->getDom();
	$resultList = $doc->querySelectorAll($selector);
	$valueBefore = Embed::getNode($block, $selector);

	foreach ($data as $pos => $value)
	{
		if (isset($resultList[$pos]))
		{
			if (isset($value['src']) && $value['src'])
			{
				if ($resultList[$pos]->getTagName() === 'IFRAME')
				{
					$resultList[$pos]->setAttribute('src', $value['src']);
				}
				else
				{
					$resultList[$pos]->setAttribute('data-src', $value['src']);
				}
			}

			if (isset($value['source']) && $value['source'])
			{
				$resultList[$pos]->setAttribute('data-source', $value['source']);
			}

			// set ratio
			if (
				isset($value['ratio'], $value['src'])
				&& $value['ratio'] && $value['src']
				&& $valueBefore['src'] !== $value['src']
				&& in_array($value['ratio'], self::RATIO_CLASSES)
			)
			{
				$containerNode = $resultList[$pos]->getParentNode();
				if ($containerNode && in_array(self::CONTAINER_CLASS, $containerNode->getClassList()))
				{
					$classes = $containerNode->getClassList();
					$classes = array_diff($classes, self::RATIO_CLASSES);
					$classes[] = $value['ratio'];
					$containerNode->setClassList($classes);
				}
			}

			// set preview image
                $styles = [];
                foreach (StyleInliner::getStyle($resultList[$pos]) as $key => $stylesValue)
                {
                    if ($key !== 'background' && $key !== 'background-image')
                    {
                        $styles[] = "{$key}: {$stylesValue};";
                    }
                }
			if (isset($value['preview']) && $value['preview'])
			{
				$styles[] = "background-image: url('{$value['preview']}');";
				$resultList[$pos]->setAttribute('data-preview', $value['preview']);
			}
			else
                {
                    $resultList[$pos]->removeAttribute('data-preview');
                }
                $styles = implode(' ', $styles);
                $resultList[$pos]->setAttribute('style', $styles);
		}

		if (History::isActive())
		{
			$history = new History($block->getLandingId(), History::ENTITY_TYPE_LANDING);
			$history->push('EDIT_EMBED', [
				'block' => $block,
				'selector' => $selector,
				'position' => (int)$pos,
				'valueBefore' => $valueBefore[$pos],
				'valueAfter' => $value,
			]);
		}
	}
}