| var text_next_clue = "Hint # of #"; | |
| var text_last_clue = "No hints anymore – close"; | |
| function childrenWithTag(el, tag) { | |
| if (el == null) return null; | |
| var ch = el.childNodes; | |
| if (ch == null) return null; | |
| var ct = []; | |
| for (var i = 0; i < ch.length; i++) { | |
| if (ch[i].nodeType == 1 && ch[i].nodeName == tag) { | |
| ct.push(ch[i]); | |
| } | |
| } | |
| return ct; | |
| } | |
| function clueify_clue(li, ix, nx) { | |
| var tx = text_next_clue; | |
| tx = tx.replace("#", ix + 1); | |
| tx = tx.replace("#", nx); | |
| var ht = li.innerHTML; | |
| li.innerHTML = "<a href=\"#\">" | |
| + tx + "</a> <span class=\"hint\">" | |
| + ht + "</span>"; | |
| li.firstChild.onclick = reveal; | |
| if (ix) li.style.display = "none"; | |
| } | |
| function clueify_hint(ol) { | |
| var li = childrenWithTag(ol, "LI"); | |
| for (var i = 0; i < li.length; i++) { | |
| clueify_clue(li[i], i, li.length); | |
| } | |
| var li = document.createElement("li"); | |
| li.style.display = "none"; | |
| li.innerHTML = "<a href=\"#\">" + text_last_clue + "</a>"; | |
| li.firstChild.onclick = collapse; | |
| ol.appendChild(li); | |
| } | |
| function clueify(dl) { | |
| var dd = childrenWithTag(dl, "DD"); | |
| for (var i = 0; i < dd.length; i++) { | |
| var ol = childrenWithTag(dd[i], "OL"); | |
| for (var j = 0; j < ol.length; j++) { | |
| ol[j].style.listStyleType = "none"; | |
| clueify_hint(ol[j]); | |
| } | |
| } | |
| } | |
| function reveal() { | |
| var sb = this.nextSibling; | |
| while (sb) { | |
| if (sb.nodeType == 1 && sb.nodeName == "SPAN") { | |
| sb.firstChild.style.color = "black"; | |
| sb.style.display = "inline"; | |
| break; | |
| } | |
| sb = sb.nextSibling; | |
| } | |
| this.style.display = "none"; | |
| next_clue(this.parentNode); | |
| return false; | |
| } | |
| function next_clue(li) { | |
| li = li.nextSibling; | |
| while (li) { | |
| if (li.nodeType == 1 && li.nodeName == "LI") { | |
| li.style.display = "list-item"; | |
| var aa = childrenWithTag(li, "A"); | |
| if (aa.length > 0) aa[0].focus(); | |
| break; | |
| } | |
| li = li.nextSibling; | |
| } | |
| return false; | |
| } | |
| function collapse() { | |
| var li = this.parentNode; | |
| var ol = li.parentNode; | |
| var aa = null; | |
| li = childrenWithTag(ol, "LI"); | |
| for (var i = 0; i < li.length; i++) { | |
| var sb = li[i].firstChild; | |
| while (sb) { | |
| if (sb.nodeName == "A") { | |
| sb.style.display = "inline"; | |
| if (aa == null) aa = sb; | |
| } | |
| if (sb.nodeName == "SPAN") { | |
| sb.style.display = "none"; | |
| } | |
| sb = sb.nextSibling; | |
| } | |
| li[i].style.display = i ? "none" : "list-item"; | |
| } | |
| if (aa) aa.focus(); | |
| return false; | |
| } | |
Xet Storage Details
- Size:
- 2.5 kB
- Xet hash:
- d291a72bc793f40f3b7775f6d36681d8fa1d060ed4af02d39a57296f8ee53b56
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.