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.