- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/lib/page/asset.php
- Класс: BitrixMainPageAsset
- Вызов: Asset::prepareJs
private function prepareJs()
{
$additional = [];
foreach ($this->js as $js => $set)
{
/** @var $assetTID - get first target where added asset */
$assetTID = $set['ADDITIONAL'] ? 'TEMPLATE' : $set['TARGET'][0];
/** @noinspection PhpUndefinedClassInspection */
$jsInfo = [
'PATH' => $js,
'FULL_PATH' => false,
'FILE_PATH' => false,
'SKIP' => false,
'TARGET' => $assetTID,
'EXTERNAL' => CMain::IsExternalLink($js),
'BODY' => false,
'ADDITIONAL' => $set['ADDITIONAL']
];
if ($jsInfo['EXTERNAL'])
{
if ($set['ADDITIONAL'])
{
$tmpKey = 'TEMPLATE';
$tmpPrefix = 'template';
}
else
{
$tmpKey = 'KERNEL';
$tmpPrefix = 'kernel';
}
$jsInfo['MODULE_ID'] = $this->assetJSCnt;
$jsInfo['TARGET'] = $tmpKey.'_'.$this->assetJSCnt;
$jsInfo['PREFIX'] = $tmpPrefix.'_'.$this->assetJSCnt;
$jsInfo['FULL_PATH'] = $jsInfo['PATH'];
$jsInfo['SKIP'] = true;
$this->assetJSCnt++;
$this->targetList[$tmpKey]['JS_LIST'][$jsInfo['TARGET']] = [
'TARGET' => $jsInfo['TARGET'],
'PREFIX' => $jsInfo['PREFIX'],
'MODE' => $this->targetList[$assetTID]['MODE'],
'UNIQUE' => false,
'WHERE_USED' => []
];
}
else
{
if (($paths = $this->getAssetPaths($js)) !== null)
{
$jsInfo["PATH"] = $js;
$jsInfo["FILE_PATH"] = $paths["FILE_PATH"];
$jsInfo["FULL_PATH"] = $paths["FULL_PATH"];
}
else
{
unset($this->js[$js]);
continue;
}
if ($moduleInfo = $this->isKernelJS($jsInfo['PATH']))
{
$jsInfo['TARGET'] = 'KERNEL';
if ($this->sliceKernel() && $this->optimizeJs())
{
$jsInfo['MODULE_ID'] = $moduleInfo['MODULE_ID'];
$jsInfo['TARGET'] = 'KERNEL_'.$moduleInfo['MODULE_ID'];
$jsInfo['PREFIX'] = 'kernel_'.$moduleInfo['MODULE_ID'];
$jsInfo['SKIP'] = $moduleInfo['SKIP'] ?? false;
$jsInfo['BODY'] = $moduleInfo['BODY'];
}
else
{
$jsInfo['MODULE_ID'] = $this->assetJSCnt;
$jsInfo['TARGET'] = 'KERNEL_'.$this->assetJSCnt;
$jsInfo['PREFIX'] = 'kernel_'.$this->assetJSCnt;
$jsInfo['SKIP'] = true;
$this->assetJSCnt++;
}
if ($jsInfo['BODY'])
{
$this->targetList['BODY']['JS_LIST'][$jsInfo['TARGET']] = [
'TARGET' => $jsInfo['TARGET'],
'PREFIX' => $jsInfo['PREFIX'],
'MODE' => $this->targetList[$assetTID]['MODE'],
'UNIQUE' => true,
'WHERE_USED' => []
];
}
else
{
if (isset($this->targetList['KERNEL']['JS_LIST'][$jsInfo['TARGET']]['MODE']))
{
$this->targetList['KERNEL']['JS_LIST'][$jsInfo['TARGET']]['MODE'] |= $this->targetList[$assetTID]['MODE'];
}
else
{
$this->targetList['KERNEL']['JS_LIST'][$jsInfo['TARGET']] = [
'TARGET' => $jsInfo['TARGET'],
'PREFIX' => $jsInfo['PREFIX'],
'MODE' => $set['ADDITIONAL'] ? $this->targetList[$set['TARGET'][0]]['MODE'] : $this->targetList[$assetTID]['MODE'],
'UNIQUE' => true,
'WHERE_USED' => []
];
}
}
// Add information about sets where used
foreach ($set['TARGET'] as $setID)
{
$this->targetList['KERNEL']['JS_LIST'][$jsInfo['TARGET']]['WHERE_USED'][$setID] = true;
}
}
elseif (strncmp($jsInfo['PATH'], '/bitrix/js/', 11) != 0)
{
$jsInfo['SKIP'] = !(
strncmp($jsInfo['PATH'], '/bitrix/panel/', 14) != 0
&& strncmp($jsInfo['PATH'], '/bitrix/themes/', 15) != 0
&& strncmp($jsInfo['PATH'], '/bitrix/modules/', 16) != 0
);
}
}
if ($jsInfo['ADDITIONAL'])
{
$additional[] = $jsInfo;
}
else
{
$this->js[$jsInfo['TARGET']][] = $jsInfo;
}
unset($this->js[$js]);
}
// Clean body scripts
foreach ($this->targetList['BODY']['JS_LIST'] as $item)
{
unset($this->targetList['KERNEL']['JS_LIST'][$item['TARGET']]);
}
foreach ($additional as $jsInfo)
{
$this->js[$jsInfo['TARGET']][] = $jsInfo;
}
}