HTML-верх
Код:
<!------------------------------------ НАЧАЛО ТАБЛИЦЫ -------------------------------------------> <t> <t_env></t_env> <t_cap></t_cap> <t_frog></t_frog><t_card></t_card> <t_ttl><p>crystal</p>cage</t_ttl> <t_set>Wizarding World 18+, 1980, июнь-июль</t_set> <!------------ лучший пост ------------> <t_post> <t_ph>классный пост</t_ph> <a href='https://crystalcage.rusff.me/viewtopic.php?id=76#p1536' target="_blank">Антонин Долохов</a> <p>Каждый твой будущий провал станет их вечным клеймом. рука не должна дрогнуть. не дрожала тогда и никогда не усомнится впредь. чувство вины давно стерлось из твоего словаря. слова табу пополнили фолиант мерзких ярлыков. тяжелые шаги сопровождаются образами смутного "завтра".</p> </t_post> <!------------ лучший эпизод -----------> <t_ep> <p>классный эпизод</p> <a href='https://crystalcage.rusff.me/viewtopic.php?id=75' target="_blank">This room is so suffocating</a> </t_ep> <!------------ постописцы ------------> <div class="t_wanted_c"> <t_head>постописцы</t_head> <a href="https://crystalcage.rusff.me/profile.php?id=19" data-text="Реджи"><img src="https://forumupload.ru/uploads/001c/76/cd/3/387509.jpg" /></a> <a href="https://crystalcage.rusff.me/profile.php?id=21" data-text="Тони"><img src="https://forumupload.ru/uploads/001c/76/cd/3/381636.jpg" /></a> <a href="https://crystalcage.rusff.me/" data-text="Жон Доу"><img src="https://forumstatic.ru/files/001c/44/10/21763.png" style="width:44px; " /></a> </div> <!------------ активисты ------------> <div class="t_wanted_c"> <t_head>активисты</t_head> <a href="https://crystalcage.rusff.me/profile.php?id=19" data-text="Панда"><img src="https://forumupload.ru/uploads/001c/76/cd/3/628509.jpg" /></a> <a href="https://crystalcage.rusff.me/profile.php?id=22" data-text="Пророчица"><img src="https://forumupload.ru/uploads/001c/76/cd/3/397834.jpg" /></a> <a href="https://crystalcage.rusff.me/profile.php?id=21" data-text="Тони"><img src="https://forumupload.ru/uploads/001c/76/cd/3/381636.jpg" /></a> </div> </t> <!------------ навигация 1------------> <div class="spirit-navigation" id="navig-batton">каминная сеть</div> <div id="navigblock" style="display:none"> <div class="sslka"> <a href="https://crystalcage.rusff.me/viewtopic.php?id=56">Гостевая</a> <a href="https://crystalcage.rusff.me/viewtopic.php?id=4">Правила</a> <a href="https://crystalcage.rusff.me/viewtopic.php?id=2">Сюжет</a> <a href="https://crystalcage.rusff.me/viewtopic.php?id=6">Роли и внешности</a> <a href="https://crystalcage.rusff.me/viewtopic.php?id=10">Биржа труда</a> <a href="https://crystalcage.rusff.me/viewtopic.php?id=9">Хронология</a> <a href="https://crystalcage.rusff.me/viewtopic.php?id=42">Связь с АМС</a> </div> </div> <!----- конец навигации 1 -----> <! ------------------ скрипт навигации (2) [основа рено, переработка вещего духа] ---------------> <script type="text/javascript" src="https://forumstatic.ru/files/001c/30/dc/86760.js"></script> <! -------------------------------------конец скрипта навигации ---------------------------------> <!------------------------------------ КОНЕЦ ТАБЛИЦЫ -------------------------------------------> <!----------------------------------------- очередность -------------------------------------------------> <div id="slideout"> <div id="slideout_inner"><div id="slideout_inner_textarea"> <br><br><br> <div class="ochered"> <left>квестовая очередность</left><br><br> <a href="https://crystalcage.rusff.me/viewtopic.php?id=35">Идет запись</a> </div> </div></div></div> <!-----------------------------------------конец очередности -------------------------------------------> <!---------------------------- основной шрифт ----------------------------> <style> @import url('https://fonts.googleapis.com/css2?family=Bebas+Neue&family=Mulish:ital,wght@0,200..1000;1,200..1000&family=Raleway:ital,wght@0,100..900;1,100..900&family=Yeseva+One&display=swap'); @import url('https://forumstatic.ru/files/001c/35/64/31260.otf'); @import url('https://fonts.googleapis.com/css2?family=Viaoda+Libre&display=swap'); @import url('https://fonts.googleapis.com/css2?family=Merriweather:ital,opsz,wght@0,18..144,300..900;1,18..144,300..900&display=swap'); </style> <!---------------------------- конец основного шрифта ----------------------------> <!---------------------------------// Быстроплюсы v.2 РЕНО by Deff //------------------------> <script type="text/javascript" src="https://forumstatic.ru/files/0012/d8/04/58219.js" addComment="1"></script> <!---------------------------------// конец быстроплюсы v.2 РЕНО by Deff //------------------------> <!------------------- Выделение кода в блоке "Код" // © Damassk, версия 2019г. ---------------------> <script type="text/javascript" src="https://forumstatic.ru/files/0016/4a/bf/98029.js"></script> <script>eval(select_text.toString().replace(/\}$/,'try{document.execCommand("copy")}catch(e){}}'))</script> <script type="text/javascript">select_text.linkText = 'скопировать код' //текст ссылки</script> <!------------------------------- конец выделения кода ------------------------------------> <!---------------------------- пиар-вход ----------------------------> <script src="https://forumstatic.ru/files/0015/c4/3f/26781.js"></script> <script type="text/javascript"> PR.nick = 'Spider'; //Ник PR-аккаунта PR.pass = 'PRacc'; //Пароль PR-аккаунта PR.btn_text = 'PR-вход'; //Надпись на кнопке PR-входа(или ссылка на картинку); PR.set();</script> <!---------------------------- конец пиар-входа ----------------------------> <!---------------------------- Быстрая смена аккаунта ----------------------------> <script type="text/javascript"> New_EXiT = 'https://forumstatic.ru/files/001c/51/c9/98994.png'; //Дополнительная Иконка выход; </script> <script data="367b65" src="https://forumstatic.ru/files/0014/cc/0a/93129.js"></script> <!----------------------------- скрытие профиля в теме тегом-----------------------------> <style type="text/css">.hideprofile .post-author,.hideprofile .pl-email,.hideprofile .pl-website{display:none!important} .hideprofile .post-body,.hideprofile .post-links,.hideprofile .post-links ul,.post.hideprofile h3>span{margin-left:0!important} .post.hideprofile h3 {display: flex;}</style> <script> FORUM.set('editor.addition.tags.hideprofile',{name:'Скрыть минипрофиль',onclick:function(){insert('[hideprofile]');}}); $().pun_mainReady(function(){$('.post:contains("[hideprofile]")').addClass('hideprofile').html(function(){return $(this).html().replace(/\[hideprofile\]/gim,'')})}); </script> <!-----------------------------конец скрытия профиля в теме тегом-----------------------------> <!-- ----------------------смена аватара в топике © Deff, Alex_63------------------------> <link rel="stylesheet" type="text/css" href="https://forumstatic.ru/files/0015/c4/3f/67168.css" /> <script type="text/javascript" src="https://forumstatic.ru/files/0015/c4/3f/67169.js"></script> <!-- ----------------------конец смены аватара в топике © Deff, Alex_63------------------------> <!-------------------------Убрать Закрыто и Важно---------------------------------------------------> <style>.stickytext,.closedatafield{ display:none;}</style> <!------------------------------------------- конец -----------------------------------------------------> <!------------------------------------------------- личная страница ------------------------------------> <script src="https://forumstatic.ru/files/0011/e9/e1/56920.js" type="text/javascript"></script> <!------------------------------------------------- личная страница ------------------------------------> <!—----------------- HTML в постах с допуском по группам © Alex_63 ----------------—> <script type="text/javascript" src="https://forumstatic.ru/files/0015/c4/3f/52361.js"></script> <script type="text/javascript"> HTMLinPost.groups = [1,2,3,4,5,6,7,8]; // Группы, допущенные к вставке HTML в посты HTMLinPost.parseHTMLinPosts() </script> <!—----------------- конец HTML в постах с допуском по группам © Alex_63 ----------------—> <!--- Хронология от Feathertail ---> <script> document.addEventListener("DOMContentLoaded", function () { // Получаем данные из div.chrono-state const chronoStateDiv = document.querySelector(".chrono-state"); if (!chronoStateDiv) { console.error("Не найден элемент .chrono-state"); return; } const chronoDataText = chronoStateDiv.textContent.trim(); let chronoData; try { chronoData = JSON.parse(chronoDataText); } catch (e) { console.error("Не удалось распарсить данные состояния:", e); return; } const currentYearStart = chronoData.currentYearStart; const episodesData = chronoData.episodes; const additionalFilters = chronoData.filterOptions; // Предопределенные фильтры const predefinedFilters = [ { value: "plot", label: "Сюжетные события" }, { value: "in-progress", label: "Эпизоды в процессе" }, { value: "unfinished", label: "Эпизоды-наследие" }, { value: "completed", label: "Завершённые эпизоды" }, ]; const allFilters = predefinedFilters.concat(additionalFilters); // Очищаем содержимое div.chrono-state chronoStateDiv.innerHTML = ""; // Создаём основной контейнер const chronoBody = document.createElement("div"); chronoBody.classList.add("chrono-body"); // Создаём фильтры const chronoDiv = document.createElement("div"); chronoDiv.classList.add("chrono"); const filterDetails = document.createElement("details"); filterDetails.setAttribute("open", ""); const filterSummary = document.createElement("summary"); const filterHeaderP = document.createElement("p"); filterHeaderP.id = "filter-header"; filterHeaderP.textContent = "Фильтр эпизодов и событий"; filterSummary.appendChild(filterHeaderP); const filterActionsDiv = document.createElement("div"); filterActionsDiv.classList.add("filter-actions"); const resetFiltersButton = document.createElement("button"); resetFiltersButton.id = "reset-filters"; resetFiltersButton.textContent = "Сбросить фильтры"; filterActionsDiv.appendChild(resetFiltersButton); filterSummary.appendChild(filterActionsDiv); filterDetails.appendChild(filterSummary); const episodeFilterDiv = document.createElement("div"); episodeFilterDiv.classList.add("episode-filter"); episodeFilterDiv.setAttribute("data-component", "filter"); function generateFilterOptions() { const includeFilters = document.createElement("ul"); includeFilters.id = "include-filters"; const includeFilterOptionsDiv = document.createElement("div"); includeFilterOptionsDiv.classList.add("filter-options"); const includeSpan = document.createElement("span"); includeSpan.textContent = "Показать:"; includeFilterOptionsDiv.appendChild(includeSpan); includeFilterOptionsDiv.appendChild(includeFilters); const excludeFilters = document.createElement("ul"); excludeFilters.id = "exclude-filters"; const excludeFilterOptionsDiv = document.createElement("div"); excludeFilterOptionsDiv.classList.add("filter-options", "exclude-options"); const excludeSpan = document.createElement("span"); excludeSpan.textContent = "Скрыть:"; excludeFilterOptionsDiv.appendChild(excludeSpan); excludeFilterOptionsDiv.appendChild(excludeFilters); allFilters.forEach((option) => { const includeLabel = createFilterLabel(option.value, option.label, "show"); includeFilters.appendChild(includeLabel); const excludeLabel = createFilterLabel(option.value, option.label, "hide"); excludeFilters.appendChild(excludeLabel); }); episodeFilterDiv.appendChild(includeFilterOptionsDiv); episodeFilterDiv.appendChild(excludeFilterOptionsDiv); const filterSearchDiv = document.createElement("div"); filterSearchDiv.classList.add("filter-search"); const searchLabel = document.createElement("label"); searchLabel.innerHTML = "Поиск:<br />"; const searchInput = document.createElement("input"); searchInput.type = "text"; searchInput.id = "search-input"; searchInput.placeholder = "Введите текст для поиска..."; searchLabel.appendChild(searchInput); filterSearchDiv.appendChild(searchLabel); episodeFilterDiv.appendChild(filterSearchDiv); } function createFilterLabel(value, labelText, filterType) { const li = document.createElement("li"); const label = document.createElement("label"); const input = document.createElement("input"); input.type = "checkbox"; input.value = value; input.dataset.filter = filterType; label.appendChild(input); label.appendChild(document.createTextNode(" " + labelText)); li.appendChild(label); return li; } generateFilterOptions(); filterDetails.appendChild(episodeFilterDiv); chronoDiv.appendChild(filterDetails); // Создаём контейнер для эпизодов const episodeTimelineDiv = document.createElement("div"); episodeTimelineDiv.classList.add("episode-timeline"); episodeTimelineDiv.setAttribute("data-component", "timeline"); chronoDiv.appendChild(episodeTimelineDiv); chronoBody.appendChild(chronoDiv); // Создаём форму для добавления эпизодов const episodeFormContainer = document.createElement("div"); episodeFormContainer.classList.add("episode-form-container"); const detailsElement = document.createElement("details"); const summaryElement = document.createElement("summary"); const generatorHeaderP = document.createElement("p"); generatorHeaderP.id = "generator-header"; generatorHeaderP.textContent = "Добавить новый эпизод"; summaryElement.appendChild(generatorHeaderP); detailsElement.appendChild(summaryElement); const episodeForm = document.createElement("form"); episodeForm.id = "episode-form"; function createFormGroup(labelText, inputElement) { const formGroup = document.createElement("div"); formGroup.classList.add("form-group"); const label = document.createElement("label"); label.textContent = labelText; label.htmlFor = inputElement.id; formGroup.appendChild(label); formGroup.appendChild(inputElement); return formGroup; } // Поля формы // Название эпизода const titleInput = document.createElement("input"); titleInput.type = "text"; titleInput.id = "episode-title"; titleInput.name = "episode-title"; titleInput.required = true; const titleFormGroup = createFormGroup("Название эпизода*:", titleInput); episodeForm.appendChild(titleFormGroup); // Дата const dateInput = document.createElement("input"); dateInput.type = "date"; dateInput.id = "episode-date"; dateInput.name = "episode-date"; dateInput.required = true; const dateFormGroup = createFormGroup("Дата (ДД-ММ-ГГГГ)*:", dateInput); episodeForm.appendChild(dateFormGroup); // Описание const descriptionTextarea = document.createElement("textarea"); descriptionTextarea.id = "episode-description"; descriptionTextarea.name = "episode-description"; descriptionTextarea.required = true; const descriptionFormGroup = createFormGroup("Описание*:", descriptionTextarea); episodeForm.appendChild(descriptionFormGroup); // Ссылка const linkInput = document.createElement("input"); linkInput.type = "url"; linkInput.id = "episode-link"; linkInput.name = "episode-link"; const linkFormGroup = createFormGroup("Ссылка:", linkInput); episodeForm.appendChild(linkFormGroup); // Участники const authorsInput = document.createElement("input"); authorsInput.type = "text"; authorsInput.id = "episode-authors"; authorsInput.name = "episode-authors"; authorsInput.placeholder = "Введите имена участников, разделённые запятыми, на латинице (eng)"; authorsInput.required = true; const authorsFormGroup = createFormGroup("Участники*:", authorsInput); episodeForm.appendChild(authorsFormGroup); // Статус эпизода (обязательно выбрать один) const statusFormGroup = document.createElement("div"); statusFormGroup.classList.add("form-group"); const statusLabel = document.createElement("span"); statusLabel.textContent = "Статус эпизода*:"; statusFormGroup.appendChild(statusLabel); predefinedFilters.slice(1).forEach((option) => { // slice(1) to skip "plot" const label = document.createElement("label"); const input = document.createElement("input"); input.type = "radio"; input.value = option.value; input.name = "status"; input.required = true; label.appendChild(input); label.appendChild(document.createTextNode(" " + option.label)); statusFormGroup.appendChild(label); }); episodeForm.appendChild(statusFormGroup); // Сюжетный эпизод (plot) - checkbox const plotFormGroup = document.createElement("div"); plotFormGroup.classList.add("form-group"); const plotLabel = document.createElement("label"); const plotInput = document.createElement("input"); plotInput.type = "checkbox"; plotInput.id = "plot-checkbox"; plotInput.name = "plot"; plotLabel.appendChild(plotInput); plotLabel.appendChild(document.createTextNode(" Сюжетный эпизод")); plotFormGroup.appendChild(plotLabel); episodeForm.appendChild(plotFormGroup); // // Локация - выбрать одну из дополнительных категорий // const locationFormGroup = document.createElement("div"); // locationFormGroup.classList.add("form-group"); // const locationLabel = document.createElement("span"); // locationLabel.textContent = "Метки*:"; // locationFormGroup.appendChild(locationLabel); // additionalFilters.forEach((option) => { // const label = document.createElement("label"); // const input = document.createElement("input"); // input.type = "radio"; // input.value = option.value; // input.name = "location"; // input.required = false; // label.appendChild(input); // label.appendChild(document.createTextNode(" " + option.label)); // locationFormGroup.appendChild(label); // }); // episodeForm.appendChild(locationFormGroup); // Метки- выбрать одну или несколько дополнительных категорий const locationFormGroup = document.createElement("div"); locationFormGroup.classList.add("form-group"); const locationLabel = document.createElement("span"); locationLabel.textContent = "Метки* (можно выбрать несколько):"; locationFormGroup.appendChild(locationLabel); additionalFilters.forEach((option) => { const label = document.createElement("label"); const input = document.createElement("input"); input.type = "checkbox"; input.value = option.value; input.name = "location"; input.required = false; // убрано требование обязательного выбора хотя бы одной label.appendChild(input); label.appendChild(document.createTextNode(" " + option.label)); locationFormGroup.appendChild(label); }); episodeForm.appendChild(locationFormGroup); // Кнопка отправки const submitFormGroup = document.createElement("div"); submitFormGroup.classList.add("form-group"); const submitButton = document.createElement("button"); submitButton.type = "submit"; submitButton.textContent = "Сгенерировать код эпизода"; submitFormGroup.appendChild(submitButton); episodeForm.appendChild(submitFormGroup); detailsElement.appendChild(episodeForm); // Контейнер для сгенерированного кода const generatedCodeContainer = document.createElement("div"); generatedCodeContainer.classList.add("generated-code-container"); const generatedCodeLabel = document.createElement("label"); generatedCodeLabel.setAttribute("for", "generated-code"); generatedCodeLabel.textContent = "Сгенерированный код эпизода:"; generatedCodeContainer.appendChild(generatedCodeLabel); const generatedCodeTextarea = document.createElement("textarea"); generatedCodeTextarea.id = "generated-code"; generatedCodeTextarea.setAttribute("readonly", ""); generatedCodeContainer.appendChild(generatedCodeTextarea); const copyCodeButton = document.createElement("button"); copyCodeButton.id = "copy-code-button"; copyCodeButton.textContent = "Скопировать код"; generatedCodeContainer.appendChild(copyCodeButton); detailsElement.appendChild(generatedCodeContainer); episodeFormContainer.appendChild(detailsElement); // Добавляем всё в chronoBody chronoBody.appendChild(episodeFormContainer); // Добавляем chronoBody в chronoStateDiv chronoStateDiv.appendChild(chronoBody); // Создание элементов эпизодов function createEpisodeElement(data) { const li = document.createElement("li"); li.classList.add("episode-item"); li.dataset.category = data.categories.join(" "); li.dataset.date = data.date; const divHeader = document.createElement("div"); divHeader.classList.add("episode-header"); const divLine1 = document.createElement("div"); divLine1.classList.add("episode-line-1"); const daySpan = document.createElement("span"); daySpan.classList.add("episode-day"); const dateObj = new Date(data.date); const day = dateObj.getDate().toString().padStart(2, "0"); daySpan.textContent = day; const titleLink = document.createElement("a"); titleLink.href = data.link || "#"; titleLink.classList.add("episode-title"); titleLink.textContent = data.title; divLine1.appendChild(daySpan); divLine1.appendChild(titleLink); const descriptionP = document.createElement("p"); descriptionP.textContent = data.description; const authorsP = document.createElement("p"); authorsP.innerHTML = `<b>Участники:</b> ${data.authors}`; divHeader.appendChild(divLine1); divHeader.appendChild(descriptionP); divHeader.appendChild(authorsP); li.appendChild(divHeader); return li; } const episodes = episodesData.map((data) => { const episodeElement = createEpisodeElement(data); const date = new Date(data.date); return { element: episodeElement, date: date }; }); episodes.sort((a, b) => a.date - b.date); const pastEvents = episodes.filter( (ep) => ep.date.getFullYear() < currentYearStart ); const currentEvents = episodes.filter( (ep) => ep.date.getFullYear() >= currentYearStart ); function groupByMonthAndYear(episodes) { return episodes.reduce((groups, ep) => { const monthYear = ep.date.toLocaleString("ru", { month: "long", year: "numeric", }); if (!groups[monthYear]) groups[monthYear] = []; groups[monthYear].push(ep); return groups; }, {}); } function buildTimelineSection(sectionClass, episodes, periodLabel) { const section = document.createElement("section"); section.classList.add("timeline-period", sectionClass); const periodSpan = document.createElement("span"); if (periodLabel === "Прошлое") { periodSpan.classList.add("past-label", "period-label-text"); } else if (periodLabel === "Настоящее") { periodSpan.classList.add("current-label", "period-label-text"); } const periodParagraph = document.createElement("p"); periodParagraph.textContent = periodLabel; periodSpan.appendChild(periodParagraph); section.appendChild(periodSpan); const monthYearGroups = groupByMonthAndYear(episodes); Object.entries(monthYearGroups).forEach(([monthYear, eps]) => { const div = document.createElement("div"); div.classList.add("timeline-date"); div.textContent = monthYear.charAt(0).toUpperCase() + monthYear.slice(1); const ul = document.createElement("ul"); ul.classList.add("episode-list"); eps.forEach((ep) => { ul.appendChild(ep.element); }); section.appendChild(div); section.appendChild(ul); }); episodeTimelineDiv.appendChild(section); } episodeTimelineDiv.innerHTML = ""; buildTimelineSection("past-events", pastEvents, "Прошлое"); buildTimelineSection("current-events", currentEvents, "Настоящее"); // Фильтрация const allCheckboxes = document.querySelectorAll( '.filter-options input[type="checkbox"]' ); const resetButton = resetFiltersButton; const searchInput = document.getElementById("search-input"); function applyFilters() { const showValues = Array.from( document.querySelectorAll('input[data-filter="show"]:checked') ).map((cb) => cb.value); const hideValues = Array.from( document.querySelectorAll('input[data-filter="hide"]:checked') ).map((cb) => cb.value); const searchText = searchInput.value.trim().toLowerCase(); document.querySelectorAll(".episode-item").forEach((episode) => { const categories = episode.dataset.category ? episode.dataset.category.split(" ") : []; const shouldShow = showValues.length === 0 || showValues.some((value) => categories.includes(value)); const shouldHide = hideValues.some((value) => categories.includes(value) ); const matchesSearch = !searchText || episode.textContent.toLowerCase().includes(searchText); episode.classList.toggle( "hidden", !(shouldShow && !shouldHide && matchesSearch) ); }); } episodeTimelineDiv.addEventListener("click", function (e) { const episodeItem = e.target.closest(".episode-item"); if (episodeItem && !e.target.closest(".episode-title")) { episodeItem.classList.toggle("show-description"); } }); allCheckboxes.forEach((cb) => cb.addEventListener("change", applyFilters)); searchInput.addEventListener("input", applyFilters); resetButton.addEventListener("click", () => { allCheckboxes.forEach((cb) => (cb.checked = false)); searchInput.value = ""; applyFilters(); }); applyFilters(); // Обработка формы episodeForm.addEventListener("submit", function (e) { e.preventDefault(); const date = document.getElementById("episode-date").value; const title = document.getElementById("episode-title").value.trim(); const description = document .getElementById("episode-description") .value.trim(); const link = document.getElementById("episode-link").value.trim(); const authors = document.getElementById("episode-authors").value.trim(); // Получаем статус const statusInput = document.querySelector('input[name="status"]:checked'); if (!statusInput) { alert("Пожалуйста, выберите статус эпизода."); return; } const status = statusInput.value; // Получаем значение plot const plotCheckbox = document.getElementById("plot-checkbox"); const isPlot = plotCheckbox.checked; // Получаем все выбранные локации const locationInputs = document.querySelectorAll('input[name="location"]:checked'); //if (locationInputs.length === 0) { // alert("Пожалуйста, выберите хотя бы одну метку эпизода."); // return; //} const locations = Array.from(locationInputs).map(input => input.value); if (!authors) { alert("Пожалуйста, введите имена участников."); return; } const categories = [status, ...locations]; if (isPlot) { categories.push("plot"); } const episodeObject = { title: title, date: date, description: description, link: link, authors: authors, categories: categories, }; const episodeJSON = JSON.stringify(episodeObject, null, 2); generatedCodeTextarea.value = episodeJSON; }); copyCodeButton.addEventListener("click", function () { generatedCodeTextarea.select(); document.execCommand("copy"); alert("Код скопирован в буфер обмена!"); }); }); </script> <!-- Cчётчик Игровых постов --> <script type="text/javascript"> /*************************** Настройки! ***************************/ FORUM._NUMpa_fld = 5; // Номер.Доп.поля, FORUM._color_fld = "inherit"; // Цвет шрифта, FORUM.includeFirstPost = 0; // 0 - не учитывать,1 - учитывать Первопост автора в игровых темах, FORUM.AddOrSlash = 0; //0 - Поле отдельно, 1 - через слешь c общ. числом сообщений, FORUM.Number_winners = [7,[1]]; // Начальное Число отображаемых юзеров в таблице и список форумов показа; FORUM.Subscription_Code = "f87f9524f52b3f15cd458b2bf2a95a906ca5a960"; //Код подписки!!; /**** НАСТРОЙКА Игровых локаций ****/ function ad_ (){/*!~!FORUM.ForArrAy = { //Форум //Темы (включаемые, или исключаемые) f11 :-[0], //Квест-раздел f10 :-[0], //Линяки f9 :-[0], //АУ f12 :-[0], //Архив, доиграно f20 :-[0], //архив ау f18 :-[0] //Архив эпизодов //Последний элемент без запятой! } !~!*/}ad_ = ad_.toString().split('!~!')[1];//alert(ad_); </script> <script type="text/javascript" src="https://forumstatic.ru/files/0013/44/56/77707.js"></script> <style>.Form-Table{}.punbb .table_GamePosts tbody th{text-align: center;color:#fff} #pre_placement>a {top:3px;right:2px;z-index:100}.punbb .GamePst{padding:0!important;} .punbb #profile-right li#pa-fld1 strong.GamePst2 {}</style> <!--//END Cчётчик Игровых постов © Deff--> <!-- НАЧАЛО. скрытие подфорума --> <script language="JavaScript"> str=document.URL if(str.substring(str.lastIndexOf('/')+1)=="" || str.substring(str.lastIndexOf('/')+1)=="index.php") document.write("<style>#forum_f12, #forum_f20, #forum_f18 {display:none!important;}</style>") </script> <!-- КОНЕЦ. скрытие подфорума --> <!------------------------------------------ ОТКЛЮЧЕНИЕ ФУНКЦИЙ И КНОПОК -------------------------------> <!--Отключить кнопку "Жалоба" --> <script type="text/javascript"> RusffCore.sets.show_reportBtn = 0; </script> <!--Отключить функцию "Поделиться" --> <script type="text/javascript"> RusffCore.sets.share = false; </script> <!--Отключить функцию "Вложения" --> <script type="text/javascript"> RusffCore.sets.files.button = false; </script> <!--Отключить функцию "Это интересно" --> <script type="text/javascript"> rusffLive.enable = false; </script> <!--Отключить функцию "Реакция" --> <script> ReactionsPlugin.setConfig({ disable: true }); </script> <!--Список просматривающих тему --> <script> RusffCore.sets.realtimeTopicReaders = false </script> <!------------------------- Мгновенные уведомления © Alex_63, Deff 2019 ------------------------> <link rel="stylesheet" type="text/css" href="//forumstatic.ru/f/ru/bestbb/notifications.css" /> <style>.punbb #pun-main .pun-modal.unread-notifications .section h2{text-align:center!important} /*.pun-modal.unread-notifications .modal-inner.section {background: rgba(228, 228, 228, 0.92)!important;*/} </style> <script type="text/javascript" src="//forumstatic.ru/f/ru/bestbb/notifications.js"></script> <!--+ Мгновенные уведомления: упоминания © Alex_63, 2020 --> <script>notifications.load('mentions');</script> <!--+ Мгновенные уведомления: комментарии к репутации без переадресации Alex_63, 2019--> <script>notifications.load('reputation');</script> <!--+ Мгновенные уведомления: подписки на форум/тему © Alex_63, 2019 --> <script>notifications.load('subscriptions');</script> <!--+ Мгновенные уведомления: новые посты из важных тем © Alex_63, 2019 --> <script type="text/javascript"> notifications.load('common', {}); notifications.load('important', {topics: [5,43]}); // ID важных тем (через запятую) </script> <!------------------------------------------ ВЫРАВНИВАНИЕ ПО ШИРИНЕ ---------------------------------------> <script type="text/javascript"> $(document).ready(function(){ $("#post #button-center").after('<td id=button-justify align=center valign=center><img onclick="bbcode(\'[align=justify]\',\'[/align]\')" src="/i/blank.gif"/></td>');}); </script> <!-- Инструмент для добавления bb-кодов --> <script src="https://mybb.kozhilya.ru/script/mybbcode.min.js"></script> <!-- END Инструмент для добавления bb-кодов -->
HTML-низ
Код:
<!-------------------------- всплывающее окно контент от 18 лет --------------------------> <link rel="stylesheet" href="https://forumstatic.ru/files/001c/76/cd/12176.css?v=2" /> <script type="text/javascript" src="https://forumstatic.ru/files/001c/76/cd/10828.js?v=2"></script> <!-------------------------- копирайт --------------------------> <a class="cop" href="https://imagiart.ru/viewtopic.php?id=19438#p1326422">mrazeus + rae rae</a> <!------------------------------------------- баннеры --------------------------------------------> <div class="banners"> <a href="https://imagiart.ru/" class="static" target="_blank"> <img src="https://i.imgur.com/h3ba1GC.gif" title="photoshop: Renaissance" border="0" alt="photoshop: Renaissance"></a> <a href="https://ragepage.rusff.me/" target="_blank"><img src="https://i.ibb.co/DPMKDkjq/Frame-96.png" title="rage; marauders :: 1982"></a> <a href="https://darkesttimes.rusff.me/"><img src="https://forumstatic.ru/files/001c/59/e0/40310.png" title="ГП-2, ужасы, детектив"></a> <a href="https://mmaleficarum.rusff.me/" target="_blank"><img src="https://forumstatic.ru/files/001c/3b/dd/41582.png"title="malleus maleficarum"border="0"width="88" height="31"></a> <a href="https://mayak.f-rpg.me/?utm_medium=banner88forum"><img src="https://forumstatic.ru/files/001b/ff/2a/15151.png" title="Маяк. Сообщество ролевиков, дизайнеров и графистов" alt="Маяк. Сообщество ролевиков, дизайнеров и графистов"></a> <a href="https://happyhouse.rusff.me/"><img src="https://forumupload.ru/uploads/001c/52/80/5/764708.jpg"></a> <a href="https://godstrust.rusff.me//" title="in gods we trust. боговник" target="_blank"><img src="https://forumstatic.ru/files/001c/38/7d/49106.png"></a> <a href="https://meethope.ru/"><img src="https://forumstatic.ru/files/001c/42/be/39857.gif" title="Hope County"></a> <a href="https://karma.f-rpg.me/" target="_blank"><img src="https://forumupload.ru/uploads/001c/14/5b/7/124634.png" title="karma cross" border="0" width="88" height="31"></a> <a href="https://sunnycross.ru/"><img src="https://forumstatic.ru/files/001c/73/be/65745.jpg"></a> <a href="https://trt.rusff.me/" target="_blank"><img src="https://forumupload.ru/uploads/001c/2b/59/2/934868.png" width="88px" height="31px"></a> <a href="https://crystalcage.rusff.me/" title="Wizarding World, 1980, Dark!Ay, тоталитаризм" target=_blank><img src="https://forumstatic.ru/files/001c/76/cd/52012.png"></a> <a href="https://crystalcage.rusff.me/" title="Wizarding World, 1980, Dark!Ay, тоталитаризм" target=_blank><img src="https://forumstatic.ru/files/001c/76/cd/52012.png"></a> <a href="https://crystalcage.rusff.me/" title="Wizarding World, 1980, Dark!Ay, тоталитаризм" target=_blank><img src="https://forumstatic.ru/files/001c/76/cd/52012.png"></a> <a href="https://crystalcage.rusff.me/" title="Wizarding World, 1980, Dark!Ay, тоталитаризм" target=_blank><img src="https://forumstatic.ru/files/001c/76/cd/52012.png"></a> <a href="https://crystalcage.rusff.me/" title="Wizarding World, 1980, Dark!Ay, тоталитаризм" target=_blank><img src="https://forumstatic.ru/files/001c/76/cd/52012.png"></a> <a href="https://crystalcage.rusff.me/" title="Wizarding World, 1980, Dark!Ay, тоталитаризм" target=_blank><img src="https://forumstatic.ru/files/001c/76/cd/52012.png"></a> <a href="https://crystalcage.rusff.me/" title="Wizarding World, 1980, Dark!Ay, тоталитаризм" target=_blank><img src="https://forumstatic.ru/files/001c/76/cd/52012.png"></a> <a href="https://crystalcage.rusff.me/" title="Wizarding World, 1980, Dark!Ay, тоталитаризм" target=_blank><img src="https://forumstatic.ru/files/001c/76/cd/52012.png"></a> <a href="https://crystalcage.rusff.me/" title="Wizarding World, 1980, Dark!Ay, тоталитаризм" target=_blank><img src="https://forumstatic.ru/files/001c/76/cd/52012.png"></a> <a href="https://crystalcage.rusff.me/" title="Wizarding World, 1980, Dark!Ay, тоталитаризм" target=_blank><img src="https://forumstatic.ru/files/001c/76/cd/52012.png"></a> <a href="https://crystalcage.rusff.me/" title="Wizarding World, 1980, Dark!Ay, тоталитаризм" target=_blank><img src="https://forumstatic.ru/files/001c/76/cd/52012.png"></a> </div> <!-- Перемешать баннеры при перезагрузке © TheBanana, max, the murderer! 2022 --> <script> $(document).ready(function(){ $('.banners').each(function () { var block = $(this); var banners = (block).children('a').not('.static'); $(banners).sort(function (a, b) { return (-1 + Math.random() * 2); }) .appendTo(block).show(); }); }); </script> <!------------------------------------------- конец баннеров --------------------------------------------> <!-------------------------- вверх-вниз --------------------------> <div class="go-up" id='ToTop'>«</div> <div class="go-down" id='OnBottom'>»</div> <!--кнопки вверх вниз--> <script type="text/javascript"> $(function(){ if ($(window).scrollTop()>="250") $("#ToTop").fadeIn("slow") $(window).scroll(function(){ if ($(window).scrollTop()<="250") $("#ToTop").fadeOut("slow") else $("#ToTop").fadeIn("slow") }); if ($(window).scrollTop()<=$(document).height()-"999") $("#OnBottom").fadeIn("slow") $(window).scroll(function(){ if ($(window).scrollTop()>=$(document).height()-"999") $("#OnBottom").fadeOut("slow") else $("#OnBottom").fadeIn("slow") }); $("#ToTop").click(function(){$("html,body").animate({scrollTop:0},"slow")}) $("#OnBottom").click(function(){$("html,body").animate({scrollTop:$(document).height()},"slow")}) }); </script> <!-------------------------- конец вверх-вниз'а --------------------------> <!-------------------- Аватар для гостя и по умолчанию / Deff, Alex_63 mod by ForumD.ru --> <script type="text/javascript"> var DefAvtr = 'https://forumupload.ru/uploads/001c/44/10/4/885511.png'; //Ссылка на аватар по умолчанию var GuestAvtr = 'https://forumupload.ru/uploads/001c/44/10/4/885511.png'; //Ссылка на аватар для Гостя $('#pun-viewtopic,#pun-messages').find('.pa-title').each(function(){ var b = DefAvtr; if (+$(this).parents('.post').attr('data-group-id') == 3) b = GuestAvtr; var s='<li class="pa-avatar item2"><img class="defavtr" src="'+b+'" alt="Аватар"/></li>'; if($(this).parent().find('.pa-avatar').html()==null)$(this).after(s); }); $('#profile-left strong:contains("Нет аватара")') .parent().html('<div><img src="'+DefAvtr+'"/></div>'); </script> <!--------------------------------------------- Конец -------------------------------------------------> <!-------------------------- Универсальный скрипт замены © Alex_63 ------------------------------------> <script> function Change(sc,ch,st){$(sc).parent().each(function(){$(this).html($(this).html().replace(ch,st));});} Change('#pun-stats li.item1','Всего тем','Тайных комнат открыто'); Change('#pun-stats li.item2','Всего сообщений','Заклинаний произнесено'); Change('#pun-stats li.item3','Зарегистрированных пользователей','Волшебников в клетке'); Change('#pun-stats li.item4','Последним зарегистрировался','Аппарировал последним'); Change('#pun-stats .onlinelist div > a','Активны','В "Трех Метлах":'); Change('#pun-stats .users_24h div > a','Посетили за сутки','Разошлись по домам:'); Change('li#navuserlist','Участники','Волшебники'); Change("li#navsearch","Поиск","Акцио"); Change('li#navprofile','Профиль','Зеркало'); Change('li#navpm','Сообщения','Кричалки'); Change('li#navadmin','Администрирование','Настройки'); </script> <!-------------------------- Универсальный скрипт замены © Alex_63 ------------------------------------> <!--------------------------- тултип ----------------------------------> <script> jQuery.fn.quicktip = function(options) { // Значения по умолчанию var defaults = { speed: 500, xOffset: 0, yOffset: 30 }; // Объединяем переданные опции с дефолтными var settings = $.extend({}, defaults, options); // Для каждого элемента, к которому применяется плагин return this.each(function() { var $this = jQuery(this); // Сохраняем title в data-атрибут, чтобы восстановить его позже var tipTitle = $this.attr('title') || $this.attr('original-title') || 'Quick tip'; $this.data('title', tipTitle).removeAttr('title'); // Удаляем атрибут title // Обработка событий наведения мыши $this.hover(function(e) { $this.css('cursor', 'pointer'); $("body").append("<div id='tooltip'>" + tipTitle + "</div>"); $("#tooltip") .css("top", (e.pageY + settings.yOffset) + "px") .css("left", (e.pageX + settings.xOffset) + "px") .fadeIn(settings.speed); }, function() { // Удаляем подсказку при уходе мыши $("#tooltip").remove(); }); // Обновляем позицию подсказки при движении мыши $this.mousemove(function(e) { $("#tooltip") .css("top", (e.pageY + settings.yOffset) + "px") .css("left", (e.pageX + settings.xOffset) + "px"); }); }); }; </script> <script> $(function(){ $('*[title]').quicktip({ speed:300, //Скорость появления подсказки fade: true }); }); </script> <script> $('.pa-online, .postlink:not(.postlink.long), .subscribelink, .postlink .new-poll, .postlink .new-topic, #pun-viewforum .modmenu strong a, #profile .container li.view a').each(function(){ $(this).attr('title',$(this).text()); }); // Подсказка для кнопки с #togglePreview .button $('#togglePreview .button').each(function() { // Получим значение атрибута value и установим его в title var value = $(this).val(); // Получаем значение value $(this).attr('title', value); // Устанавливаем это значение как title }); </script> <!------------------------------------------ конец тултипа ---------------------------------------> <!-------------------- Ссылка на авторский пост в цитате // v.3 © Alex_63 --------------------> <script type="text/javascript"> var quote_img = 'https://forumstatic.ru/files/0015/ec/20/41408.png'; //Кнопка "Перейти к сообщению" в цитате $('.quote-box>cite:not(:contains("Скрытый текст:"))').each(function() { var cntq=$(this).text(),sp0='<span class="qcn">записка под дверью от</span> ', sp1='<span class="qc-uname">###</span>'; if(cntq.indexOf('#p')!=-1){var pid=cntq.split(',')[0],autq=cntq.split(',')[1].split(' написал')[0], lnkq='<a class="qc-post-link" href="',imgq='<img src="'+quote_img+'" title="Перейти к сообщению"/>', sp2=' <span class="qc-post-link">'+lnkq;sp1=sp1.replace('###',autq); if($('.post'+pid).length){$(this).html(sp0+sp1+sp2+pid+'">'+imgq+'</a></span>');}else {$(this).html(sp0+sp1+sp2+'/viewtopic.php?pid='+pid.split('#p')[1]+pid+'">'+imgq+'</a></span>');} }else{var autq=cntq.split(' написал')[0];sp1=sp1.replace('###',autq);$(this).html(sp0+sp1);} });$('#pun-viewtopic .pl-quote>a').each(function() { $(this).attr('href',$(this).attr('href').replace('(\'','(\'#'+$(this).parents('.post').attr('id')+',')); }); </script> <!-------------------- конец ссылки на авторский пост в цитате // v.3 © Alex_63 --------------------> <!------------------- убрать пожаловаться -------------------> <script type="text/javascript"> RusffCore.sets.show_reportBtn = 0; </script> <!------------------- конец убрать пожаловаться -------------------> <!----------------- между никами запятая ---------------> <style type="text/css"> div#topic-users-in a:after { content: ', '; } div#topic-users-in a:last-child::after { content: ' '; } </style> <!----------------- после ника запятая ---------------> <script type="text/javascript"> function to(username) {insert('[b]' + username + '[/b]' + ', ');} </script> <!-----------------конец запятых ---------------> <!--------------------- регулировка размера шрифта в постах © Alex_63 ---------------------> <script type="text/javascript" src="https://forumstatic.ru/files/0015/c4/3f/31001.js"></script> <!--------------------- конец регулировки размера шрифта в постах © Alex_63 ---------------------> <!----------- Перенос Быстрого ответа под нужное сообщение © Alex_63 -----------> <style> /* Кнопка "Ответить" */ li.pl-reply a { } /* при наведении */ .button.cancel{display:none;} </style> <script type="text/javascript" src="https://forumstatic.ru/files/0015/c4/3f/26021.js"></script> <!----------- //End//-Перенос Быстрого ответа под нужное сообщение -----------> <!-----------------------тег абзаца со своими отступами -------------------------> <style>#button-indent {background:url(http://s7.uploads.ru/t/mnkgq.png)no-repeat center 6px!important;}</style> <!--ТЕГ абзаца - [indent=X,Y] --><script type="text/javascript"> (function(){var c="[indent",h,e='<span style="display:inline-block;margin:YYem XXem;"></span>'; $("#button-strike").after('<td id="button-indent" title="Отступы"><img src="/i/blank.gif" onclick="smile(\''+c+'=2,1]\')\"></td>'); function a(b,d){if(!d){return e.replace("XX","2").replace("YY","1")} /*удвоенные Отступы слево и сверху по умолчанию*/ else{return d.replace(/=(\d+(?:\.\d+)?)((?:,\d+(?:\.\d+)?)?)$/,function(f,i,g){h=e.replace("XX",i);v=g.substr(1);return h.replace("YY",(v?v:"0")); })}}$('.post-content p:contains("'+c+'")').each(function(){$(this).html($(this).html().replace(/\[indent([=\d\.,]*?)\]/gm,a))})}()); </script> <!-----------------------конец тега абзаца со своими отступами -------------------------> <!-- Восстановление последнего поста при утере by Человек-Шаман --> <script> $(document).ready(function() { $('#addition-area').append(function() { return $('<div>Восстановить последний пост</div>').click(restoreLastPost); }); function restoreLastPost() { $('#main-reply').val(localStorage.ReservePost); }; }); </script> <!--конец--> <!-- Кликабельность ника в постах гостя © Alex_63 --> <script>$(".post[data-group-id=3]").find(".pa-author").html(function(){return this.innerHTML.replace(/(<.+>)(.+)$/,'$1<a href="javascript:to(\'$2\')">$2</a>')});</script> <!------------------------ конец кликабельности ника в постах Гостя ---------------------------------> <!------------------------- Мгновенный предпросмотр сообщения © Alex_63 ----------------------------> <script type="text/javascript"> var PPREV = {}; PPREV.position = 0; //Положение окна Предпросмотра: 0 - над полем ввода, 1 - под полем ввода, 2 - справа PPREV.quote_cite = 'написал(а):'; //Надпись в окне цитаты </script> <script type="text/javascript" src="https://forumstatic.ru/files/0015/c4/3f/10524.js"></script> <!-- Кнопка отключения мгновенного предпросмотра --> <style>#togglePreview{float:right;margin-top: -40px;margin-right: -5px;}</style> <script type="text/javascript">(function (){ var a='Включить быстрый предпросмотр'; var b='Отключить быстрый предпросмотр'; var d='_PreviewToggle'; setCookiePPrev=function(a,b,c){if(c){var d=new Date();d.setTime(d.getTime()+c);}if(a && b)document.cookie=a+'='+b+(c ? '; expires='+d.toUTCString() : '');else return false;} getCookiePPrev=function(a){var b=new RegExp(a+'=([^;]){1,}');var c=b.exec(document.cookie);if(c)c=c[0].split('=');else return false;return c[1] ? c[1] : false;} $('<small id="togglePreview"><input type="button" class="button" value="'+ b +'" onclick="togglePreview(this)"/></small>').insertAfter('#post fieldset:last legend'); var x = ParseContent; window.togglePreview = function(sel){//alert(sel.value); if(sel.value==a){sel.value=b;setCookiePPrev(d,'0',-1000);ParseContent=x;ParseContent();$('#post-preview').show(); return} if(sel.value==b){sel.value=a;setCookiePPrev(d,'OFF',30*3600*24*30*1000);if($('#pun-viewtopic').length){$('#post-preview').hide()}ParseContent=function(){return};return} }; if(getCookiePPrev(d)=='OFF'){$('#togglePreview>.button').click()}; }()) </script> <!------------------------- конец предпросмотра сообщения © Alex_63 ----------------------------> <!------------------------------------- обертка в профиле ---------------------------------------------> <script> $('.post-author').each(function() { var posts = $(this).find('.pa-posts'), respect = $(this).find('.pa-respect'), fld5 = $(this).find('.pa-fld5'), fld3 = $(this).find('.pa-fld3'); // Если все элементы существуют if (posts.length && respect.length && fld5.length && fld3.length) { $(this).find('.pa-posts, .pa-respect, .pa-fld5, .pa-fld3').wrapAll('<div class="fld_wrap"></div>'); } else { // Если хотя бы один элемент отсутствует, присвоить другой класс $(this).find('.pa-posts, .pa-respect, .pa-fld5, .pa-fld3').wrapAll('<div class="fld_wrap_un"></div>'); } }); </script> <!------------------------------------- конец обертки в профиле ---------------------------------------------> <!---------------------------- личная страница ----------------------------> <!-- личная страница --> <script src="https://forumstatic.ru/files/0011/e9/e1/56920.js" type="text/javascript"></script> <div id="character" class="reveal-modal xlarge main container"> <div class='modal_wrap'></div> <a class="close-reveal-modal">×</a> </div> <script type="text/javascript"> function showTab(elem){ $(".menu span").removeClass("tabactive"); $(elem).addClass("tabactive"); $("div.submenutext").hide(); var activeDiv = $(elem).attr("alt"); $("div."+activeDiv).fadeIn(); return false; } $(".modal-link").click(function() { var modId = $(this).attr('id'); $('.modal_wrap').html(''); $.get('pages/'+modId, function (data){ $('.modal_wrap').html($(data).find('.character').html()); }); $(".submenutext").hide(); $(".submenutext:first").show(); }); </script> <!---------------------------- конец личной страницы ----------------------------> <!---------------------------- маска ----------------------------> <script src="https://forumstatic.ru/files/0017/95/29/89289.js"></script> <script> hvScriptSet.addMask({ forumAccessExtended: { 'истинно так': ['Пользователи'], 'ДОБРО ПОЖАЛОВАТЬ': ['Пользователи'], 'ГОРИЗОНТ СОБЫТИЙ': ['Пользователи'] }, changeList: { 'pafld1': { title: 'личное звание', description: '', tag: 'fauxlz', class: 'pa-fld4', defaultCode: '<liz><h4>ФИО</h4><p>цитата и можно <a href=\'ССЫЛКУ\'>на зазнобу</a> </p></liz>', type: 'html' } }, userFields: ['pa-author', 'pa-title', 'pa-avatar', 'pa-fld4', 'pa-posts', 'pa-fld5', 'pa-respect', 'pa-fld3', 'pa-fld1', 'pa-fld2', 'pa-online', 'pa-ua', 'pa-gifts'] }); </script> <!---------------------------- конец маски ----------------------------> <!------------------------ обтекание изображения 2.4.4 ------------------------------> <script language="javascript"> $(function(){ $('td#button-link').before('<td id="floatbut" style=\'background-image:url("https://forumstatic.ru/files/0015/dd/40/15488.gif")\'></td>'); $('#floatbut, .vibor').click(function(){ $('div#float').toggle();}); }); elm=document.getElementsByTagName("div") for(x in elm) if(elm[x].className=="post-content") { post = elm[x].innerHTML; if(post.indexOf("[/float]") != -1) { floats = /\[float=(.*?)\]([^\[]*)\[\/float\]/gi elm[x].innerHTML = elm[x].innerHTML.replace(floats, "<span style='float: $1; margin: 0px 10px 0px; text-align: $1;'>$2</span>") }} </script> <div id="float" style="display:none;width:auto; padding:8px; position:absolute; margin-top:-37%; margin-left:35%; z-index:20;background-color: rgb(185 183 180);border-radius: 5px;color: var(--t-body);box-shadow: 0 0 6px 1px #0000001f, 0 0 0 1px #94928e;"> <div><strong>Направление обтекания</strong></div><br> <div align="center"> <img class="vibor" src="https://forumstatic.ru/files/001a/fc/23/50698.png" title="left" onclick="bbcode('[float=left]', '[/float]')" /> <img class="vibor" src="https://forumstatic.ru/files/001a/fc/23/19406.png" title="right" onclick="bbcode('[float=right]', '[/float]')" /> </div></div> <!------------------------ конец обтекания изображения 2.4.4 ------------------------------> <!-- НАЧАЛО. ссылка на новые сообщения --> <script type="text/javascript"> $('#pun-ulinks ul').prepend('<li class="item1"><a href="/search.php?action=show_new">новые сообщения</a></li>'); </script> <!-- КОНЕЦ. ссылка на новые сообщения --> <!----------------------------- СКРИПТ ЗЕЛИЙ ---------------------------------------> <script type="text/javascript" src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <script> $(document).ready(function() { const potions = { 'amortentia': { title: 'Amortentia (Амортенция)', color: '#e74c3c', desc: 'Самое сильное любовное зелье. Имеет перламутровый оттенок и издаёт аромат, который наиболее привлекателен для того, кто его нюхает. Запрещено к использованию.', icon: '❤️' }, 'animagus': { title: 'Animagus Potion (Зелье анимага)', color: '#8e44ad', desc: 'Позволяет волшебнику превращаться в животное. Процесс приготовления занимает месяц, требует постоянного ноствания мандрагоры во рту.', icon: '🐾' }, 'antidote': { title: 'Antidote to Common Poisons (Противоядие)', color: '#27ae60', desc: 'Зелье бирюзового цвета, нейтрализует большинство известных ядов. Изобретено Северусом Снеггом в школьные годы.', icon: '🌿' }, 'draught': { title: 'Draught of Living Death (Напиток живых мертвецов)', color: '#16a085', desc: 'Одно из самых сложных зелий. Вызывает глубокий сон, похожий на смерть. Имеет серебристый цвет.', icon: '💀' }, 'felix': { title: 'Felix Felicis (Феликс Фелицис)', color: '#f39c12', desc: 'Золотое зелье удачи. Дарует невероятное везение на 12 часов. Передозировка вызывает головокружение и безрассудство.', icon: '✨' }, 'pepperup': { title: 'Pepperup Potion (Бодрящее зелье)', color: '#c0392b', desc: 'Лечит простуду. После приёма из ушей повалит пар в течение нескольких часов. Изобретено в XVIII веке.', icon: '♨️' }, 'polyjuice': { title: 'Polyjuice Potion (Полижуйс)', color: '#2ecc71', desc: 'Позволяет принять облик другого человека на 1 час. Требует биологический материал цели (волос, ноготь). Имеет отвратительный вкус.', icon: '🧪' }, 'skele': { title: 'Skele-Gro (Скелегро)', color: '#bdc3c7', desc: 'Восстанавливает утраченные кости. Процесс крайне болезненный.', icon: '🦴' }, 'veritaserum': { title: 'Veritaserum (Сыворотка правды)', color: '#3498db', desc: 'Прозрачное зелье правды без вкуса и запаха. Заставляет говорить только правду в течение 1 часа. Используется Министерством Магии.', icon: '💧' }, 'wolfsbane': { title: 'Wolfsbane Potion (Оборотное зелье)', color: '#34495e', desc: 'Позволяет оборотню сохранять человеческий разум при превращении. Очень сложно варится и дорого стоит.', icon: '🐺' } }; // Открытие/закрытие dropdown $('.potion-dropdown').on('click', function(e) { e.stopPropagation(); $(this).toggleClass('active'); $('.potion-options').not($(this).find('.potion-options')).slideUp(); $(this).find('.potion-options').slideToggle(200); }); // Закрытие при клике вне $(document).on('click', function() { $('.potion-dropdown').removeClass('active'); $('.potion-options').slideUp(200); }); // Выбор зелья $('.potion-options li').on('click', function(e) { e.stopPropagation(); const potionId = $(this).data('potion'); const potion = potions[potionId]; // Обновляем выбор $('.selected-value').text(potion.title); $('.selected-potion').val(potionId); // Обновляем детали $('.potion-title').text(potion.title).css('color', '#423a52'); $('.potion-description').text(potion.desc); $('.potion-image').html(potion.icon) .css('background-color', potion.color) .css('font-size', '24px'); // Закрываем dropdown $('.potion-dropdown').removeClass('active'); $('.potion-options').slideUp(200); }); }); </script> <!-------------------- УДАЛЯЕМ ЛИШНИЕ СТРОКИ ПОСЛЕ ЦИТАТЫ И КОДА © Alex_63 v.3 -----------------> <script type="text/javascript"> $('.post-content').each(function() { var CNT = $(this).html(); CNT = CNT.replace(/<p><br><\/p>/img,''); CNT = CNT.replace(/<p><br><br>(.*?)<\/p>/img,'<p>$1</p>'); CNT = CNT.replace(/<p><br>(.*?)<\/p>/img,'<p>$1</p>'); $(this).html(CNT); }); </script> <!------------------------------------------------- ЗАМЕНА ТИРЕ --------------------------------------------------> <script type="text/javascript"> $('.post-content p').each(function(){ function replacer(str){return str.replace(/-\s|–\s/gm,'— ');} var a = $(this).clone().wrap('<div></div>').parent().html(); var b = a.replace(/>[^<>]+</gim,replacer); if(a!=b)$(this).replaceWith(b) }); </script> <!================================================================= СКРИПТЫ ДЛЯ ФОРМА ОТВЕТА ==================================================================> <!-------------------------------------- ОТКЛЮЧЕНИЕ ФУНКЦИЙ И КНОПОК -----------------------------------> <!-- Отключение сокращения ссылок --> <script type="text/javascript"> FORUM.set("editor.link.short_url", function() { return false; }); </script> <!-- Скрыть "Пожаловаться" --> <style type="text/css"> .pl-reports {display:none!important;} </style> <!-- Скрыть "rss-atom" --> <style type="text/css"> .punbb .modmenu .container span {display: none;} </style> <!-- Ники модера --> <style> .modlist {display: none !important;} </style> <!-- Запятая после ника в посте --> <script type="text/javascript"> function to(username) {insert('[b]' + username + '[/b]' + ', ');} </script> <!-- FILL CODE AS FORM (info: https://github.com/4eDo/mybb/tree/main/fill_code_as_form#readme )--> <input type="button" class="button" id="templateBtn" onclick="showTemplateWindow()" value="Заполнение кодов" style="margin-top:-20px;margin-left:34px; display: none;"> <div> <div class="tmpl_overlay"> <div class="tmpl_popup" style="display:none"> <div id="tmpl_back-button" onclick="showTemplatesList()" style="display:none">Назад</div> <div id="tmpl_close-button" onclick="hideTemplateWindow()">x</div> <div id="templatesList"></div> <div id="targetForm" style="display:none"></div> </div> </div> </div> <script> const COLOR_INPUT_TEXT_fcaf = "color: #000000 !important"; const NEED_HIDE_NAVLINKS = false; const TEMPLATE_SRC = "https://forumstatic.ru/files/001c/76/cd/75472.html?v=30"; </script> <script type="text/javascript" src="https://4edo.github.io/mybb/fill_code_as_form/fillCodeAsForm_v2.js"></script> <!-- end FILL CODE AS FORM --> <!--вкладки, (c) EMERAEL 2024 --> <script> (() => { const posts = document.querySelectorAll('.post-content'); const processedPosts = new Set(); const processPost = (post) => { if(processedPosts.has(post)) return; const postTabs = post.querySelectorAll('.custom_tag_tab'); const actualizeTabsDisplay = () => postTabs.forEach(tab => tab.querySelector('.custom_tag_tabdefault') ? tab.classList.remove('hidden') : tab.classList.add('hidden')); const postTabtitles = post.querySelectorAll('.custom_tag_tabtitle'); if(!postTabs.length) return; const defaultTabElement = post.querySelector('.custom_tag_tabdefault'); const openTabMarker = defaultTabElement ? defaultTabElement : document.createElement('div'); if (!defaultTabElement) { openTabMarker.classList.add('custom_tag_tabdefault'); postTabs[0].prepend(openTabMarker); // Добавляем класс "active" для первой вкладки по умолчанию postTabtitles[0].classList.add('active'); } const tabnamesToTab = new Map(); postTabs.forEach((tab) => tabnamesToTab.set(tab.dataset.tabname, tab)); const tabnamesToTabtitle = new Map(); postTabtitles.forEach((tabtitle) => { const tabname = tabtitle.dataset.tabname; tabnamesToTabtitle.set(tabname, tabtitle); tabtitle.addEventListener('click', () => { const triggeredTab = tabnamesToTab.get(tabname); if(!triggeredTab || triggeredTab.querySelector('.custom_tag_tabdefault')){ return; } triggeredTab.prepend(openTabMarker); actualizeTabsDisplay(); // Добавляем класс "active" для открытой вкладки postTabtitles.forEach((tab) => tab.classList.remove('active')); tabtitle.classList.add('active'); }); }); actualizeTabsDisplay(); processedPosts.add(post) }; posts.forEach((el) => processPost(el)); $(document).on('pun_post', () => document.querySelectorAll('.post-content').forEach((el) => processPost(el))); $(document).on('pun_preview', () => document.querySelectorAll('.post-content').forEach((el) => processPost(el))); $(document).on('pun_edit', () => document.querySelectorAll('.post-content').forEach((el) => processPost(el))); })() </script>