const isScriptLoaded = (url) => {
const scripts = document.getElementsByTagName('script');
for(let i = scripts.length; i--;) {
if(scripts[i].src === url) {
return scripts[i].getAttribute('data-loaded') === 'true' ? scripts[i] : false;
}
}
return false;
};
const loadScriptBody = (c) => {
let url = (c.params) ? arrayToUrlParams(c.url, c.params) : c.url;
let script = isScriptLoaded(url);
if(script){
// Скрипт уже загружен и готов к использованию:
c.callback();
} else {
script = document.createElement('script');
script.src = url;
script.setAttribute('data-loaded', 'false'); // Устанавливаем флаг загруженности в 'false'
script.addEventListener("load", () => {
script.setAttribute('data-loaded', 'true'); // Меняем флаг на 'true', когда скрипт загрузился
c.callback();
}, false);
if(c.attributes && c.attributes.length > 0){
for(let i = 0; i < c.attributes.length; i++){
script.setAttribute(c.attributes[i].name, c.attributes[i].value);
}
}
document.getElementsByTagName('head')[0].appendChild(script);
}
};
LOGIC
в методе CIBlockSection::GetList нет. Сложная логика есть только в методе GetList класса CIBlockElement. function createTree($data, $params = []) {
extract($params + [
'levelKey' => 'level',
'childrenKey' => 'children',
]);
$root = [];
foreach ($data as $n) {
$arr = &$root;
for (
$level = $data[0][$levelKey];
$level++ < $n[$levelKey];
$arr = &$arr[count($arr) - 1][$childrenKey]
) ;
$arr[] = $n + [ $childrenKey => [] ];
}
return $root;
}
$tree = createTree($arMenu, [ 'levelKey' => 'LEVEL' ]);
function createTree($data, $params = []) {
$levelKey = $params['levelKey'] ?? 'level';
$childrenKey = $params['childrenKey'] ?? 'children';
$root = [];
$stack = [ [ $data[0][$levelKey], &$root ] ];
foreach ($data as $n) {
$end = end($stack);
$level = $n[$levelKey];
if ($level > $end[0]) {
$stack[] = [ $level, &$end[1][count($end[1]) - 1][$childrenKey] ];
} else while ($level < end($stack)[0]) {
array_pop($stack);
}
end($stack)[1][] = array_merge($n, [ $childrenKey => [] ]);
}
return $root;
}
function CLICK() {
let button = document.querySelectorAll('button');
if(button.length){
for (let i = 0; i < button.length; i++){
+ if (!button[i].classList.contains('ok'))
+ button[i].classList.add('ok');
button[i].addEventListener('click', function(EVENT){
console.log(1,button[i]);
});
+ }
}
}
}
CLICK();
(x<a && y<a) || (x>b && y>b)
y<a||x>b