1/** 2 * A utility for attaching listeners and handling events associated with spoiler visibility toggling. 3 */ 4var spoilers = { 5 6 /** 7 * Gather all UserSpoiler DIVs and attempt to augment them with spoiler capabilities. 8 */ 9 findAndReplace: function() { 10 jQuery("div.Spoiler", this).each(function(i, el) { 11 spoilers.replaceSpoiler(el); 12 }); 13 }, 14 15 /** 16 * Add spoiler capabilities to a specific HTML element. 17 * @param {HTMLElement} spoiler The element we're adding hide/show capabilities to. 18 */ 19 replaceSpoiler: function(spoiler) { 20 var spoilerObject = jQuery(spoiler); 21 22 // Has this element already been setup as a spoiler? Skip it. 23 if (spoilerObject.hasClass("SpoilerConfigured")) { 24 return; 25 } 26 27 // Build the individual elements. 28 var text = document.createElement("div"); 29 text.className = "SpoilerText"; 30 while(spoiler.firstChild) { 31 text.appendChild(spoiler.firstChild); 32 } 33 34 var title = document.createElement("div"); 35 title.className = "SpoilerTitle"; 36 title.innerHTML = gdn.definition("Spoiler", "Spoiler"); 37 38 var reveal = document.createElement("div"); 39 reveal.className = "SpoilerReveal"; 40 41 var spoilerButton = document.createElement("input"); 42 spoilerButton.type = "button"; 43 spoilerButton.value = gdn.definition("show", "show"); 44 spoilerButton.className = "SpoilerToggle"; 45 46 // Assemble the elements. 47 spoiler.appendChild(title); 48 spoiler.appendChild(reveal); 49 spoiler.appendChild(text); 50 title.appendChild(spoilerButton); 51 52 // Add an event listener to the toggle button. 53 spoilerObject.on("click", "input.SpoilerToggle", function(event) { 54 event.stopPropagation(); 55 spoilers.toggleSpoiler(jQuery(event.delegateTarget), jQuery(event.target)); 56 }); 57 58 // Flag this spoiler as setup. 59 spoilerObject.addClass("SpoilerConfigured"); 60 }, 61 62 /** 63 * Toggle a spoiler's visibility on or off. 64 * @param {object} spoiler The primary spoiler HTML element. 65 * @param {object} spoilerButton The button HTML element used to trigger the toggle. 66 */ 67 toggleSpoiler: function(spoiler, spoilerButton) { 68 var thisSpoilerText = spoiler.find("div.SpoilerText").first(); 69 var thisSpoilerStatus = thisSpoilerText.css("display"); 70 var newSpoilerStatus = (thisSpoilerStatus === "none") ? "block" : "none"; 71 72 thisSpoilerText.css("display", newSpoilerStatus); 73 74 if (newSpoilerStatus === "none") { 75 spoilerButton.val(gdn.definition("show", "show")); 76 } else { 77 spoilerButton.val(gdn.definition("hide", "hide")); 78 } 79 } 80}; 81 82jQuery(document).on("contentLoad", function(e) { 83 spoilers.findAndReplace.apply(e.target); 84});
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.