• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/lib/page/asset.php
  • Класс: BitrixMainPageAsset
  • Вызов: Asset::getJs
function getJs($type = AssetShowTargetType::ALL)
{
	static $setList = [];

	$res = '';
	$type = (int) $type;
	$type = (($type == AssetShowTargetType::KERNEL && $this->headString && !$this->headScript) ? AssetShowTargetType::ALL : $type);
	$optimize = $this->optimizeJs();
	if (empty($setList))
	{
		$this->prepareJs();
		$setList = $this->getTargetList('JS');

		foreach ($setList as $setInfo)
		{
			if (!isset($this->js[$setInfo['NAME']]))
			{
				continue;
			}

			$data = '';
			if (!empty($this->moduleInfo['JS'][$setInfo['MODULE_NAME']]['DATA']))
			{
				$data = $this->moduleInfo['JS'][$setInfo['MODULE_NAME']]['DATA'];
			}

			$resJs = '';
			$listAsset = [];
			foreach ($this->js[$setInfo['NAME']] as $jsFile)
			{
				$js = $jsFile['FULL_PATH'];
				if ($optimize)
				{
					if ($jsFile['SKIP'])
					{
						$this->fileList['JS'][$setInfo['NAME']]['FILES'][] = $js;
						$resJs .= "n";
					}
					else
					{
						$listAsset[] = $jsFile;
					}
				}
				else
				{
					$this->fileList['JS'][$setInfo['NAME']]['FILES'][] = $js;
					$resJs .= "n";
				}
			}
			$optAsset = $this->optimizeAsset($listAsset, $setInfo['UNIQUE'], $setInfo['PREFIX'], $setInfo['NAME'], 'js', $data);
			$this->assetList['JS'][$setInfo['PARENT_NAME']][$setInfo['NAME']] = $optAsset['FILES'];
			$this->assetList['SOURCE_JS'][$setInfo['PARENT_NAME']][$setInfo['NAME']] = ($optAsset['SOURCE_FILES'] ?? []);
			$this->targetList[$setInfo['PARENT_NAME']]['JS_RES'][$setInfo['NAME']][] = $optAsset['RESULT'].$resJs;
		}
		unset($optAsset, $resJs, $listAsset);
	}

	if ($type == AssetShowTargetType::KERNEL && ($this->mode & $this->targetList['KERNEL']['MODE']))
	{
		$setName = 'KERNEL';
		$res .= $this->getStrings(AssetLocation::AFTER_CSS);
		$res .= $this->showAsset($setList,'js', $setName);
		$res .= $this->showFilesList();
		$res .= $this->getStrings(AssetLocation::AFTER_JS_KERNEL);

		if (!$this->bodyScript)
		{
			$res .= $this->getStrings(AssetLocation::BODY_END);
			$res .= $this->showAsset($setList,'js', 'BODY');
		}
	}
	elseif ($type == AssetShowTargetType::TEMPLATE_PAGE)
	{
		foreach ($this->targetList as $setName => $set)
		{
			if ($setName != 'KERNEL' && $setName != 'BODY')
			{
				$setName = $this->fixJsSetOrder($setName);
				$res .= $this->showAsset($setList,'js', $setName);
			}
		}
		$res .= $this->getStrings(AssetLocation::AFTER_JS);
	}
	elseif ($type == AssetShowTargetType::BODY && ($this->mode & $this->targetList['BODY']['MODE']))
	{
		$setName = 'BODY';
		$res .= $this->getStrings(AssetLocation::BODY_END);
		$res .= $this->showAsset($setList,'js', $setName);
	}
	else
	{
		foreach ($this->targetList as $setName => $set)
		{
			if ($this->mode & $set['MODE'])
			{
				$setName = $this->fixJsSetOrder($setName);
				if ($setName == 'KERNEL')
				{
					$res .= $this->getStrings(AssetLocation::AFTER_CSS);
					$res .= $this->showAsset($setList, 'js', $setName);
					$res .= $this->showFilesList();
					$res .= $this->getStrings(AssetLocation::AFTER_JS_KERNEL);

					if (!$this->bodyScript)
					{
						$res .= $this->getStrings(AssetLocation::BODY_END);
						$res .= $this->showAsset($setList,'js', 'BODY');
					}
				}
				elseif ($setName != 'BODY')
				{
					$res .= $this->showAsset($setList, 'js', $setName);
				}
			}
		}

		$res .= $this->getStrings(AssetLocation::AFTER_JS);
	}

	return (trim($res) == '' ? $res : $res."n");
}