baxi_find_preview

baxitv_find_preview

目前為 2024-09-07 提交的版本,檢視 最新版本

// ==UserScript==
// @name         baxi_find_preview
// @namespace    com.oldtan.find_preview
// @version      1.1.4
// @description  baxitv_find_preview
// @author       oldtan
// @include       https://www.baxi.tv/forum-54-*.html
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant        none


// ==/UserScript==
function sleep(time){
    var timeStamp = new Date().getTime();
    var endTime = timeStamp + time;
    while(true){
        if (new Date().getTime() > endTime){
            return;
        }
    }
}

window.addEventListener('load', function() {
    //console.log(123111111111111111111111111111)
    // // 获取所有的超链接元素
    // var links = document.querySelectorAll('a');
    // // 遍历这些超链接并检查文本内容
    // links.forEach(function(link) {
    //      // 检查超链接文本是否等于 '预览'
    //     if (link.textContent === '预览') {
    //         // 获取超链接所在的 tbody 元素的 ID
    //         var tbodyElement = link.closest('tbody');
    //         if (tbodyElement.id.includes('stick')){
    //             return
    //         }
    //         if (tbodyElement) {
    //             // 提取 tid,这里假设 tbody 的 ID 是 'thread_' + tid
    //             var tid = tbodyElement.id.replace('normalthread_', '');
    //             // 调用 forum.js 中的 previewThread 函数
    //             previewThread(tid, tbodyElement.id);
    //             // 确保预览元素可见
    //             var previewDiv = document.getElementById('threadPreviewTR_' + tid);
    //             if (previewDiv) {
    //                 previewDiv.style.display = 'revert';
    //             }
    //         }
    //     }
    // });

    // // 获取所有的超链接元素
    // var links = document.querySelectorAll('a');
    // // 遍历这些超链接并检查文本内容
    // links.forEach(function(link) {
    //     // 检查超链接文本是否等于 '预览'
    //     if (link.textContent === '预览') {
    //         // 获取超链接所在的 tbody 元素的 ID
    //         var tbody = link.closest('tbody').getAttribute('id');
    //         if (tbody.includes('stick')){
    //             return
    //         }
    //         if (tbody) {
    //             // 提取 tid,这里假设 tbody 的 ID 是 'thread_' + tid
    //             var tid = tbody.split('_')[1];
    //             // 调用 forum.js 中的 previewThread 函数
    //             previewThread(tid, tbody);
    //             // 确保预览元素可见
    //             var previewDiv = document.getElementById('threadPreviewTR_' + tid);
    //             if (previewDiv) {
    //                 previewDiv.style.display = 'revert';
    //             }
    //         }
    //     }
    // });

    var scbar = document.getElementById('scbar');

    // 初始化时设置 scbar 的样式
    //setInitialStyle(scbar);

    // 监听页面滚动事件
    // window.addEventListener('scroll', function() {
    //     if (window.scrollY > 0) { // 若页面滚动超过0,则应用滚动样式
    //         setScrollStyle(scbar);
    //     } else { // 若页面滚动回到顶部,则重新应用初始化样式
    //         setInitialStyle(scbar);
    //     }
    // });
    var navbar = document.getElementById('scbar');
    var navbarOffsetTop = navbar.offsetTop; // 导航栏距离页面顶部的距离

    window.addEventListener('scroll', function() {
        var scrollTop = window.pageYOffset || document.documentElement.scrollTop;

        if (scrollTop > navbarOffsetTop) {
            setScrollStyle(scbar);
        } else {
            setInitialStyle(scbar);
        }
    });
    // 添加键盘事件监听器
        document.addEventListener('keydown', function(event) {
            // 检查是否同时按下了 Ctrl 和 'F' 或 'S' 键
            // if (event.ctrlKey && (event.key === 'D' || event.key === 'S')) {
            if (event.key === 'Tab') {
                // 阻止默认的 Tab 行为
                event.preventDefault();
                // 获取输入框元素
                var input = document.getElementById('scbar_txt');
                // 让输入框获取焦点
                input.focus();
                // 选中输入框中的所有文本
                input.select();
            }
        });

    // 获取搜索提交按钮和搜索输入框
    var searchButton = document.getElementById('scbar_btn');
    var searchInput = document.getElementById('scbar_txt');
    var searchForm = document.getElementById('scbar_form');

    // searchButton.addEventListener('click', function() {
    searchForm.addEventListener('submit', function(event) {
        event.preventDefault(); // 阻止表单默认的提交
        //先隐藏所有预览
        hidePreview();
        //移除之前的高亮显示
        removeHighlight();
        //返回到顶部
        var separatorline = document.getElementById('stickthread_410943');
            if (separatorline) {
                // 滚动到 ID 为 'separatorline' 的元素
                separatorline.scrollIntoView();
            }
        // 获取搜索框的值
        var searchValue = searchInput.value.toLowerCase();
        var displayElement = document.getElementById('scbar_type');
        if (searchValue) {
            // 获取所有超链接
            var links = document.getElementsByClassName('s xst');
            var matchCount = 0; // 重置匹配计数器
            var firstMatch = null; // 存储第一个匹配的超链接
            // 遍历超链接
            for (var i = 0; i < links.length; i++) {
                var link = links[i];
                // 检查超链接文本是否包含搜索值
                if (link.textContent.toLowerCase().includes(searchValue)) {
                    // 打印匹配的超链接文本内容
                    // console.log(link.textContent);
                    matchCount++;
                    // 高亮显示匹配的超链接文本
                    highlightText(link, searchValue);
                    // 获取超链接所在的 tbody 元素的 ID
                    var tbody = link.closest('tbody').getAttribute('id');
                    if (tbody.includes('stick')){
                        return
                    }
                    if (tbody) {
                        // 提取 tid,这里假设 tbody 的 ID 是 'thread_' + tid
                        var tid = tbody.split('_')[1];
                        // 调用 forum.js 中的 previewThread 函数
                        previewThread(tid, tbody);
                        // 确保预览元素可见
                        var previewDiv = document.getElementById('threadPreviewTR_' + tid);
                        if (previewDiv) {
                            previewDiv.style.display = 'revert';
                        }
                        if (!firstMatch) {
                            firstMatch = link; // 存储第一个匹配的超链接
                        }
                    }
                    //返回到顶部
                    if(i==0){
                        previewDiv.scrollIntoView({ behavior: 'smooth', block: 'center' });
                    }

                }
            }
            // 找到当前链接的父节点
            var previousElement = firstMatch.closest('tbody').previousElementSibling;
            // console.log(previousElement)
            // previousElement.scrollIntoView({ behavior: 'smooth', block: 'start' });
            if(previousElement && previousElement.tagName === 'TBODY'){
                console.log(previousElement+0)
                previousElement.scrollIntoView({ behavior: 'smooth', block: 'start' });
            }else if(previousElement && previousElement.tagName === 'SCRIPT'){
                // previousElement = previousElement.previousElementSibling;
                console.log(previousElement+1)
                // previousElement.scrollIntoView({ behavior: 'smooth', block: 'start' });
                var stickElement = document.getElementById('threadlist');//threadlist
                stickElement.scrollIntoView({ behavior: 'smooth', block: 'start' });
            }

            // 获取父节点的前一个节点
            // var previousNode = parentElement.previousSibling;
            displayElement.textContent = matchCount;
        } else {
            console.log('Please enter a search term.');
            displayElement.textContent = 0;
        }
        // 使用 setTimeout 延迟获取所有类名为 'previewvfastpost' 的元素
        setTimeout(function() {
            var elements = document.getElementsByClassName('previewvfastpost');
            // console.log(elements.length);
            // 遍历所有元素并隐藏它们
            for (var j = 0; j < elements.length; j++) {

                elements[j].style.display = 'none';

            }
        }, 500); // 毫秒
    });


});

function hidePreview(){
    // 获取所有的超链接元素
    var links = document.querySelectorAll('a');
    // 遍历这些超链接并检查文本内容
    links.forEach(function(link) {
        // 检查超链接文本是否等于 '预览'
        if (link.textContent === '隐藏预览') {
            // 获取超链接所在的 tbody 元素的 ID
            var tbody = link.closest('tbody').getAttribute('id');
            if (tbody.includes('stick')){
                return
            }
            if (tbody) {
                // 提取 tid,这里假设 tbody 的 ID 是 'thread_' + tid
                var tid = tbody.split('_')[1];
                // 调用 forum.js 中的 previewThread 函数
                previewThread(tid, tbody);
                // 确保预览元素可见
                var previewDiv = document.getElementById('threadPreviewTR_' + tid);
                if (previewDiv) {
                    previewDiv.style.display = 'revert';
                }
            }
        }
    });

}

// 函数:高亮显示匹配的文本
function highlightText(element, searchValue) {
    var innerHTML = element.innerHTML; // 获取元素的原始HTML
    var highlighted = innerHTML.replace(new RegExp(searchValue, 'gi'), function(match) {
        return '<span class="ai-assist-highlight">' + match + '</span>'; // 将匹配的文本包裹在span中,并添加高亮样式类
    });
    element.innerHTML = highlighted; // 更新元素的HTML以显示高亮文本
}

// 移除高亮显示的函数
function removeHighlight() {
    var highlights = document.querySelectorAll('.ai-assist-highlight');
    highlights.forEach(function(el) {
        // 将高亮文本的父级超链接的文本内容恢复原样
        var parentLink = el.parentNode;
        parentLink.innerHTML = parentLink.textContent;
    });
}

// 定义初始化样式
function setInitialStyle(scbar) {
    scbar.style.overflow = 'hidden';
    scbar.style.height = '42px';
    scbar.style.lineHeight = '42px';
    scbar.style.borderTop = '1px solid #FFF';
    scbar.style.borderBottom = '1px solid #E9EFF5';
    scbar.style.background = '#E8EFF5';
    scbar.style.position = 'static'; // 非固定定位
    scbar.style.left = '234.667px';
    scbar.style.zIndex = '199';
    scbar.style.top = '0px';
}

// 定义滚动时的样式
function setScrollStyle(scbar) {
    scbar.style.borderLeftWidth = '0px';
    scbar.style.borderRightWidth = '0px';
    scbar.style.height = '42px';
    scbar.style.lineHeight = '42px';
    scbar.style.width = '960px';
    scbar.style.position = 'fixed';
    scbar.style.opacity = '1';
    scbar.style.left = '234.667px';
    scbar.style.zIndex = '199';
    scbar.style.top = '0px';
}
function Toast(msg,duration){
      duration=isNaN(duration)?3000:duration;
      var m = document.createElement('div');
      m.innerHTML = msg;
      m.style.cssText="max-width:60%;min-width: 150px;padding:0 14px;height: 60px;color: rgb(255, 255, 255);line-height: 60px;text-align: center;border-radius: 4px;position: fixed;top: 40%;left: 50%;transform: translate(-50%, -50%);z-index: 999999;background: rgba(0, 0, 0,.7);font-size: 16px;";
      document.body.appendChild(m);
      setTimeout(function() {
        var d = 0.5;
        m.style.webkitTransition = '-webkit-transform ' + d + 's ease-in, opacity ' + d + 's ease-in';
        m.style.opacity = '0';
        setTimeout(function() { document.body.removeChild(m) }, d * 1000);
      }, duration);
    }


function Toast2(msg,duration){
      duration=isNaN(duration)?3000:duration;
      var m = document.createElement('div');
      m.innerHTML = msg;
      m.style.cssText="max-width:60%;min-width: 150px;padding:0 14px;height: 60px;color: rgb(255, 255, 255);line-height: 60px;text-align: center;border-radius: 4px;position: fixed;top: 50%;left: 50%;transform: translate(-50%, -50%);z-index: 999999;background: rgba(0, 0, 0,.7);font-size: 16px;";
      document.body.appendChild(m);
      setTimeout(function() {
        var d = 0.5;
        m.style.webkitTransition = '-webkit-transform ' + d + 's ease-in, opacity ' + d + 's ease-in';
        m.style.opacity = '0';
        setTimeout(function() { document.body.removeChild(m) }, d * 1000);
      }, duration);
    }



QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址