PageSourceSearch

https://decopy.ai/assets/common/js/footer.js

js decopy.ai collected 2026-10-01 15:21:51 UTC 5,123 bytes, 119 lines download raw bytes

1(async () => {
2
3    let footerMgr = {
4        langMap: {
5            '/zh/': 'zh',
6            '/ru/': 'ru',
7            '/de/': 'de',
8            '/fr/': 'fr',
9            '/es/': 'es',
10            '/pt/': 'pt',
11            '/jp/': 'ja'
12        },
13        initFooter: function (lan) {
14            let footerContainer = document.createElement('footer');
15            footerContainer.className = 'decopy-container-footer';
16
17            let copyrightData = config["copyright"];
18            let footCopyright = document.createElement('div');
19            footCopyright.className = 'decopy-container-footer-copyright';
20            footCopyright.innerText = footerMgr.getLanData(copyrightData, lan);
21
22            let footContent = document.createElement('div');
23            footContent.className = 'decopy-container-footer-content';
24            // footer logo
25            let footerLogo = document.createElement('a');
26            footerLogo.className = 'decopy-container-footer-logo';
27            footerLogo.href = 'https://decopy.ai/';
28            footerLogo.target = '_blank';
29            let logoImg = document.createElement('img');
30            logoImg.className = 'decopy-container-footer-logo';
31            logoImg.src = 'https://decopy.ai/assets/common/img/decopy-logo-text.png';
32            logoImg.alt = 'decopy logo';
33            footerLogo.appendChild(logoImg);
34            // footer link
35            let footerLink = document.createElement('div');
36            footerLink.className = 'decopy-container-footer-url';
37            let links = config["links"];
38            links.forEach(item => {
39                let section = document.createElement('div');
40                let title = document.createElement('p');
41                title.textContent = item.name[lan];
42                section.appendChild(title);
43                let linksContainer = document.createElement('div');
44                item.value.forEach(link => {
45                    let anchor = document.createElement('a');
46                    anchor.textContent = footerMgr.getLanData(link['text'], lan);
47                    anchor.href =  footerMgr.getLanData(link['url'], lan);
48                    anchor.className = 'decopy-container-footer-nav-link';
49                    anchor.target = '_blank';
50                    linksContainer.appendChild(anchor);
51                });
52                section.appendChild(linksContainer);
53                footerLink.appendChild(section);
54            });
55            // footer Know Us
56            let knowUs = config["knowUs"];
57            let footerKnowus = document.createElement('div');
58            footerKnowus.className = 'decopy-container-footer-knowus';
59            let footerKnowusTitle = document.createElement('p');
60            footerKnowusTitle.innerText = footerMgr.getLanData(knowUs['name'], lan);
61            let footerKnowusLinks = document.createElement('div');
62            let knowUsLinks = knowUs["links"];
63            knowUsLinks.forEach(item => {
64                let footerKnowusItem = document.createElement('a');
65                footerKnowusItem.innerHTML = item['svg'];
66                footerKnowusItem.href = item['url'];
67                footerKnowusItem.target = '_blank';
68                footerKnowusLinks.appendChild(footerKnowusItem);
69            });
70            footerKnowus.appendChild(footerKnowusTitle);
71            footerKnowus.appendChild(footerKnowusLinks);
72            footContent.appendChild(footerLogo);
73            footContent.appendChild(footerLink);
74            footContent.appendChild(footerKnowus);
75            footerContainer.appendChild(footContent);
76            footerContainer.appendChild(footCopyright);
77            document.body.appendChild(footerContainer);
78        },
79        initFooterConfig: async function () {
80            let defaultConfigUrl = "https://decopy.ai/assets/common/settings/footer.json";
81            let configData = {};
82            try {
83                let response = await fetch(defaultConfigUrl, { caches: "no-caches" });
84                configData = await response.json();
85            } catch (error) {
86                console.error("配置数据解析错误:", error);
87            }
88            config = configData;
89        },
90        getLanData: function (data, lan) {
91            return data[lan]?data[lan]:data['en'];
92        }
93    }
94
95    let init = async function () {
96
97        // 数据初始化
98        let path = window.location.pathname;
99        let country = Object.keys(footerMgr.langMap).find(key => path.includes(key));
100        let lan = country ? footerMgr.langMap[country] : 'en';
101
102        // 定义全局变量
103        window.config;
104
105        await footerMgr.initFooterConfig();
106
107        footerMgr.initFooter(lan);
108    }
109
110    document.addEventListener('DOMContentLoaded', async function () {
111        // 确保 DOM 加载完成后运行
112        await init()
113    });
114    window.addEventListener('initRemoteFooterEvent', async function () {
115        // 通过组件远程触发事件
116        await init()
117    });
118
119})();

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.