augusta’s post: тело ощущается слишком тесной одеждой; растянули, засунули кости, не предусмотрели пространства для воздуха, теперь им остается только давиться. злобно перегонять на границах гипервентиляции кислород (это не паника, это лишь жадность) и засовывать сомнение обратно в те дыры, из которых оно вылезает...
      настройки
      Шрифт в постах

      hngrave1

      Информация о пользователе

      Привет, Гость! Войдите или зарегистрируйтесь.


      Вы здесь » hngrave1 » Тестовый форум » фильтры до чистки


      фильтры до чистки

      Сообщений 1 страница 4 из 4

      1

      верх
      Код:
      <!-- Стиль. Вкладки в постах вв-кодами. (done by Kolobdur) -->
      <link rel="stylesheet" type="text/css" href="https://forumstatic.ru/files/001a/ad/c5/19663.css">
      
      <style>.cloc span.highlight-text {
      display: block;
          width: 0px;
          height: 0px;
          font-size: 0;
      }
      
      li.allcep {
          display: inline-flex;
          flex-direction: row;
          width: 600px;
          border: 1px solid #00000057;
          border-radius: 10px;
          background: #ffffffc7;
          padding: 10px;
          margin: 10px;
          gap: 20px;
      }
      
      .cedit {
          display: inline-flex;
          position: absolute;
          margin-left: -34px;
          margin-top: 2px;
          font-size: 8px;
          gap: 3px;
          flex-direction: column;
      }
      
      li.allcep .cnames {
          width: 100px;
      }
      
      li.allcep .chead {
          width: 100px;
          display: inline-flex;
          flex-direction: column;
      }
      
      .allchrono {
          display: inline-flex;
          flex-direction: column;
      }
      
      .hideme {
          display: none !important;
      }
      
      .showme {
          display: inline-flex !important;
      }
      
      .ishow {
          background-color: lightgreen!important;
      }
      
      .ihide {
          background-color: lightcoral!important;
      }
      
      .allfgroups ul li {
          border: 1px solid #9d9d9d;
          padding: 2px 10px;
          font-size: 10px;
          background: #e3ddd9;
      cursor: pointer;}
      
      .allfgroups ul {
          display: inline-flex;
          width: 76px;
          max-height: 170px;
          padding: 10px;
          /* margin: 10px; */
          overflow-y: auto;
          flex-direction: column;
          flex-wrap: nowrap;
      }
      
      ul.fgroup1 {
          display: grid;
          grid-template-columns: 65px 65px 65px;
          gap: 2px;
          width: 207px;
          align-items: center;
          height: auto;
      }
      
      .allfgroups {
          display: inline-flex;
      }
      
      ul.fgroup2 {
          width: 191px;
      }
      
      /* styles for FILL CODE AS FORM  (info: https://github.com/4eDo/mybb/tree/main/fill_code_as_form#readme )*/
      #templateBtn {
      	border: 1px solid #000;
      	width: 150px;
      	text-align: center;
      }
       
      .tmpl_overlay {
      	position: fixed;
      	top: 0;
      	left: 0;
      	width: 100%;
      	height: 100%;
      	background-color: rgba(0, 0, 0, 0.5);
      	display: none;
      	z-index: 1000;
      }
       
      .tmpl_popup {
      	position: absolute;
      	top: 0px;
      	left: 50%;
      	transform: translate(-50%, -50%);
      	justify-content: space-evenly;
      	padding: 15px;
      	/*background: url(ссыль) no-repeat center;*/
      	background-color: #f7f7f7;
      	padding: 15px;
      	height: 500px;
      	width: 650px;
      	overflow: auto;
      	display: none;
      	z-index: 1001;
      	color: #000 !important;
      }
       
      #tmpl_close-button {
      	position: absolute;
      	cursor: pointer;
      	top: 0px;
      	right: 5px;
      	font-size: 23px;
      	color: #000 !important;
      	font-weight: 700;
      	text-decoration: none;
      	border: 0px !important;
      }
       
      #tmpl_back-button,
      #tmpl_get-code-button {
      	display: inline-block;
      	position: relative;
      	top: 1px;
      	width: 127px;
      	cursor: pointer;
      	padding: 5px 8px 5px 8px;
      	background: #1474C3 !important;
      	color: #ffffff !important;
      	text-align: center;
      	font-family: 'Arial';
      	font-size: 10px;
      	letter-spacing: 0.6px;
      	text-transform: lowercase;
      }
       
      #tmpl_back-button:hover,
      #tmpl_get-code-button:hover,
      #tmpl_get-code-button {
      	background-color: #1474C3 !important;
      }
       
      #tmpl_get-code-button:hover {
      	background-color: #1474C3 !important;
      }
       
      #targetForm table {
      	width: 100%;
      	border-collapse: collapse;
      	flex-grow: 1;
      }
       
      #targetForm td {
      	padding: 5px;
      	vertical-align: top;
      }
       
      #targetForm td:first-child {
      	text-align: right;
      	padding-right: 10px;
      }
       
      #targetForm td:first-child label {
      	font-weight: 700;
      }
       
      #targetForm td:first-child div {
      	font-style: italic;
      }
       
      #targetForm input,
      #targetForm select,
      #targetForm textarea {
      	width: 290px;
      	color: #000000 !important;
      }
       
      #targetForm,
      #templatesList {
      	height: 450px;
      	display: flex;
      	margin-top: 10px;
      	flex-direction: column;
      }
       
      #templateFormName {
      	align-self: center;
      	font-size: large;
      	padding: 2px;
      }
       
      .tmpl_template {
      	margin-bottom: 10px !important;
      	margin-top: 10px !important;
      	font-size: 10px;
      	color: #000;
      	text-align: justify;
      	background: #E1EDF7;
      	border: 1px solid #000;
      	padding: 8px;
      	font-size: 11px;
      	font-family: Manrope;
      	letter-spacing: 0.6px;
      	text-transform: lowercase;
      	cursor: pointer;
      }
      #targetForm td div {
          max-height: 200px;
          overflow: auto;
          padding: 10px;
          line-height: 9px;
      }/
      * END styles for FILL CODE AS FORM*/
      </style>

      0

      2

      низ
      Код:
      <!-- Скрипт. Вкладки в постах вв-кодами. (done by Kolobdur) -->
      <script type="text/javascript" src="https://forumstatic.ru/files/001a/ad/c5/36868.js"></script>
      
      <script>
      (function () {
          var cthemeID = 828;
          var cpageID = null;
          var cbaseID = "811";
          var ckeys = {
              "НПС": "npc",
              "квест": "quest",
              "сюжетный": "main",
              "Грейв-Лейк": "grave_lake",
              "Шоссе": "il_14_highway",
              "туман": "fog",
              "полицейский": "police_station",
              "Историческое": "historical_society",
              "лазарет": "lazaretto",
              "школа": "st_mark_school",
              "церковь": "church",
              "радиорубка": "radio_shack",
              "мастерская": "workshop",
              "лесопилка": "sawmill",
              "сторожка": "graveyard_cabin",
              "кладбище": "cemetery",
              "DVD-прокат": "redbox_rental",
              "Закусочная": "marta_snack_bar",
              "Ресторан": "kfc_restaurant",
              "Бар": "decrepit_sheep_bar",
              "#1": "home1",
              "#2": "home2",
              "#3": "home3",
              "#4": "home4",
              "#5": "home5",
              "#6": "home6",
              "#7": "home7",
              "#8": "home8",
              "#9": "home9",
              "#10": "home10",
              "#11": "home11",
              "общежитие": "dormitory",
              "браунов": "brown_farm",
              "уилсонов": "wilson_farm",
              "Другое": "another",
              "тьма": "dark",
              "приезд": "welcome"
          };
      
          async function fetchPosts(topicId) {
              try {
                  const apiUrl = `/api.php?method=post.get&topic_id=${topicId}&limit=200&sort_dir=asc&fields=id,user_id,message`;
                  const response = await fetch(apiUrl);
                  if (!response.ok) {
                      throw new Error(`Ошибка API: ${response.status}`);
                  }
                  const data = await response.json();
      
                  if (!data.response || !Array.isArray(data.response)) {
                      console.error("Ошибка: Данные из API не содержат массив в поле 'response'.");
                      return [];
                  }
      
                  return data.response;
              } catch (error) {
                  console.error("Ошибка при получении данных:", error);
                  return [];
              }
          }
      
          function processEpisode(post) {
              const id = post.id;
              const userId = post.user_id;
              const message = post.message;
      
              // Проверяем, что message существует
              if (!message) {
                  console.warn(`Сообщение с ID ${id} не содержит HTML-контента.`);
                  return null;
              }
      
              const parser = new DOMParser();
              const doc = parser.parseFromString(message, "text/html");
              const cepElements = doc.querySelectorAll(".cep");
      
              return Array.from(cepElements).map(cep => {
                  // Извлекаем дату
                  const dateElement = cep.querySelector(".cdate p a") || cep.querySelector(".cdate p");
                  if (!dateElement) {
                      console.warn(`Элемент .cdate не найден в эпизоде с ID ${id}.`);
                      return null;
                  }
                  let dateText = dateElement.textContent.trim();
                  const href = dateElement.tagName === "A" ? dateElement.getAttribute("href") : null;
      
                  const dateParts = dateText.split("-");
                  const startDate = new Date(dateParts[0].trim().split(".").reverse().join("-"));
      
                  // Извлекаем ключевые слова из .ckeys p и .cloc p
                  const keysElement = cep.querySelector(".ckeys p");
                  const locElement = cep.querySelector(".cloc p");
      
                  let combinedKeysText = "";
                  if (keysElement) {
                      combinedKeysText += keysElement.textContent.trim();
                  }
                  if (locElement) {
                      combinedKeysText += (combinedKeysText ? " " : "") + locElement.textContent.trim();
                  }
      
                  // Разделяем ключи по любым непечатным символам и удаляем пустые значения
                  const keys = combinedKeysText
                      ? combinedKeysText.split(/\s+|,\s*/).map(key => key.trim()).filter(key => key !== "")
                      : [];
      
                  // Маппинг ключей в классы
                  const keyClasses = keys.map(key => ckeys[key] || "").filter(cls => cls);
      
                  // Если ключей нет, добавляем специальный класс
                  if (keyClasses.length === 0) {
                      keyClasses.push("nokeys");
                  }
      
                  // Создаём элемент li
                  const li = document.createElement("li");
                  li.className = `allcep ${keyClasses.join(" ")}`;
                  li.dataset.postId = id;
                  li.dataset.authId = userId;
      
                  // Добавляем ссылки на пост и редактирование
                  const ceditDiv = document.createElement("div");
                  ceditDiv.className = "cedit";
      
                  const asrcLink = document.createElement("a");
                  asrcLink.href = `/viewtopic.php?pid=${id}#p${id}`;
                  asrcLink.className = "asrc";
                  asrcLink.textContent = "пост";
                  ceditDiv.appendChild(asrcLink);
      
                  if (GroupID === 1 || parseInt(UserID) === parseInt(userId)) {
                      const editsrcLink = document.createElement("a");
                      editsrcLink.href = `/edit.php?id=${id}`;
                      editsrcLink.className = "editsrc";
                      editsrcLink.textContent = "ред";
                      ceditDiv.appendChild(editsrcLink);
                  }
      
                  li.appendChild(ceditDiv);
      
                  // Создаём контейнер для заголовка
                  const cheadDiv = document.createElement("div");
                  cheadDiv.className = "chead";
      
                  // Добавляем дату как <span class="cdate">
                  const cdateSpan = document.createElement("span");
                  cdateSpan.className = "cdate";
                  if (href) {
                      cdateSpan.innerHTML = `<a href="${href}">${dateText}</a>`;
                  } else {
                      cdateSpan.textContent = dateText;
                  }
                  cheadDiv.appendChild(cdateSpan);
      
                  // Добавляем локации как <span class="cloc">
                  const clocElement = cep.querySelector(".cloc p");
                  if (clocElement) {
                      const clocSpan = document.createElement("span");
                      clocSpan.className = "cloc";
                      clocSpan.innerHTML = clocElement.innerHTML;
                      cheadDiv.appendChild(clocSpan);
                  }
      
                  // Добавляем в элемент li
                  li.appendChild(cheadDiv);
      
                  // Добавляем имена персонажей как <div class="cnames">
                  const namesElement = cep.querySelector(".cnames p");
                  if (namesElement) {
                      const cnamesDiv = document.createElement("div");
                      cnamesDiv.className = "cnames";
                      cnamesDiv.innerHTML = namesElement.innerHTML;
                      li.appendChild(cnamesDiv);
                  }
      
                  // Добавляем текст как <div class="ctext">
                  const textElement = cep.querySelector(".ctext p");
                  if (textElement) {
                      const ctextDiv = document.createElement("div");
                      ctextDiv.className = "ctext";
                      ctextDiv.textContent = textElement.textContent.trim();
                      li.appendChild(ctextDiv);
                  }
      
                  return { element: li, date: startDate };
              }).filter(ep => ep !== null); // Удаляем null значения
          }
      
          async function main() {
              if (!cthemeID && !cpageID) {
                  console.error("Ошибка: Не указаны cthemeID или cpageID.");
                  return;
              }
      
              const baseIds = cbaseID.split(",");
              const allEpisodes = [];
      
              // Шаг 1: Собираем все эпизоды из базовых тем
              for (const baseId of baseIds) {
                  const posts = await fetchPosts(baseId.trim());
      
                  if (!Array.isArray(posts)) {
                      console.error(`Ошибка: Полученные данные для topic_id=${baseId} не являются массивом.`);
                      continue;
                  }
      
                  for (const post of posts) {
                      const processedEpisodes = processEpisode(post);
                      if (processedEpisodes) {
                          allEpisodes.push(...processedEpisodes);
                      }
                  }
              }
      
              // Шаг 2: Сортируем эпизоды по дате
              allEpisodes.sort((a, b) => a.date - b.date);
      
              // Шаг 3: Группируем эпизоды по месяцам
              const groupedEpisodes = {};
              const monthNamesRU = [
                  "Январь", "Февраль", "Март", "Апрель", "Май", "Июнь",
                  "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"
              ];
              const monthNamesEN = [
                  "january", "february", "march", "april", "may", "june",
                  "july", "august", "september", "october", "november", "december"
              ];
      
              for (const episode of allEpisodes) {
                  const monthIndex = episode.date.getMonth(); // Индекс месяца (0-11)
                  const year = episode.date.getFullYear(); // Год
                  const monthKey = `${year}-${monthIndex}`; // Уникальный ключ для года и месяца
      
                  if (!groupedEpisodes[monthKey]) {
                      groupedEpisodes[monthKey] = {
                          monthNameRU: monthNamesRU[monthIndex], // Русское название месяца
                          monthNameEN: monthNamesEN[monthIndex], // Английское название месяца
                          elements: []
                      };
                  }
      
                  groupedEpisodes[monthKey].elements.push(episode.element);
              }
      
              // Шаг 4: Вставляем сгруппированные данные в .allchrono
              [cthemeID, cpageID].forEach(targetId => {
                  if (targetId) {
                      const targetDiv = document.querySelector(".allchrono");
                      if (targetDiv) {
                          targetDiv.innerHTML = ""; // Очищаем содержимое
      
                          // Создаём списки для каждого месяца
                          for (const key in groupedEpisodes) {
                              const group = groupedEpisodes[key];
                              const ul = document.createElement("ul");
                              ul.className = group.monthNameEN; // Используем английское название месяца как класс
      
                              // Добавляем заголовок месяца
                              const h5 = document.createElement("h5");
                              h5.textContent = group.monthNameRU; // Используем русское название месяца для заголовка
                              ul.appendChild(h5);
      
                              // Добавляем элементы эпизодов
                              group.elements.forEach(ep => ul.appendChild(ep));
      
                              // Добавляем список в контейнер
                              targetDiv.appendChild(ul);
                          }
                      } else {
                          console.warn("Элемент .allchrono не найден.");
                      }
                  }
              });
      
              console.log("Хронология успешно обновлена!");
              onChronologyUpdated(); // Уведомляем фильтры о завершении обновления
          }
      
          main();
      })();
      </script>
      
      <script>
      // Переменные для работы
      const tofilter = "allchrono"; // Класс элемента для фильтрации
      const filtersList = document.querySelector('.filterslist'); // Контейнер для фильтров
      const fgroup1 = {
          "январь": "january", "февраль": "february", "март": "march", "апрель": "april",
          "май": "may", "июнь": "june", "июль": "july", "август": "august",
          "сентябрь": "september", "октябрь": "october", "ноябрь": "november", "декабрь": "december"
      };
      const fgroup2 = {
          "Грейв-Лейк": "grave_lake", "Шоссе IL 14": "il_14_highway", "туман": "fog", "полицейский участок": "police_station",
          "Историческое общество": "historical_society", "лазарет": "lazaretto", "школа святого марка": "st_mark_school",
          "церковь": "church", "радиорубка": "radio_shack", "мастерская": "workshop", "лесопилка": "sawmill",
          "сторожка в кладбище": "graveyard_cabin", "кладбище": "cemetery", "DVD-прокат": "redbox_rental",
          "Закусочная": "marta_snack_bar", "Ресторан": "kfc_restaurant", "Бар": "decrepit_sheep_bar",
          "дом #1 / 11 elm street": "home1", "дом #2 / 15 elm street": "home2", "дом #3 / 21 elm street": "home3",
          "дом #4 / 44 woodbury street": "home4", "дом #5 / 8 maple drive": "home5", "дом #6 / 9 maple drive": "home6",
          "дом #7 / 10 maple drive": "home7", "дом #8 / 11 maple drive": "home8", "дом #9 / 3 jefferson street": "home9",
          "дом #10 / 14 jefferson street": "home10", "дом #11 / 31 van buren street": "home11", "общежитие / 17 maple drive": "dormitory",
          "ферма браунов": "brown_farm", "ферма уилсонов": "wilson_farm", "другое": "another"
      };
      const fgroup3 = { "нпс": "npc", "квест": "quest", "сюжетный": "main" };
      const fgroup4 = { "тьма": "dark", "приезд": "welcome" };
      
      let isChronologyUpdated = false; // Флаг для отслеживания обновления хронологии
      
      // Функция создания группы фильтров
      function createFilterGroup(groupName, groupData, initialHide = false) {
          const ul = document.createElement('ul');
          ul.classList.add(groupName);
      
          for (const [label, className] of Object.entries(groupData)) {
              const li = document.createElement('li');
              li.textContent = label;
              li.classList.add(className);
      
              if (initialHide) {
                  li.classList.add('ihide');
              }
      
              li.addEventListener('click', () => toggleFilter(li));
              ul.appendChild(li);
          }
      
          return ul;
      }
      
      // Добавление групп фильтров
      function initializeFilters() {
          const allFGroups = document.createElement('div');
          allFGroups.classList.add('allfgroups');
      
          allFGroups.appendChild(createFilterGroup('fgroup1', fgroup1));
          allFGroups.appendChild(createFilterGroup('fgroup2', fgroup2));
          allFGroups.appendChild(createFilterGroup('fgroup3', fgroup3));
          allFGroups.appendChild(createFilterGroup('fgroup4', fgroup4, true));
      
          // Создание кнопки сброса
          const resetButton = document.createElement('div');
          resetButton.classList.add('sbros');
          resetButton.innerHTML = '<a href="#" onclick="resetFilters(); return false;">Сбросить фильтры</a>';
      
          // Создание поля поиска
          const finder = document.createElement('div');
          finder.classList.add('finder');
          const textarea = document.createElement('textarea');
          textarea.placeholder = 'Поиск по слову';
          textarea.addEventListener('input', () => filterBySearch(textarea.value));
          finder.appendChild(textarea);
      
          // Добавление элементов в .filterslist
          filtersList.appendChild(resetButton);
          filtersList.appendChild(allFGroups);
          filtersList.appendChild(finder);
      }
      
      // Функция переключения состояния фильтра
      function toggleFilter(filterElement) {
          if (filterElement.classList.contains('ishow')) {
              filterElement.classList.remove('ishow');
              filterElement.classList.add('ihide');
          } else if (filterElement.classList.contains('ihide')) {
              filterElement.classList.remove('ihide');
          } else {
              filterElement.classList.add('ishow');
          }
          applyFilters();
      }
      
      // Функция применения фильтров
      function applyFilters() {
          const activeFilters = {};
          const groups = ['fgroup1', 'fgroup2', 'fgroup3', 'fgroup4'];
      
          groups.forEach(group => {
              activeFilters[group] = {
                  show: [],
                  hide: []
              };
      
              document.querySelectorAll(`.${group} li`).forEach(item => {
                  if (item.classList.contains('ishow')) {
                      activeFilters[group].show.push(item.classList[0]);
                  } else if (item.classList.contains('ihide')) {
                      activeFilters[group].hide.push(item.classList[0]);
                  }
              });
          });
      
          // Применение фильтров к ul (fgroup1)
          document.querySelectorAll(`.${tofilter} > ul`).forEach(ul => {
              const monthClass = Array.from(ul.classList).find(cls => Object.values(fgroup1).includes(cls));
      
              if (monthClass) {
                  if (activeFilters.fgroup1.hide.includes(monthClass)) {
                      ul.style.display = 'none';
                  } else if (activeFilters.fgroup1.show.length > 0) {
                      if (activeFilters.fgroup1.show.includes(monthClass)) {
                          ul.style.display = 'block';
                      } else {
                          ul.style.display = 'none';
                      }
                  } else {
                      ul.style.display = '';
                  }
              }
          });
      
          // Применение фильтров к li
          document.querySelectorAll(`.${tofilter} > ul`).forEach(ul => {
              if (ul.style.display === 'none') return;
      
              ul.querySelectorAll('li').forEach(li => {
                  let show = true;
      
                  for (const group of ['fgroup2', 'fgroup3', 'fgroup4']) {
                      const classes = Array.from(li.classList);
      
                      if (activeFilters[group].hide.some(cls => classes.includes(cls))) {
                          show = false;
                      }
      
                      if (activeFilters[group].show.length > 0 && !activeFilters[group].show.some(cls => classes.includes(cls))) {
                          show = false;
                      }
                  }
      
                  li.style.display = show ? '' : 'none';
              });
      
              if (ul.style.display !== 'none' && Array.from(ul.querySelectorAll('li')).every(li => li.style.display === 'none')) {
                  ul.style.display = 'none';
              }
          });
      }
      
      // Функция фильтрации по поиску
      function filterBySearch(query) {
          if (!query.trim()) {
              document.querySelectorAll(`.${tofilter} li`).forEach(li => li.style.display = '');
              return;
          }
      
          query = query.toLowerCase();
          document.querySelectorAll(`.${tofilter} li`).forEach(li => {
              const text = li.textContent.toLowerCase();
              li.style.display = text.includes(query) ? '' : 'none';
          });
      
          document.querySelectorAll(`.${tofilter} > ul`).forEach(ul => {
              if (Array.from(ul.querySelectorAll('li')).every(li => li.style.display === 'none')) {
                  ul.style.display = 'none';
              } else {
                  ul.style.display = '';
              }
          });
      }
      
      // Функция сброса фильтров
      window.resetFilters = function () {
          document.querySelectorAll('.allfgroups li').forEach(li => {
              if (li.closest('.fgroup4')) {
                  if (!li.classList.contains('ihide')) {
                      li.classList.remove('ishow');
                      li.classList.add('ihide');
                  }
              } else {
                  li.classList.remove('ishow', 'ihide');
              }
          });
      
          document.querySelectorAll(`.${tofilter} ul, .${tofilter} li`).forEach(el => el.style.display = '');
          applyFilters();
      };
      
      // Применение начальных фильтров из fgroup4 при загрузке страницы
      function applyInitialFilters() {
          if (!isChronologyUpdated) {
              console.warn("Элементы для фильтрации еще не созданы. Ожидаю завершения обновления хронологии...");
              return;
          }
      
          // Проверяем, существуют ли элементы fgroup4 с классом ihide
          const initialFilters = Array.from(document.querySelectorAll('.fgroup4 li.ihide')).map(li => li.classList[0]);
          if (initialFilters.length === 0) {
              console.warn("Нет активных фильтров в группе fgroup4 с состоянием ihide. Повторная попытка через 100мс...");
              setTimeout(applyInitialFilters, 100); // Повторяем попытку через 100мс
              return;
          }
      
          const targetContainer = document.querySelector(`.${tofilter}`);
          if (!targetContainer) {
              console.warn("Контейнер для фильтрации (.allchrono) не найден.");
              return;
          }
      
          const filterableElements = document.querySelectorAll(`.${tofilter} li`);
          if (filterableElements.length === 0) {
              console.warn("Элементы для фильтрации (.allchrono li) не найдены.");
              return;
          }
      
          let filteredItems = 0;
          filterableElements.forEach(li => {
              if (initialFilters.some(cls => li.classList.contains(cls))) {
                  li.style.display = 'none';
                  filteredItems++;
              }
          });
      
          if (filteredItems === 0) {
              console.warn("Нет элементов, соответствующих фильтрам fgroup4 с состоянием ihide.");
          } else {
              console.log(`${filteredItems} элементов скрыто по начальным фильтрам fgroup4.`);
          }
      
          const filterableULs = document.querySelectorAll(`.${tofilter} > ul`);
          if (filterableULs.length === 0) {
              console.warn("Элементы для фильтрации (.allchrono > ul) не найдены.");
              return;
          }
      
          filterableULs.forEach(ul => {
              if (Array.from(ul.querySelectorAll('li')).every(li => li.style.display === 'none')) {
                  ul.style.display = 'none';
              }
          });
      }
      
      // Функция для отслеживания завершения обновления хронологии
      function onChronologyUpdated() {
          isChronologyUpdated = true;
          console.log("Хронология успешно обновлена!");
          applyInitialFilters(); // Применяем фильтры после обновления хронологии
      }
      
      // Инициализация фильтров
      document.addEventListener("DOMContentLoaded", () => {
          initializeFilters();
      
      });
      </script>

      0

      3

      Код:
      document.addEventListener("DOMContentLoaded", function() {
          // Проверяем, что мы на странице профиля
          const title = document.title;
          if (!title.startsWith('Профиль:')) {
              console.log('Скрипт не запущен: текущая страница не является страницей профиля.');
              return;
          }
      
          console.log('Скрипт запущен на странице профиля.');
      
          const profileLeft = document.getElementById('profile-left');
          const profileRight = document.getElementById('profile-right');
      
          if (!profileLeft || !profileRight) {
              console.error('Элементы profile-left или profile-right не найдены. Скрипт завершает работу.');
              return;
          }
      
          // Создаем новую структуру профиля
          const newProfile = document.createElement('div');
          newProfile.className = 'post-author';
      
          const ul = document.createElement('ul');
          newProfile.appendChild(ul);
      
          // Функция для добавления элементов в новый профиль
          function addFieldToProfile(fieldId, className) {
              const field = document.getElementById(fieldId);
              if (field) {
                  console.log(`Добавление поля: ${fieldId}`);
                  const li = document.createElement('li');
                  li.className = className;
      
                  const span = document.createElement('span');
                  span.className = 'fld-name';
                  span.textContent = field.querySelector('span')?.textContent + ': ';
                  li.appendChild(span);
      
                  const value = field.querySelector('strong') || field.querySelector('.lz') || field.querySelector('img');
                  if (value) {
                      li.appendChild(value.cloneNode(true));
                  }
      
                  ul.appendChild(li);
      
                  // Удаляем элемент из profile-right только если он не в списке исключений
                  if (!['pa-register-date', 'pa-email', 'pa-posts'].includes(fieldId)) {
                      field.remove(); // Удаляем из правой части
                  }
              } else {
                  console.warn(`Поле ${fieldId} не найдено и пропущено.`);
              }
          }
      
          // Добавляем поля в новый профиль
          addFieldToProfile('pa-fld6', 'pa-fld6'); // фоны
          addFieldToProfile('profile-name', 'pa-author'); // Автор
          addFieldToProfile('profile-title', 'pa-title'); // Звание
          addFieldToProfile('pa-avatar', 'pa-avatar item2'); // Аватар
      
          // Для личной информации (лз) нужна особая обработка
          const lzField = document.getElementById('pa-fld2');
          if (lzField) {
              console.log('Добавление поля: pa-fld2 (лз)');
              const li = document.createElement('li');
              li.className = 'pa-fld2';
      
              const span = document.createElement('span');
              span.className = 'fld-name';
              span.textContent = 'лз: ';
              li.appendChild(span);
      
              const lzContent = lzField.querySelector('.lz');
              if (lzContent) {
                  li.appendChild(lzContent.cloneNode(true));
              }
      
              ul.appendChild(li);
      
              // Удаляем поле из profile-right только если оно не в списке исключений
              if (!['pa-register-date', 'pa-email', 'pa-posts', 'pa-time-visit', 'pa-last-post', 'pa-last-visit',].includes(lzField.id)) {
                  lzField.remove(); // Удаляем из правой части
              }
          } else {
              console.warn('Поле pa-fld2 (лз) не найдено и пропущено.');
          }
      
          // Добавляем остальные поля
          addFieldToProfile('pa-fld3', 'pa-fld3'); // абилка
          addFieldToProfile('pa-respect', 'pa-respect'); // Репутация
          addFieldToProfile('pa-fld1', 'pa-fld1'); // Посты
          addFieldToProfile('pa-fld4', 'pa-fld4'); // Деняк
          addFieldToProfile('pa-fld5', 'pa-fld5'); // Плашка
      
          // Очищаем содержимое profile-left и добавляем новый профиль
          profileLeft.innerHTML = '';
          profileLeft.appendChild(newProfile);
      
          // Удаляем ненужные элементы из profile-right, игнорируя исключения
          const fieldsToRemove = ['pa-invites', 'pa-time-visit', 'pa-positive', 'pa-last-post', 'pa-last-visit'];
          fieldsToRemove.forEach(id => {
              const field = document.getElementById(id);
              if (field) {
                  console.log(`Удаление поля: ${id}`);
                  field.remove();
              } else {
                  console.warn(`Поле ${id} не найдено и пропущено.`);
              }
          });
      
          console.log('Скрипт успешно выполнен.');
      });

      переработка профиля

      0

      4

      Код:
      <!-- Смена стиля, (с) ForumD.ru, satsana -->
      <script type="text/javascript">
      var styleList = [{
          class: 'green one',
          name: 'green v.1'
      }, 
       {
          class: 'green two',
          name: 'green v.2'
      }, 
       {
          class: 'blue one',
          name: 'blue v.1'
      },
      {
          class: 'blue two',
          name: 'blue v.2'
      }];
      
      function getCookie(a){return(a=document.cookie.match(new RegExp("(?:^|; )"+a.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g,"\\$1")+"=([^;]*)")))?decodeURIComponent(a[1]):void 0}function setStyle(a){$("body").attr("class",a);$("#stylelist li").removeClass("active");$('#stylelist li[data="'+a+'"]').addClass("active");selStyle=a;document.cookie="selStyle="+a+"; max-age=2592000"}var selStyle=getCookie("selStyle");selStyle&&setStyle(selStyle);
      $(document).pun_mainReady(function(){$("#stylelist").length||$("body").prepend('<ul id="stylelist"></ul>');for(i=0;i<styleList.length;i++)$("#stylelist").append('<li data="'+styleList[i]["class"]+'"'+(selStyle==styleList[i]["class"]?' class="active"':"")+'><a href="/" onclick="setStyle($(this.parentNode).attr(\'data\'));return false">'+styleList[i].name+"</a></li>")});
      </script> 
      <!-------------------------- Смена стиля - END ---------------------------->
      
      <!---------------------------- переключатель2 ---------------------------->
      
      <!-- Смена стиля, (с) ForumD.ru, satsana -->
      <script type="text/javascript">
      var stoleList = [{
          class: 'day',
          name: 'day'
      }, 
       {
          class: 'night',
          name: 'night'
      }];
      
      function getCookie(a){return(a=document.cookie.match(new RegExp("(?:^|; )"+a.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g,"\\$1")+"=([^;]*)")))?decodeURIComponent(a[1]):void 0}function setStole(a){$("html").attr("class",a);$("#stolelist li").removeClass("active");$('#stolelist li[data="'+a+'"]').addClass("active");selStole=a;document.cookie="selStole="+a+"; max-age=2592000"}var selStole=getCookie("selStole");selStole&&setStole(selStole);
      $(document).pun_mainReady(function(){$("#stolelist").length||$("html").prepend('<ul id="stolelist"></ul>');for(i=0;i<stoleList.length;i++)$("#stolelist").append('<li data="'+stoleList[i]["class"]+'"'+(selStole==stoleList[i]["class"]?' class="active"':"")+'><a href="/" onclick="setStole($(this.parentNode).attr(\'data\'));return false">'+stoleList[i].name+"</a></li>")});
      </script> 
      <!-------------------------- Смена стиля - END ---------------------------->

      0


      Вы здесь » hngrave1 » Тестовый форум » фильтры до чистки


      Рейтинг форумов | Создать форум бесплатно