/* * Hide blocks for groups * Copying prohibited! * Developer: Fumuse (https://forumd.ru/profile.php?id=7907 | https://fumuse.ru/) */ class HideBlock { userGroup = 3; groupLists = [ {"id": 3, "name": "Гость"}, {"id": 7, "name": "Игроки до 18+"}, {"id": 5, "name": "Новые пользователи"}, {"id": 6, "name": "Реклама"}, ]; blockList = []; constructor() { this.blockList = document.querySelectorAll('.hideblock'); this.userGroup = window["GroupID"] || 3; //current user group this.hideBlock(); this.bbButton(); } hideBlock() { if (this.blockList.length <= 0) return; this.blockList.forEach((block, index) => { this.blockChangeDom(block); let groups = this.parseGroups(block.dataset.group); //hide from guests if (groups.length === 0) groups = [3]; let hasAccess = this.checkUserAccess(groups); if (!hasAccess) { this.hiddenBlockContent(block); } }) } /** * Изменение вёрстки блока для большей схожести с блоком скрытого текста * @param block */ blockChangeDom(block) { let html = block.innerHTML; block.innerHTML = "Скрытый текст:
" + html + ""; } /** * Разбор строки-настроек в блоке со скрытым текстом * @param groups * @returns {*[]|*|string[]} */ parseGroups(groups) { if (!groups) return []; groups = groups.split(","); if (groups.length > 0) { groups.forEach((group, index) => { groups[index] = Number(group); }); return groups; } return []; } /** * Проверка доступа к блоку со скрытым текстом * @param groups * @returns {*} */ checkUserAccess(groups) { return !groups.includes(this.userGroup); } /** * Скрытие блока от групп, которые не могут видеть этот блок * @param block */ hiddenBlockContent(block) { block.querySelector("blockquote").innerHTML = "
Этот текст доступен для просмотра только определённым группам.
"; } /** * Кнопка группового скрытия на панели бб-кодов */ bbButton() { let buttonPanelHide = document.getElementById('button-hide'); if (!buttonPanelHide) return; this.bbButtonPanel(); let newButton = document.createElement('td'); newButton.id = 'button-grouphide'; newButton.innerHTML = '