微件:External demands

来自Hyacinth
草awa留言 | 贡献2024年4月11日 (四) 09:36的版本
跳转到导航 跳转到搜索
<script>
const elements = document.getElementsByClassName('external_demand_span');

if (elements.length == 0) {
    const externalDemandShell = document.getElementById('external_demand_shell');
    externalDemandShell.style.display = 'none';
} else {
	const appendTo = document.getElementById('external_demand');

	const cats = new Map();

	for (let i = 0; i < elements.length; i++) {
	    const element = elements[i];
	    const clone = element.cloneNode(true);
	    console.log(clone.title);
	    if (!cats.has(clone.title)) {
	    	cats.set(clone.title,new Array());
    	}
    	cats.get(clone.title).push(clone);
    	clone.style.display = 'inline';
	    clone.classList.remove('external_demand_span')
	}

	function handler(value, key, map) {
    	console.log(key);
    	console.log(value);
    	const p = document.createElement('p');
    	p.innerText = '来自' + key + '的条目:';
    	appendTo.appendChild(p);
    	const duplicates = new Map();
    	const liShell = new Map();
    	const ul = document.createElement('ul');
    	value.forEach((s) => {
        	const externalTarget = s.lastChild.title;
        	if (duplicates.has(externalTarget)) {
        	    const duplicatedAlias = duplicates.get(externalTarget).lastChild.cloneNode(true);
        	    if (!duplicates.get(externalTarget).lastChild.className == 'external_demand_duplicate') {
        	        const duplicatedUl = document.createElement('ul');
        	        const duplicateLi = document.createElement('li');
        	        duplicateLi.appendChild(duplicatedAlias);
        	        duplicateUl.appendChild(duplicateLi);
        	        liShell.get(externalTarget).appendChild(duplicateUl);
        	    }
        	} else {
        	    const li = document.createElement('li');
        		duplicates.set(externalTarget, s);
        		liShell.set(externalTarget, li);
        		li.appendChild(s);
        		ul.appendChild(li);
        	}
    	})
	    appendTo.appendChild(ul);
	}

	cats.forEach(handler);
}
</script>