diff --git a/bbcode/bbcode.js b/bbcode/bbcode.js new file mode 100644 index 0000000000000000000000000000000000000000..51a7cb74adabda3e111b314df2ff8463e888e9d9 --- /dev/null +++ b/bbcode/bbcode.js @@ -0,0 +1,68 @@ +let el = document.getElementsByClassName("nfo")[0].children[0] +let str = el.innerText + +var r = /\[(\/)?(\w{0,5})(=([^\]]*))?\]/g + +let result; +let stk = []; + +let result_str = ""; +let last_idx = 0; + +let other; + +while ((result = r.exec(str)) !== null) { + index = result.index + var [matched, end, tag, _, param] = result + if (! end) { /* if start tag */ + o = Object() + o.tag = tag + o.str = "" + o.index = index + matched.length + o.param = param + if (stk.length === 0) { + result_str += str.substring(last_idx, index); + } else { + other = stk.last(); + other.str += str.substring(other.index, index); + } + last_idx = o.index; + stk.push(o) + + } else { /* if end tag */ + parent = stk.pop() + if (parent.tag !== tag) { + alert("Non matching tags"); + } else { + parent.str += str.substring(last_idx, index); + parent.str = parent.str.strip() + last_idx = index + matched.length; + var s; + switch (parent.tag) { + case "url": + if (typeof parent.param === "undefined") { + s = "<a href='" + parent.str; + } else { + s = "<a href='" + parent.param; + } + s += "'>" + parent.str + "</a>"; + break; + + case "img": + s = "<img src='" + parent.str + "'/>" + break; + + default: + s = "<b>Unknown tag <pre>" + parent.str + "</pre></b>" + break; + } + if (stk.length === 0) { + result_str += s; + } else { + stk.last().str += s; + } + } + } +} + +el.innerHTML = result_str