• Модуль: landing
  • Путь к файлу: ~/bitrix/modules/landing/lib/assets/preprocessing/theme.php
  • Класс: BitrixLandingAssetsPreProcessingstring
  • Вызов: string::removeSiblingsClasses
static function removeSiblingsClasses(string $classString, array $targetClasses, string $namespace): string
{
	static $classesGroups = [];

	$styleManifest = Block::getStyle();

	// build classes groups (static cache)
	if (!array_key_exists($namespace, $classesGroups))
	{
		$classesGroups[$namespace] = [];
		if (
			isset($styleManifest[$namespace]['style']) &&
			is_array($styleManifest[$namespace]['style'])
		)
		{
			foreach ($styleManifest[$namespace]['style'] as $style)
			{
				if (isset($style['items']) && is_array($style['items']))
				{
					$classesGroup = [];
					foreach ($style['items'] as $item)
					{
						if (isset($item['value']) && is_string($item['value']))
						{
							$classesGroup[] = trim($item['value']);
						}
					}
					if ($classesGroup)
					{
						$classesGroups[$namespace][] = $classesGroup;
					}
				}
			}
		}
	}

	$allClasses = $classesGroups[$namespace];

	// local function to find siblings
	$findSiblings = function($targetClass) use($allClasses)
	{
		$targetClass = trim($targetClass);
		foreach ($allClasses as $classes)
		{
			if (in_array($targetClass, $classes))
			{
				return $classes;
			}
		}

		return [];
	};

	// try to find siblings of each target class
	foreach ($targetClasses as $targetClass)
	{
		// and remove from class attribute
		foreach ($findSiblings($targetClass) as $classRemove)
		{
			$classString = str_replace(' ' . $classRemove . ' ', ' ', $classString);
		}
	}


	return trim($classString);
}