summary refs log tree commit diff
path: root/assets/js/main_new.js
blob: 4f14c789ede4afb0148463ca3277dba32b343cde (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
$(function () {
    $("div#landlord").mouseenter(function () {
        $("div.live_ico_box").fadeIn();
    });
    $("div#landlord").mouseleave(function () {
        $("div.live_ico_box").fadeOut();
    });
    
    const urlParams = new URLSearchParams(window.location.search);
    const keyword = urlParams.get('kw')?.trim();

    if (!keyword) return;

    // 转义正则表达式特殊字符,避免安全问题
    const escapedKeyword = keyword.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
    // 创建不区分大小写的正则表达式(全局匹配)
    const regex = new RegExp(`(${escapedKeyword})`, 'gi');

    // 递归遍历并高亮文本节点
    const escapeHTML = str => str.replace(/[&<>"']/g, 
        tag => ({
            '&': '&amp;',
            '<': '&lt;',
            '>': '&gt;',
            '"': '&quot;',
            "'": '&#39;'
        }[tag] || tag));
    function highlightTextNodes(element) {
        $(element).contents().each(function () {
            if (this.nodeType === Node.TEXT_NODE) {
                const $this = $(this);
                const text = escapeHTML($this.text());

                // 使用正则替换并保留原始大小写
                if (regex.test(text)) {
                    const replaced = text.replace(regex, '<mark>$1</mark>');
                    $this.replaceWith(replaced);
                }
            } else if (
                this.nodeType === Node.ELEMENT_NODE &&
                !$(this).is('script, style, noscript, textarea')
            ) {
                highlightTextNodes(this);
            }
        });
    }

    $('section').each(function () {
        highlightTextNodes(this);
    });
});

$(function () {
    var codeBlocks = document.querySelectorAll('div.highlight');

    codeBlocks.forEach(function (codeBlock) {
        var copyButton = document.createElement('button');
        copyButton.className = 'copy';
        copyButton.type = 'button';
        copyButton.innerText = '📋';

        codeBlock.append(copyButton);

        copyButton.addEventListener('click', function () {
            var code = codeBlock.querySelector('pre code').innerText.trim();
            window.navigator.clipboard.writeText(code)
                .then(() => {
                    copyButton.innerText = '✅';
                })
                .catch(err => {
                    copyButton.innerText = '❌';
                    console.error('Failed to copy:', err);
                });

            setTimeout(function () {
                copyButton.innerText = '📋';
            }, 1500);
        });
    });
});