// Функция для получения ссылок на изображения function getImageLinks(p, basePath) { let avatar = p["avatar-image"]; if (avatar && avatar.path) { let imagePath = `${basePath}/${avatar.path}`; // Используем базовый путь хранилища return `
`; } return ""; // Возвращаем пустую строку, если изображения нет } // Рекурсивная функция для проверки, является ли страница потомком любой из целевых локаций function isDescendant(dv, page, targetNames, visited = new Set()) { if (!page || visited.has(page.file.path)) { return false; } visited.add(page.file.path); // Если страница совпадает с любой из целевых, она не считается своим потомком if (targetNames.includes(page.file.name)) { return true; } // Получаем родительские регионы let parents = page["parent-region"]; if (!parents) { return false; } if (!Array.isArray(parents)) { parents = [parents]; } // Рекурсивно проверяем каждого родителя for (let parent of parents) { let parentPage = null; if (typeof parent === "object" && parent.path) { parentPage = dv.page(parent.path); } else if (typeof parent === "string") { parentPage = dv.page(parent); } else { parentPage = null; } if (parentPage && isDescendant(dv, parentPage, targetNames, visited)) { return true; } } return false; } function regionMatches(dv, regionsList, pageRegions) { if (pageRegions !== null) { if (!Array.isArray(pageRegions)) { pageRegions = [pageRegions]; } return pageRegions.some(pageRegion => { let regionPage = null; if (typeof pageRegion === 'object' && pageRegion.hasOwnProperty('path')) { regionPage = dv.page(pageRegion.path); } else if (typeof pageRegion === 'string') { regionPage = dv.page(pageRegion); } else { return regionsList.includes(pageRegion); } return isDescendant(dv, regionPage, regionsList); }); } else { return false; } } dv.locations = { getImageLinks, isDescendant, regionMatches, };