Единый форум поддержки

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

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


Вы здесь » Единый форум поддержки » Новые возможности форумов » Запросы по скриптам #11


Запросы по скриптам #11

Сообщений 1561 страница 1580 из 1629

1

Предыдущая тема - Запросы по скриптам[9]

Инструменты для поиска и редактирования стиля (скриптов).

Как с помощью браузера можно определить элемент дизайна.

Каталог скриптов/CSS

Полезные скрипты, необходимые темы для новичков, а также ссылки на сайты рассказывающие что такое НТМЛ и CSS.

Типовые Вопросы (ЧаВо)

Ответы на часто задаваемые вопросы.

Как задавать вопросы! Разница между стилем и скриптом. ( Советы)

Плюс к названию темы еще и Памятка.

Предыдущая часть темы: Запросы по скриптам[10]

+1

1561

Merlin777
Вероятно у вас включена ajax-отправка сообщений (Администрирование - Права), из вариантов решения проблемы - либо адаптировать под неё имеющиеся скрипты (например хэштеги), либо отключать её совсем (что я бы не рекомендовал).

+1

1562

О, звучит печально :)

Помогите тогда плиз  адаптировать вот эти пару скриптов:
Цветовыделение слов в дополнительных полях: https://forumd.ru/viewtopic.php?id=4216

Скрипт для хэштегов: Запросы по скриптам[8]

Кстати, исключение хэштегов из поиска (Deff) почему-то не работает Скрипты от пользователей 3

0

1563

ACT3255 написал(а):

@Romych

@Romych
Up!

ACT3255 написал(а):

@Romych

26 апреля 2015г.: Мобильный стиль форумов

Romych написал(а):

тогда ещё один вопрос перед публикацией, список фотохостингов устраивает? чего-то из популярных упущенно?

а то потом посыпятся просьбы добавить тот или иной и придётся неоднократно скрипт дополнять

Можно ли добавить:
https://new.fastpic.org/
https://fastpic.org/
т.к. на домене ru они более не существуют.
и https://postimages.org/ если возможно.

Ну и 3 раз апнем, а вдруг увидит.  :flag:

@Romych
Up!

0

1564

Merlin777 написал(а):

Кстати, исключение хэштегов из поиска (Deff) почему-то не работает Скрипты от пользователей 3

Почему из поиска ? Скрипт исключает хештеги при цитировании сообщения, но не из bb-цитаты

0

1565

Deff

Из поиска, потому что "Тут в связи с установками скрипта поиска по Хештегам просили исключать их при полном цитировании сообщения (Дабы не засорять поиск вторичными тегами)" (с)  :)

При цитировании сообщения с хештегами по кнопке "Цитировать" этот скрипт не вырезает хештеги. Или я что-то не так понимаю? :)

0

1566

Merlin777 написал(а):

При цитировании сообщения с хештегами по кнопке "Цитировать" этот скрипт не вырезает хештеги. Или я что-то не так понимаю? :)

Ну при цитировании должен вырезать, дайте ссылку на пост с хештегами и ник-пароль в личку (у меня код стоит на паре знакомых форумах и работает)

+1

1567

Поставил скрипт "Первые N тем в описании форума"
Скрипты от пользователей 3
"Вариант 2: Окно появляется при наведении на название форума"

Проблема в том, что некоторые темы во всплывающем окошке отображаются не названиями, а ссылками, и некоторые темы при повторном наведении мыши тоже вместо названий показываются ссылками. Мне кажется, там что-то связано с sessionStorage, но что с этим нужно сделать, непонятно  :)

0

1568

Merlin777
Переработал скрипт, тестируйте Скрипты от пользователей 3

+1

1569

Есть замечательный скрипт от @Reysler про навигацию в профайле Интересные решения для форумов
Подскажите, пожалуйста, как сделать так, чтобы в мобильной версии навигация осталась по-старому? :)

Отредактировано Merlin777 (Вт, 27 Авг 2024 01:05:25)

0

1570

Merlin777
Попробуйте обернуть код в

@media screen and (min-width: 540px) {
...здесь код стиля...
}

+2

1571

Reysler
Сначала "Первые N тем в описании форума" работал отлично, а сейчас что-то пошло не так :)

Форум https://kuban.mybb.ru/

Отредактировано Merlin777 (Вс, 8 Сен 2024 23:37:17)

+1

1572

Merlin777
Хотелось бы конкретики.

Изменений в скрипт с последнего редактирования сообщения не вносилось. Скрипт работает на чистом JS, независим от сторонних библиотек (кроме вывода ошибок jQuery) и за исключением форумного API, но проблем с ним я не наблюдаю. Пробежался по форуму, работает так, как и задумывалось.

+1

1573

@Reysler

https://i.imgur.com/mnldn1Z.png

https://i.imgur.com/bQzgPdY.png

0

1574

Merlin777
Внёс корректировку. Протестируйте.
У вас (и ваших пользователей) скрипт всё ещё может отдавать некорректные данные из-за кэша. Чтобы он заработал у всех, после расширения файла скрипта пропишите ?1

...
</script>
<script src="https://forumstatic.ru/files/001c/3a/d4/90909.js?1"></script>
<!-- Конец Первые N тем в описании форума -->

В идеале бы переписать логику получения важных и обычных тем, за имением времени обошелся простым методом.

+1

1575

Reysler написал(а):

Merlin777
Внёс корректировку. Протестируйте.
У вас (и ваших пользователей) скрипт всё ещё может отдавать некорректные данные из-за кэша. Чтобы он заработал у всех, после расширения файла скрипта пропишите ?1

...
</script>
<script src="https://forumstatic.ru/files/001c/3a/d4/90909.js?1"></script>
<!-- Конец Первые N тем в описании форума -->

В идеале бы переписать логику получения важных и обычных тем, за имением времени обошелся простым методом.

Спасибо! Стало лучше... почти везде :)

0

1576

Я тут зашёл в гости к знакомому джуну, и мы вместе с ним и ChatGPT хорошо посидели и немного переделали скрипт уважаемого товарища Reysler.


Первые N тем в описании разделов форума (v3)

Скрипт показывает список тем в разделе при наведении на него курсора или по нажатию на символ ">" после названия раздела (это настраивается).

Пример работы

Код скрипта:

Первые N тем в описании разделов форума (v3)
Код:
<!-- Начало Первые N тем в описании разделов форума(Fover + Reysler + Merlin777) v3.0-->
<!-- Пример работы: https://kuban.mybb.ru -->

<style>
.topicslist {
    position: absolute;
    background-color: #fff;
    border: 1px solid rgba(0, 0, 0, .35);
    margin-top: 5px;
    padding: 10px;
    box-shadow: 0 4px 4px -2px rgba(0, 0, 0, .35);
    border-radius: 3px;
    max-width: 80vw;
    z-index: 999;
    .sticky a {
        font-weight: bold;
        color: blue; /* Цвет для выделенных тем */
    }
    .closed a {
        color: #cb8787; /* Цвет для закрытых тем */
    }
}
.clickt {
    cursor: pointer;
    user-select: none;
    color: #22229C; /* Цвет для стрелочки ">" */
}
</style>
<script>
(function() {

let count = 7; // Максимальное количество выводимых тем форума
let selectAct = 'click'; // Вариант показа блока: 'click' (нажатие по символу рядом с названием темы) или 'hover' (наведение курсором на название темы)
let useSession = 1; // 1 - включить использование sessionStorage, 0 - выключить
 
 
function loadTopics(t, s) {
    const cacheTime = 10 * 60 * 1000; // 10 минут кэширования данных
    const now = Date.now();
    
    // Проверяем, есть ли данные в sessionStorage
    const cachedData = sessionStorage.getItem(s);
    if (useSession && cachedData) {
        const parsedData = JSON.parse(cachedData);
        
        // Проверяем, не устарели ли данные (кэш храним не дольше 10 минут)
        if (now - parsedData.timestamp < cacheTime) {
            t.find("ul").empty();
            parsedData.data.forEach(function (item) {
                t.find("ul").append('<li class="' + item.class + '"><a href="' + item.url + '">' + item.subject + "</a></li>");
            });
            return;
        } else {
            sessionStorage.removeItem(s); // Удаляем устаревшие данные
        }
    }
 
    // Если данных нет или они устарели, делаем запрос к API
    $.getJSON("/api.php?method=topic.get&forum_id=" + s + "&sort_by=last_post&sort_dir=desc&limit=100", function (response) {
        t.find("ul").empty();
        
        if (response && response.response && response.response.length > 0) {
            response.response.forEach(function (topic) {
                topic.sticky = parseInt(topic.sticky, 10);
                topic.closed = parseInt(topic.closed, 10);
            });
 
            // Сортировка закрепленных и обычных тем
            const stickyTopics = response.response.filter(function (topic) {
                return topic.sticky === 1;
            }).sort(function (a, b) {
                return b.last_post_date - a.last_post_date;
            });
 
            const nonStickyTopics = response.response.filter(function (topic) {
                return topic.sticky !== 1;
            }).sort(function (a, b) {
                return b.last_post_date - a.last_post_date;
            });
 
            // Объединение тем и создание списка
            const topics = stickyTopics.concat(nonStickyTopics).slice(0, count).map(function (topic) {
                let className = "";
                if (topic.sticky === 1) className += "sticky ";
                if (topic.closed === 1) className += "closed";
                return {
                    subject: topic.subject,
                    url: "/viewtopic.php?id=" + topic.id,
                    class: className.trim(),
                    last_post_date: topic.last_post_date
                };
            });
 
            // Отображаем темы
            topics.forEach(function (item) {
                t.find("ul").append('<li class="' + item.class + '"><a href="' + item.url + '">' + item.subject + "</a></li>");
            });
 
            // Сохраняем данные в sessionStorage с меткой времени
            if (useSession) {
                sessionStorage.setItem(s, JSON.stringify({
                    data: topics,
                    timestamp: now // Сохраняем текущее время
                }));
            }
        } else {
            t.find("ul").append("<li>В этом форуме нет тем.</li>");
        }
    }).fail(function (xhr, status, error) {
        t.find("ul").empty();
        console.log("Ошибка при загрузке данных.");
        if (GroupID === 1) {
            console.log('Произошла ошибка в скрипте. Код ошибки: ' + error, { sticky: true });
        }
    });
}
 
function showTopics(t) {
    const s = t.parents("tr").attr("id").match(/\d+/)[0];
    const topicsList = t.closest("tr").find(".topicslist");
 
    if (currentForumId !== s || !topicsList.length) {
        $(".topicslist").remove();
        t.closest("tr").find("h3").after('<div class="topicslist"><ul><li>Загружаю список тем...</li></ul></div>');
        loadTopics(t.closest("tr").find(".topicslist"), s);
        currentForumId = s;
 
        if (selectAct === "hover") {
            resetCloseTimeout(t.closest("tr").find(".topicslist"));
        }
    }
}
 
function resetCloseTimeout(t) {
    clearTimeout(closeTimeout);
    closeTimeout = setTimeout(function () {
        t.remove();
        currentForumId = null;
    }, 2000);
}
 
currentForumId = null;
closeTimeout = null;
 
if (selectAct === "hover") {
    $(".tclcon h3 a").on("mouseenter", function () {
        const s = $(this).parents("tr").attr("id").match(/\d+/)[0];
        if (currentForumId !== s) {
            showTopics($(this));
        }
    });
 
    $(document).on("mouseenter", ".topicslist, .tclcon h3 a", function () {
        clearTimeout(closeTimeout);
    });
 
    $(document).on("mouseleave", ".topicslist, .tclcon h3 a", function () {
        resetCloseTimeout($(".topicslist"));
    });
} else {
    $(".tclcon h3 a").each(function () {
        $(this).after(' <span class="clickt" title="Показать список тем этого форума">></span>');
    });
 
    $(".clickt").on("click", function (e) {
        e.stopPropagation();
        const s = $(this).closest("tr").attr("id").match(/\d+/)[0];
        const topicsList = $(this).closest("tr").find(".topicslist");
 
        if (currentForumId === s && topicsList.length) {
            topicsList.remove();
            currentForumId = null;
        } else {
            showTopics($(this));
        }
    });
}
 
$(document).click(function (e) {
    if (!$(e.target).closest(".topicslist").length && !$(e.target).closest(".clickt").length) {
        $(".topicslist").remove();
        currentForumId = null;
    }
});

})();
</script>

<!-- Конец Первые N тем в описании разделов форума -->

Без изменений:

  • Есть возможность отключения кэширования sessionStorage: если необходимо динамически загружать список тем при каждом открытии или в случае возникновения проблем.

  • В блоке со списком тем выделенные и закрытые темы имеют собственные классы для оформления: .sticky ‒ для выделенных, .closed ‒ для закрытых.

  • Выбрать желаемый вариант открытия блока со списком тем можно без переустановки скрипта: click ‒ по нажатию на символ ">", hover ‒ при наведении курсора на название форума.

  • Переработана логика появления и закрытия блока списка тем: для закрытия блока достаточно нажать в любом месте страницы.

  • Для режима 'click' добавлено закрытие по нажатию на символ.

  • Для режима 'hover' добавлено автоматическое закрытие по таймеру по истечению 2 секунд, если курсор находится вне пределов блока со списком тем или вне ссылки названия форума.

Изменено
Более правильная работа с сессиями; автоматическое обновление сессий через 10 минут; теперь ошибки  при отсутствии интернета, обрыве соединения и т.п. не выводятся пользователям на страницу,  а пишутся в консоль браузера. Также, покурив мануал https://mybb.ru/forumapi выяснили, что у параметра sort_by почему-то есть параметр limit и он нормально работает только если задать limit=100, т.е максимальное значение.


Версия  3.1: Немного доработал скрипт, теперь в мобильном виде для режима click показываются стрелочки, в обычном - картинки

Первые N тем в описании разделов форума (v3.1)

<!--Начало Первые N тем в описании разделов форума (Fover + Reysler + Merlin777) v3.1-->
<!-- Пример работы: https://kuban.mybb.ru -->

<style>
.topicslist {
    position: absolute;
    background-color: #fff;
    border: 1px solid rgba(0, 0, 0, .35);
    margin-top: 5px;
    padding: 10px;
    box-shadow: 0 4px 4px -2px rgba(0, 0, 0, .35);
    border-radius: 3px;
    max-width: 80vw;
    z-index: 999;
    .sticky a {
        font-weight: bold;
        color: blue; /* Цвет для выделенных тем */
    }
    .closed a {
        color: #cb8787; /* Цвет для закрытых тем */
    }
}
.clickt {
    cursor: pointer;
    user-select: none;
     font-size: 15px; /* Размер для стрелочки ">" */
    color: #22229C; /* Цвет для стрелочки ">" */
}

.icon-download-themes {
display: inline-block;
background-image: url("https://forumupload.ru/uploads/001a/f0/7d/2/12211.png");
background-size: cover;
border: 0;
line-height: 1;
vertical-align: middle;
width: 16px;
height: 16px;
}

@media (max-width: 540px) {
    .icon-download-themes {
     background-image: none;
}
    .icon-download-themes:after {
       content: ">";

}
}

</style>
<script>
(function() {

let count = 7; // Максимальное количество выводимых тем форума
let selectAct = 'click'; // Вариант показа блока: 'click' (нажатие по символу рядом с названием темы) или 'hover' (наведение курсором на название темы)
let useSession = 1; // 1 - включить использование sessionStorage, 0 - выключить

function loadTopics(t, s) {
    const cacheTime = 10 * 60 * 1000; // 10 минут кэширования данных
    const now = Date.now();
   
    // Проверяем, есть ли данные в sessionStorage
    const cachedData = sessionStorage.getItem(s);
    if (useSession && cachedData) {
        const parsedData = JSON.parse(cachedData);
       
        // Проверяем, не устарели ли данные (кэш храним не дольше 10 минут)
        if (now - parsedData.timestamp < cacheTime) {
            t.find("ul").empty();
            parsedData.data.forEach(function (item) {
                t.find("ul").append('<li class="' + item.class + '"><a href="' + item.url + '">' + item.subject + "</a></li>");
            });
            return;
        } else {
            sessionStorage.removeItem(s); // Удаляем устаревшие данные
        }
    }

    // Если данных нет или они устарели, делаем запрос к API
    $.getJSON("/api.php?method=topic.get&forum_id=" + s + "&sort_by=last_post&sort_dir=desc&limit=100", function (response) {
        t.find("ul").empty();
       
        if (response && response.response && response.response.length > 0) {
            response.response.forEach(function (topic) {
                topic.sticky = parseInt(topic.sticky, 10);
                topic.closed = parseInt(topic.closed, 10);
            });

            // Сортировка закрепленных и обычных тем
            const stickyTopics = response.response.filter(function (topic) {
                return topic.sticky === 1;
            }).sort(function (a, b) {
                return b.last_post_date - a.last_post_date;
            });

            const nonStickyTopics = response.response.filter(function (topic) {
                return topic.sticky !== 1;
            }).sort(function (a, b) {
                return b.last_post_date - a.last_post_date;
            });

            // Объединение тем и создание списка
            const topics = stickyTopics.concat(nonStickyTopics).slice(0, count).map(function (topic) {
                let className = "";
                if (topic.sticky === 1) className += "sticky ";
                if (topic.closed === 1) className += "closed";
                return {
                    subject: topic.subject,
                    url: "/viewtopic.php?id=" + topic.id,
                    class: className.trim(),
                    last_post_date: topic.last_post_date
                };
            });

            // Отображаем темы
            topics.forEach(function (item) {
                t.find("ul").append('<li class="' + item.class + '"><a href="' + item.url + '">' + item.subject + "</a></li>");
            });

            // Сохраняем данные в sessionStorage с меткой времени
            if (useSession) {
                sessionStorage.setItem(s, JSON.stringify({
                    data: topics,
                    timestamp: now // Сохраняем текущее время
                }));
            }
        } else {
            t.find("ul").append("<li>В этом форуме нет тем.</li>");
        }
    }).fail(function (xhr, status, error) {
        t.find("ul").empty();
        console.log("Ошибка при загрузке данных.");
        if (GroupID === 1) {
            console.log('Произошла ошибка в скрипте. Код ошибки: ' + error, { sticky: true });
        }
    });
}

function showTopics(t) {
    const s = t.parents("tr").attr("id").match(/\d+/)[0];
    const topicsList = t.closest("tr").find(".topicslist");

    if (currentForumId !== s || !topicsList.length) {
        $(".topicslist").remove();
        t.closest("tr").find("h3").after('<div class="topicslist"><ul><li>Загружаю список тем...</li></ul></div>');
        loadTopics(t.closest("tr").find(".topicslist"), s);
        currentForumId = s;

        if (selectAct === "hover") {
            resetCloseTimeout(t.closest("tr").find(".topicslist"));
        }
    }
}

function resetCloseTimeout(t) {
    clearTimeout(closeTimeout);
    closeTimeout = setTimeout(function () {
        t.remove();
        currentForumId = null;
    }, 2000);
}

currentForumId = null;
closeTimeout = null;

if (selectAct === "hover") {
    $(".tclcon h3 a").on("mouseenter", function () {
        const s = $(this).parents("tr").attr("id").match(/\d+/)[0];
        if (currentForumId !== s) {
            showTopics($(this));
        }
    });

    $(document).on("mouseenter", ".topicslist, .tclcon h3 a", function () {
        clearTimeout(closeTimeout);
    });

    $(document).on("mouseleave", ".topicslist, .tclcon h3 a", function () {
        resetCloseTimeout($(".topicslist"));
    });
} else {
    $(".tclcon h3 a").each(function () {
        $(this).after(' <span class="clickt" title="Показать список тем этого форума"><div class="icon-download-themes"></div></span>');
    });

    $(".clickt").on("click", function (e) {
        e.stopPropagation();
        const s = $(this).closest("tr").attr("id").match(/\d+/)[0];
        const topicsList = $(this).closest("tr").find(".topicslist");

        if (currentForumId === s && topicsList.length) {
            topicsList.remove();
            currentForumId = null;
        } else {
            showTopics($(this));
        }
    });
}

$(document).click(function (e) {
    if (!$(e.target).closest(".topicslist").length && !$(e.target).closest(".clickt").length) {
        $(".topicslist").remove();
        currentForumId = null;
    }
});

})();
</script>

<!-- Конец Первые N тем в описании разделов форума -->


Как использовать: скопировать код скрипта и вставить в Администрирование - Формы - HTML низ.


Отредактировано Merlin777 (Сб, 14 Сен 2024 18:01:57)

+2

1577

Merlin777
А в идеале еще обернуть весь код внутри тегов <script></script> в анонимную функцию (function() { /*тут код*/ })(); чтобы используемые переменные не засоряли глобальную область видимости. Поскольку в реалиях MyBB на форумах может одновременно использоваться множество скриптов от разных разработчиков, имена переменных могут пересекаться и вызывать конфликты.

+2

1578

Alex_63 написал(а):

Merlin777
А в идеале еще обернуть весь код внутри тегов <script></script> в анонимную функцию (function() { /*тут код*/ })(); чтобы используемые переменные не засоряли глобальную область видимости. Поскольку в реалиях MyBB на форумах может одновременно использоваться множество скриптов от разных разработчиков, имена переменных могут пересекаться и вызывать конфликты.

Что-то оно не работает как надо, внутри  этой анонимной функции)

Я внутри <script></script> заменил var на let, это, судя по статьям в интернете, сужает область видимости до кода внутри фигурных скобок, { }   или, как в нашем случае, до кода внутри  <script></script>.

0

1579

Merlin777 написал(а):

Я внутри <script></script> заменил var на let,

А функции тем временем всё так же остались объявленными в глобальной области.
Так не работает?

Код:
<script>
(function() {

let count = 7; // Максимальное количество выводимых тем форума
let selectAct = 'hover'; // Вариант показа блока: 'click' (нажатие по символу рядом с названием темы) или 'hover' (наведение курсором на название темы)
let useSession = 1; // 1 - включить использование sessionStorage, 0 - выключить
 
 
function loadTopics(t, s) {
    const cacheTime = 10 * 60 * 1000; // 10 минут кэширования данных
    const now = Date.now();
    
    // Проверяем, есть ли данные в sessionStorage
    const cachedData = sessionStorage.getItem(s);
    if (useSession && cachedData) {
        const parsedData = JSON.parse(cachedData);
        
        // Проверяем, не устарели ли данные (кэш храним не дольше 10 минут)
        if (now - parsedData.timestamp < cacheTime) {
            t.find("ul").empty();
            parsedData.data.forEach(function (item) {
                t.find("ul").append('<li class="' + item.class + '"><a href="' + item.url + '">' + item.subject + "</a></li>");
            });
            return;
        } else {
            sessionStorage.removeItem(s); // Удаляем устаревшие данные
        }
    }
 
    // Если данных нет или они устарели, делаем запрос к API
    $.getJSON("/api.php?method=topic.get&forum_id=" + s + "&sort_by=last_post&sort_dir=desc&limit=100", function (response) {
        t.find("ul").empty();
        
        if (response && response.response && response.response.length > 0) {
            response.response.forEach(function (topic) {
                topic.sticky = parseInt(topic.sticky, 10);
                topic.closed = parseInt(topic.closed, 10);
            });
 
            // Сортировка закрепленных и обычных тем
            const stickyTopics = response.response.filter(function (topic) {
                return topic.sticky === 1;
            }).sort(function (a, b) {
                return b.last_post_date - a.last_post_date;
            });
 
            const nonStickyTopics = response.response.filter(function (topic) {
                return topic.sticky !== 1;
            }).sort(function (a, b) {
                return b.last_post_date - a.last_post_date;
            });
 
            // Объединение тем и создание списка
            const topics = stickyTopics.concat(nonStickyTopics).slice(0, count).map(function (topic) {
                let className = "";
                if (topic.sticky === 1) className += "sticky ";
                if (topic.closed === 1) className += "closed";
                return {
                    subject: topic.subject,
                    url: "/viewtopic.php?id=" + topic.id,
                    class: className.trim(),
                    last_post_date: topic.last_post_date
                };
            });
 
            // Отображаем темы
            topics.forEach(function (item) {
                t.find("ul").append('<li class="' + item.class + '"><a href="' + item.url + '">' + item.subject + "</a></li>");
            });
 
            // Сохраняем данные в sessionStorage с меткой времени
            if (useSession) {
                sessionStorage.setItem(s, JSON.stringify({
                    data: topics,
                    timestamp: now // Сохраняем текущее время
                }));
            }
        } else {
            t.find("ul").append("<li>В этом форуме нет тем.</li>");
        }
    }).fail(function (xhr, status, error) {
        t.find("ul").empty();
        console.log("Ошибка при загрузке данных.");
        if (GroupID === 1) {
            console.log('Произошла ошибка в скрипте. Код ошибки: ' + error, { sticky: true });
        }
    });
}
 
function showTopics(t) {
    const s = t.parents("tr").attr("id").match(/\d+/)[0];
    const topicsList = t.closest("tr").find(".topicslist");
 
    if (currentForumId !== s || !topicsList.length) {
        $(".topicslist").remove();
        t.closest("tr").find("h3").after('<div class="topicslist"><ul><li>Загружаю список тем...</li></ul></div>');
        loadTopics(t.closest("tr").find(".topicslist"), s);
        currentForumId = s;
 
        if (selectAct === "hover") {
            resetCloseTimeout(t.closest("tr").find(".topicslist"));
        }
    }
}
 
function resetCloseTimeout(t) {
    clearTimeout(closeTimeout);
    closeTimeout = setTimeout(function () {
        t.remove();
        currentForumId = null;
    }, 2000);
}
 
currentForumId = null;
closeTimeout = null;
 
if (selectAct === "hover") {
    $(".tclcon h3 a").on("mouseenter", function () {
        const s = $(this).parents("tr").attr("id").match(/\d+/)[0];
        if (currentForumId !== s) {
            showTopics($(this));
        }
    });
 
    $(document).on("mouseenter", ".topicslist, .tclcon h3 a", function () {
        clearTimeout(closeTimeout);
    });
 
    $(document).on("mouseleave", ".topicslist, .tclcon h3 a", function () {
        resetCloseTimeout($(".topicslist"));
    });
} else {
    $(".tclcon h3 a").each(function () {
        $(this).after('&nbsp;<span class="clickt" title="Показать список тем этого форума">&gt;</span>');
    });
 
    $(".clickt").on("click", function (e) {
        e.stopPropagation();
        const s = $(this).closest("tr").attr("id").match(/\d+/)[0];
        const topicsList = $(this).closest("tr").find(".topicslist");
 
        if (currentForumId === s && topicsList.length) {
            topicsList.remove();
            currentForumId = null;
        } else {
            showTopics($(this));
        }
    });
}
 
$(document).click(function (e) {
    if (!$(e.target).closest(".topicslist").length && !$(e.target).closest(".clickt").length) {
        $(".topicslist").remove();
        currentForumId = null;
    }
});

})();
</script>

+1

1580

Alex_63 написал(а):

Так не работает?

Работает, отредактировал :) Спасибо:)

+1


Вы здесь » Единый форум поддержки » Новые возможности форумов » Запросы по скриптам #11