var currentLocalHref = window.location.href,
currentLang = document.documentElement.lang;
const LOCALES_SELECT_MENU = {
ru: {
platform: "Платформа",
ecm: "ECM",
crm: "CRM",
projects: "Проекты",
business_solutions: "Бизнес-решения",
service: "Service",
},
en: {
platform: "Platform",
ecm: "ECM",
crm: "CRM",
projects: "Projects",
business_solutions: "Business Solutions",
service: "Service",
},
};
document.addEventListener("DOMContentLoaded", () => {
if (document.visibilityState === "visible") {
hideAllSideUls();
}
});
function removeCollapsedClass(node, tagName, className) {
const closestNode = node.closest(tagName);
if (!closestNode) return;
closestNode.classList.remove(className);
removeCollapsedClass(closestNode.parentElement, tagName, className);
}
function hideAllSideUls() {
const hidingMenu = document.querySelectorAll("#toc li ul");
hidingMenu.forEach((item) => {
item.classList.add("hide-side-menu-item");
item.closest("li").classList.add("collapsed");
});
}
function expandCurrentActiveLink() {
const toc = document.querySelector("#toc");
if (!toc) return;
const currentPage = location.pathname.split("/").pop();
let currentLink = toc.querySelector(`a[href="${currentPage}"]`);
// 👉 Если не нашли текущую ссылку, ищем первую вложенную внутри группы
if (!currentLink) {
const groups = toc.querySelectorAll('a[href="javascript:void(0)"]');
for (const group of groups) {
const firstChildLink = group
.closest("li")
?.querySelector('ul a[href]:not([href="javascript:void(0)"])');
if (firstChildLink?.href.includes(currentPage)) {
currentLink = firstChildLink;
break;
}
}
}
if (!currentLink) return;
currentLink.classList.add("active-side-menu");
let node = currentLink.parentElement;
while (node && node !== toc) {
if (node.tagName === "LI") {
node.classList.remove("collapsed");
const nestedUl = node.querySelector("ul");
if (nestedUl) {
nestedUl.classList.remove("hide-side-menu-item");
}
const hasActive = node.querySelector("a.active-side-menu");
if (hasActive && node.dataset?.bg) {
const [, collapsedMinus] = node.dataset.bg.split(";");
node.style = `background:url(collapsed-minus.png) no-repeat;`;
}
}
if (node.tagName === "UL") {
node.classList.remove("hide-side-menu-item");
}
node = node.parentElement;
}
const parentLi = currentLink.closest("ul")?.closest("li");
const parentLink = parentLi?.querySelector('a[href="javascript:void(0)"]');
if (parentLink && parentLi?.dataset?.bg) {
const [, collapsedMinus] = parentLi.dataset.bg.split(";");
parentLi.style = `background:url(collapsed-minus.png) no-repeat;`;
parentLi.classList.remove("collapsed");
const childUl = parentLi.querySelector("ul");
if (childUl) childUl.classList.remove("hide-side-menu-item");
}
setTimeout(() => {
scrollToSelector(".active-side-menu");
}, 100);
}
function tryHideSideUlsWhenActive() {
const spanText = document.querySelector("span")?.textContent;
const headingText = document.querySelector(".f_Heading1")?.textContent;
const handle = () => {
hideAllSideUls();
expandCurrentActiveLink();
};
if (document.visibilityState === "visible") {
handle();
} else {
if (spanText !== headingText) {
document.addEventListener(
"visibilitychange",
() => {
if (document.visibilityState === "visible") {
handle();
}
},
{ once: true }
);
}
}
}
document.addEventListener("DOMContentLoaded", tryHideSideUlsWhenActive);
//текст перед результатами поиска
const NOTIFICATION_TEXT = {
ru: {
elma365ru:
"Поиск по справке ELMA365, TS SDK, Community и Академии ELMA",
elma4: "Поиск по справке ECM+, CRM+, Проектам и Базe знаний",
rpa: "Поиск по справке ELMA RPA",
},
en: {
elma365en: "Search in BRIX365 Help Center, TS SDK",
},
error: {
ru: {
elma365: ["Произошла ошибка", "Повторите попытку позже."],
},
en: {
elma365: ["There seems to be an error", "Try again later"],
},
},
noResults: {
ru: {
elma365: [
"По вашему запросу ничего не найдено",
"Попробуйте изменить условия поиска.",
],
},
en: {
elma365: [
"No matches found for your search",
"Try modifying your search criteria",
],
},
},
};
//TODO допустимые адреса для просмотра
const allowedHosts = [
"elma365.com/ru/help",
"t-elma365.com/ru/help",
"brix365.com/en/help",
"brix365.t-elma365.com/en/help",
"http://127.0.0.1",
"http://localhost",
"https://ligmanstark.github.io/help365_test/",
"https://help.miduway.space",
];
if (allowedHosts.some((url) => currentLocalHref.includes(url))) {
var widthWindow = window.outerWidth;
if (widthWindow > 768) {
var maxVisible = 10;
} else {
var maxVisible = 5;
}
var outputResultStart = true,
requestValue;
var configPaginate = {
total: 10,
htmlContent: undefined,
page: 1,
totalResults: Number,
};
var TOTAL_RESULT_G = {
ru: "Найдено совпадений:",
en: "matches found.",
};
var flagCheckTotalRes = true;
var CONFIG = {
url: "https://www.googleapis.com/customsearch/v1?",
apikey: "AIzaSyDh75ZnNZYjKkrKswfoMiQ-XBjQpx8V-Vk",
ru: {
cx: "9d6b6310512dc5020",
},
en: {
cx: "d1f232b5a7dd59e18",
},
};
// проверка общего кол-ва результатов с конца пагинации до первого найденного(исключает не рабочую пагинацию)
async function refinementResults(start) {
var requestUrl =
CONFIG.url +
"key=" +
CONFIG.apikey +
"&cx=" +
CONFIG[currentLang].cx +
"&q=" +
requestValue +
"&start=" +
start;
await getResultsGoogle(requestUrl).then((results) => {
if (results.items !== undefined) {
flagCheckTotalRes = false;
configPaginate.total = (start - 1) / 10 + 1;
}
});
}
// Запрос к google для получения результатов ч.1
async function requestServer(start = 0) {
var requestUrl =
CONFIG.url +
"key=" +
CONFIG.apikey +
"&cx=" +
CONFIG[currentLang].cx +
"&q=" +
requestValue +
"&start=" +
start;
await getResultsGoogle(requestUrl)
.then(async (results) => {
await outputResult(results);
})
.catch((e) => {
document.querySelector(
".search-res__items"
).innerHTML = `
${NOTIFICATION_TEXT.error[currentLang].elma365[0]}
${NOTIFICATION_TEXT.error[currentLang].elma365[1]}
`;
});
}
// Запрос к google для получения результатов ч.2
async function getResultsGoogle(url) {
try {
return await $.ajax({
url: url,
type: "GET",
});
} catch (error) {
console.error(
"Ошибка в получении результатов с google:",
error.responseText
);
}
}
// Вывод результатов на странице
async function outputResult(results) {
var res = results.items,
itemsSearch = document.querySelector(".search-res__items"),
html;
itemsSearch.innerHTML = "";
// формирует вывод результата
if (res !== undefined) {
html = res
.map(function (item) {
return `
${outputCategoryResult(
item["link"]
)}
${outputSubCategoryResult(
item["link"]
)}
${item.title}
${item.htmlSnippet}
${item.link}
`;
})
.join(" ");
} else {
html = `
${NOTIFICATION_TEXT.noResults[currentLang].elma365[0]}
${NOTIFICATION_TEXT.noResults[currentLang].elma365[1]}
`;
}
// itemsSearch.insertAdjacentHTML('afterbegin', html.join(' '))
// генерирует кол-во всего страниц в пагинации
if (Number(results.searchInformation.totalResults) > 100) {
configPaginate.total = 10;
} else {
var t = [];
for (
var i = 0;
i < Number(results.searchInformation.totalResults);
i += 10
) {
t.push(i);
}
if (flagCheckTotalRes) {
for (var i = t.length; i < t.length + 1 && i > 0; i--) {
if (flagCheckTotalRes) {
if (i > 0) {
await refinementResults(i * 10 - 10 + 1);
}
}
}
}
// configPaginate.total = t.length;
}
configPaginate.htmlContent = html;
configPaginate.totalResults = Number(
results.searchInformation.totalResults
);
if (outputResultStart) {
itemsSearch.insertAdjacentHTML("afterbegin", html);
outputResultStart = false;
if (Number(results.searchInformation.totalResults) > 10) {
await paginationGenerate(configPaginate);
// выводит кол-во найденных результатов
outputAllResults();
}
}
}
if (configPaginate.totalResults > 10) {
paginationGenerate(configPaginate);
}
// создает пагинацию
function paginationGenerate({ total, page }) {
$(".pagination__items")
.bootpag({
total: total,
page: page,
maxVisible: maxVisible,
leaps: true,
firstLastUse: true,
first:
'',
last: '',
prev: '',
next: '',
wrapClass: "pagination",
activeClass: "active",
disabledClass: "disabled",
nextClass: "next",
prevClass: "prev",
lastClass: "last",
firstClass: "first",
})
.on("page", async function (event, num) {
configPaginate.page = num - 1;
if (configPaginate.page === 0) {
configPaginate.page = 0;
} else {
configPaginate.page = configPaginate.page * 10 + 1;
}
await requestServer(configPaginate.page);
$(".search-res__items").html(configPaginate.htmlContent);
})
.find(".pagination");
}
// выводит кол-во найденных результатов
function outputAllResults() {
if (document.documentElement.lang === "ru") {
document.querySelector(".search-res__total").innerText =
TOTAL_RESULT_G.ru + " " + String(configPaginate.totalResults);
} else {
document.querySelector(".search-res__total").innerText =
configPaginate.totalResults + " " + TOTAL_RESULT_G.en;
}
}
//выводит текст перед результатами поиска
function outputTitleResults() {
var text = "";
switch (true) {
//Рус
case /elma365.com\/ru\/help/i.test(currentLocalHref):
text = NOTIFICATION_TEXT.ru.elma365ru;
break;
case /ru\/help4\//i.test(currentLocalHref):
text = NOTIFICATION_TEXT.ru.elma365en;
break;
case /rpa.ai\/ru/i.test(currentLocalHref):
text = NOTIFICATION_TEXT.ru.rpa;
break;
case /localhost/i.test(currentLocalHref) && currentLang === "ru":
text = NOTIFICATION_TEXT.ru.elma365ru;
break;
//Анг
case /brix365.com\/en\/help/i.test(currentLocalHref):
text = NOTIFICATION_TEXT.en.elma365en;
break;
case /localhost:/i.test(currentLocalHref) && currentLang === "en":
text = NOTIFICATION_TEXT.en.elma365en;
break;
}
return text;
}
function outputCategoryResult(categoryUrl) {
var textContent = "";
switch (true) {
// ELMA365
case /elma365.com\/ru\/help/i.test(categoryUrl):
textContent = "Справка";
break;
case /academy.com/i.test(categoryUrl):
textContent = "ELMA Academy";
break;
case /tssdk.elma/i.test(categoryUrl):
textContent = "TS SDK";
break;
case /community.elma/i.test(categoryUrl):
textContent = "ELMA365 Community";
break;
// Английская версия
case /en\/help/i.test(categoryUrl):
textContent = "Help";
break;
// rpa
case /rpa.ai\/ru/i.test(categoryUrl):
textContent = "RPA";
break;
// ELMA4
case /ru\/help4\/ecm/i.test(categoryUrl):
textContent = "ECM+";
break;
case /ru\/help4\/crm/i.test(categoryUrl):
textContent = "CRM+";
break;
case /ru\/help4\/projects/i.test(categoryUrl):
textContent = "Проекты";
break;
case /elma-bpm.ru\/help4/i.test(categoryUrl):
textContent = "BPM";
break;
case /ru\/KB/i.test(categoryUrl) ||
/elma-bpm.ru\/…help/i.test(categoryUrl) ||
/help/i.test(categoryUrl):
textContent = "База знаний";
break;
}
return textContent;
}
// Плашка поддерриктории ссылки
function outputSubCategoryResult(categoryUrl) {
var textContent = "";
switch (true) {
// ELMA365
case /elma365.com\/ru\/help\/platform/i.test(categoryUrl):
textContent = "Платформа";
break;
case /elma365.com\/ru\/help\/ecm/i.test(categoryUrl):
textContent = "ECM";
break;
case /elma365.com\/ru\/help\/crm/i.test(categoryUrl):
textContent = "CRM";
break;
case /elma365.com\/ru\/help\/projects/i.test(categoryUrl):
textContent = "Проекты";
break;
case /elma365.com\/ru\/help\/business_solutions/i.test(categoryUrl):
textContent = "Бизнес-решения";
break;
case /elma365.com\/ru\/help\/service/i.test(categoryUrl):
textContent = "Сервис";
break;
// BRIX
case /brix365.com\/en\/help\/platform/i.test(categoryUrl):
textContent = "Platform";
break;
case /brix365.com\/en\/help\/ecm/i.test(categoryUrl):
textContent = "ECM";
break;
case /brix365.com\/en\/help\/crm/i.test(categoryUrl):
textContent = "CRM";
break;
case /brix365.com\/en\/help\/projects/i.test(categoryUrl):
textContent = "Projects";
break;
case /brix365.com\/en\/help\/business_solutions/i.test(categoryUrl):
textContent = "Business solutions";
break;
case /brix365.com\/en\/help\/service/i.test(categoryUrl):
textContent = "Service";
break;
}
return textContent;
}
//TODO badge в поиске
// добавляет плашку в хлебные крошки и если их нет добавляет над тайтлом статьи
function insertCurrentSubDirectorySearch() {
let timerId = setInterval(() => {
var el = document.querySelectorAll("#subcategory");
if (el && el.length < 1) {
let href = window.location.href;
if (Boolean(outputSubCategoryResult(href))) {
var subcategory = document.createElement("span");
var breadcrumbs = document.querySelector(".topic__breadcrumbs");
var articleTitle = document.querySelector(".article__header");
subcategory.setAttribute("id", "subcategory");
subcategory.className =
"search-res__item-category search-res__item-category_subcategory subcategory";
subcategory.innerHTML = outputSubCategoryResult(href);
clearInterval(timerId);
}
}
if (breadcrumbs) {
breadcrumbs.prepend(subcategory);
} else if (articleTitle) {
articleTitle.prepend(subcategory);
} else {
clearInterval(timerId);
}
}, 800);
}
insertCurrentSubDirectorySearch();
//TODO функция обновления разделов badge
document.querySelector(".main").addEventListener("click", function () {
insertCurrentSubDirectorySearch();
});
document.addEventListener("DOMContentLoaded", () => {
// Функция для определения подкатегории по URL
function getSubCategoryFromUrl(url) {
const urlPatterns = [
{ pattern: /(127\.0\.0\.1|localhost)/i, value: "localhost" },
{ pattern: /elma365\.com\/ru\/help\/platform/i, value: "Платформа" },
{ pattern: /elma365\.com\/ru\/help\/ecm/i, value: "ECM" },
{ pattern: /elma365\.com\/ru\/help\/crm/i, value: "CRM" },
{ pattern: /elma365\.com\/ru\/help\/projects/i, value: "Проекты" },
{
pattern: /elma365\.com\/ru\/help\/business_solutions/i,
value: "Бизнес-решения",
},
{ pattern: /elma365\.com\/ru\/help\/service/i, value: "Сервис" },
///Prod
{ pattern: /brix365\.com\/en\/help\/platform/i, value: "Platform" },
{ pattern: /brix365\.com\/en\/help\/ecm/i, value: "ECM" },
{ pattern: /brix365\.com\/en\/help\/crm/i, value: "CRM" },
{ pattern: /brix365\.com\/en\/help\/projects/i, value: "Projects" },
{ pattern: /brix365\.com\/en\/help\/service/i, value: "Service" },
{ pattern: /brix365\.com\/en\/help\/business_solutions/i, value: "Business Solutions" },
///Test
{ pattern: /brix365.t-elma365\.com\/en\/help\/platform/i, value: "Platform" },
{ pattern: /brix365.t-elma365\.com\/en\/help\/ecm/i, value: "ECM" },
{ pattern: /brix365.t-elma365\.com\/en\/help\/crm/i, value: "CRM" },
{ pattern: /brix365.t-elma365\.com\/en\/help\/projects/i, value: "Projects" },
{ pattern: /brix365.t-elma365\.com\/en\/help\/service/i, value: "Service" },
{ pattern: /brix365.t-elma365\.com\/en\/help\/business_solutions/i, value: "Business Solutions" },
{
pattern: /.*/i,
value: "RUM",
},
];
const match = urlPatterns.find((item) => item.pattern.test(url));
return match ? match.value : "";
}
//TODO Функция вставки/обновления плашки подкатегории
function updateSubCategory() {
const text = getSubCategoryFromUrl(window.location.href);
const badge = document.querySelector(".article__badge");
// Если текст не изменился - ничего не делаем
if (badge && badge.textContent === text) {
return;
}
// Обновляем только если есть изменения
if (badge) {
badge.textContent = text;
}
}
// Инициализация при загрузке
updateSubCategory();
// Дополнительно отслеживаем изменения DOM на случай SPA-переходов
new MutationObserver(() => {
updateSubCategory();
}).observe(document.body, { childList: true, subtree: true });
// Обработка кастомного события
document.addEventListener("subcategory:update", updateSubCategory);
});
////////////////////////////////////////////////////////////////////////
// редирект на страницу Help с учетом поддраздела
function redirectToHelpPage(categoryUrl) {
switch (true) {
// ELMA365
case /ru\/help\/platform\/platform-help/i.test(categoryUrl):
window.location.href =
window.location.origin +
"/ru/help" +
"/platform/platform-distribution.html";
break;
case /ru\/help\/ecm\/platform-help/i.test(categoryUrl):
window.location.href =
window.location.origin +
"/ru/help" +
"/platform/platform-distribution.html";
break;
case /ru\/help\/crm\/platform-help/i.test(categoryUrl):
window.location.href =
window.location.origin +
"/ru/help" +
"/platform/platform-distribution.html";
break;
case /ru\/help\/projects\/platform-help/i.test(categoryUrl):
window.location.href =
window.location.origin +
"/ru/help" +
"/platform/platform-distribution.html";
break;
case /ru\/help\/business_solutions\/platform-help/i.test(categoryUrl):
window.location.href =
window.location.origin +
"/ru/help" +
"/platform/platform-distribution.html";
break;
case /ru\/help\/service\/platform-help/i.test(categoryUrl):
window.location.href =
window.location.origin +
"/ru/help" +
"/platform/platform-distribution.html";
break;
}
}
function redirectCheck() {
var timer = setInterval(() => {
redirectToHelpPage(window.location.href);
if (window.location.href.indexOf("platform-distribution.html") !== -1) {
clearInterval(timer);
}
}, 200);
}
setTimeout(() => {
document
.querySelector("a[href='platform-help.html']")
.addEventListener("click", function () {
redirectCheck();
});
}, 200);
// запускает поиск, если находимся на странице поиска
window.addEventListener("DOMContentLoaded", function () {
if (/search.html\?query=/i.test(currentLocalHref)) {
document.querySelector(".search-res__title").innerHTML =
outputTitleResults();
var positionQuery = currentLocalHref.search(/\?query=/);
var allRequests = currentLocalHref.slice(positionQuery + 7);
var requestText = allRequests.replace(/%20/g, " ");
document.querySelector(
".search-form__label input.search-form__input"
).value = decodeURI(requestText);
requestValue = requestText;
requestServer();
}
});
// end
// menu select + help menu articles
$(".solution-select").on("mouseenter", function () {
$(".solution-select").addClass("active");
$(".solution-select ul").addClass("active");
});
$(".solution-select__list").on("mouseleave", function () {
$(".solution-select").removeClass("active");
$(".solution-select ul").removeClass("active");
});
function getCurrentLink(url) {
var textContent = "",
subDir = "";
switch (true) {
case /help\/platform/i.test(url):
textContent = LOCALES_SELECT_MENU[currentLang].platform;
break;
case /help\/ecm/i.test(url):
textContent = LOCALES_SELECT_MENU[currentLang].ecm;
break;
case /help\/crm/i.test(url):
textContent = LOCALES_SELECT_MENU[currentLang].crm;
break;
case /help\/projects/i.test(url):
textContent = LOCALES_SELECT_MENU[currentLang].projects;
break;
case /help\/business_solutions/i.test(url):
textContent = LOCALES_SELECT_MENU[currentLang].business_solutions;
break;
case /help\/service/i.test(url):
textContent = LOCALES_SELECT_MENU[currentLang].service;
break;
default:
textContent = LOCALES_SELECT_MENU[currentLang].platform;
break;
}
return textContent;
}
function subDirName(url) {
var g = "";
switch (true) {
case /help\/platform/i.test(url):
g = "platform";
break;
case /help\/ecm/i.test(url):
g = "ecm";
break;
case /help\/crm/i.test(url):
g = "crm";
break;
case /help\/projects/i.test(url):
g = "projects";
break;
case /help\/business_solutions/i.test(url):
g = "business_solutions";
break;
case /help\/service/i.test(url):
g = "service";
break;
}
return g;
}
function setLinks() {
$(".solution-select__selected").text(getCurrentLink(window.location.href));
if (
$(".solution-select__selected").text() ===
getCurrentLink(window.location.href)
) {
var links = $(".solution-select__list a")
.map(function () {
return $(this).attr("href");
})
.get();
var checked = links.find((el) =>
el.includes(subDirName(window.location.href))
);
$(".solution-select__list a[href='" + checked + "']").addClass("checked");
}
}
setLinks();
function creatHelpMenu() {
if (
!(window.location.href.indexOf("/search.html?") !== -1) &&
$("#help-menu").length === 0 &&
currentLang === "ru"
) {
$(".footer").append(
' "
);
const list = document.querySelectorAll(".help-menu li");
list.forEach((item) => {
item.addEventListener("click", (e) => {
list.forEach((el) => {
el.classList.remove("active");
});
item.classList.add("active");
});
});
$(".question").on("click", function () {
$(this).find('textarea[name="help_question"]').focus();
});
$(".question__popup .close").on("click", function () {
setTimeout(() => {
$(".question__popup").parent().removeClass("active");
}, 10);
});
$(document).mouseup(function (e) {
let container = $(".help-menu li.active");
if (!container.is(e.target) && container.has(e.target).length === 0) {
container.removeClass("active");
container.find(".question-success").addClass("hidden");
}
});
if (window.matchMedia("(max-width: 900px)")) {
$(".help-menu").addClass("help-menu_xs");
$(".help-menu").find(".dialog").addClass("hide-xs");
}
}
}
creatHelpMenu();
const elem = document.getElementById("article");
var mutationObserver = new MutationObserver(function (mutations) {
if (mutations[0]) {
feedbackSubmit();
feedback();
}
});
// Запускаем наблюдение за изменениями в корневом HTML-элементе страницы
mutationObserver.observe(elem, {
childList: true,
});
document.body.addEventListener("click", eventsResetHandler);
function eventsResetHandler() {
setTimeout(() => {
setLinks();
creatHelpMenu();
}, 200);
}
// end
}
if (window.location.href.indexOf("/search.html?") !== -1) {
$("#feedback").css("display", "none");
}