(function() { function insertDetails(_, summary, details) { return "
" + summary + "" + details + "
"; } // replace all [details] BBCode with HTML 5.1 equivalent function replaceDetails(text) { text = text || ""; while (text !== (text = text.replace(/\[details=([^\]]+)\]((?:(?!\[details=[^\]]+\]|\[\/details\])[\S\s])*)\[\/details\]/ig, insertDetails))); // add new lines to make sure we *always* have a

element after and around // otherwise we can't hide the content since we can't target text nodes via CSS return text.replace(/<\/summary>/ig, "\n\n") .replace(/<\/details>/ig, "\n\n\n\n"); } Discourse.Dialect.addPreProcessor(function(text) { if (Discourse.SiteSettings.details_enabled) { text = replaceDetails(text); } return text; }); Discourse.Markdown.whiteListTag("details", "class", "elided"); })();