Skip to content

Instantly share code, notes, and snippets.

@lortonx
Created January 22, 2017 21:41
Show Gist options
  • Save lortonx/95946e35d5de2d20694352dcfe12ff86 to your computer and use it in GitHub Desktop.
Save lortonx/95946e35d5de2d20694352dcfe12ff86 to your computer and use it in GitHub Desktop.
var XBBCODE=function(){function t(){f=[];var a,b,c;for(a in d)if(d.hasOwnProperty(a)){"*"===a?f.push("\\"+a):(f.push(a),d[a].noParse&&u.push(a));d[a].validChildLookup={};d[a].validParentLookup={};d[a].restrictParentsTo=d[a].restrictParentsTo||[];d[a].restrictChildrenTo=d[a].restrictChildrenTo||[];c=d[a].restrictChildrenTo.length;for(b=0;c>b;b++)d[a].validChildLookup[d[a].restrictChildrenTo[b]]=!0;c=d[a].restrictParentsTo.length;for(b=0;c>b;b++)d[a].validParentLookup[d[a].restrictParentsTo[b]]=!0}n=
RegExp("<bbcl=([0-9]+) ("+f.join("|")+")([ =][^>]*?)?>((?:.|[\\r\\n])*?)<bbcl=\\1 /\\2>","gi");v=RegExp("\\[("+f.join("|")+")([ =][^\\]]*?)?\\]([^\\[]*?)\\[/\\1\\]","gi");w=RegExp("\\[("+u.join("|")+")([ =][^\\]]*?)?\\]([\\s\\S]*?)\\[/\\1\\]","gi");a=[];for(b=0;b<f.length;b++)"\\*"!==f[b]&&a.push("/"+f[b]);x=RegExp("(\\[)((?:"+f.join("|")+")(?:[ =][^\\]]*?)?)(\\])","gi");y=RegExp("(\\[)("+a.join("|")+")(\\])","gi")}function z(a,b,c,l,e,p,m){m=m||[];c++;var h,k,g;e=RegExp("(<bbcl="+c+" )("+f.join("|")+
")([ =>])","gi");c=RegExp("(<bbcl="+c+" )("+f.join("|")+")([ =>])","i");b=p.match(e)||[];l=d[a]||{};e.lastIndex=0;b||(p="");for(k=0;k<b.length;k++)c.lastIndex=0,g=b[k].match(c)[2].toLowerCase(),l&&l.restrictChildrenTo&&0<l.restrictChildrenTo.length&&(l.validChildLookup[g]||(h='The tag "'+g+'" is not allowed as a child of the tag "'+a+'".',m.push(h))),e=d[g]||{},0<e.restrictParentsTo.length&&(e.validParentLookup[a]||(h='The tag "'+a+'" is not allowed as a parent of the tag "'+g+'".',m.push(h)));return p=
p.replace(n,function(a,b,c,d,e){return m=z(c.toLowerCase(),a,b,c,d,e,m),a}),m}function C(a){return a=a.replace(/\<([^\>][^\>]*?)\>/gi,function(a,c){return null===c.match(/^bbcl=([0-9]+) /)?"<bbcl=0 "+c+">":"<"+c.replace(/^(bbcl=)([0-9]+)/,function(a,b,c){return b+(parseInt(c,10)+1)})+">"})}function D(a){a=a.replace(/\[(?!\*[ =\]]|list([ =][^\]]*)?\]|\/list[\]])/gi,"<");for(a=a.replace(/\[(?=list([ =][^\]]*)?\]|\/list[\]])/gi,">");a!==(a=a.replace(/>list([ =][^\]]*)?\]([^>]*?)(>\/list])/gi,function(a,
c,d){for(;a!==(a=a.replace(/\[\*\]([^\[]*?)(\[\*\]|>\/list])/i,function(a,b,c){return c=">/list]"===c.toLowerCase()?"</*]</list]":"</*][*]","<*]"+b+c})););return a=a.replace(/>/g,"<")})););return a=a.replace(/</g,"[")}function E(a){for(;a!==(a=a.replace(v,function(a,c,d,e){return a=a.replace(/\[/g,"<"),a=a.replace(/\]/g,">"),C(a)})););return a}var d,f,n,v,w,x,y,q={},g=/^((?:https?:\/\/)(?:[^\s]+))$/,h=/^(?:aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen)$/,
k=/^#?[a-fA-F0-9]{6}$/,A=/[^\s@]+@[^\s@]+\.[^\s@]+/,r=/^([a-z][a-z0-9_]+|"[a-z][a-z0-9_\s]+")$/i,u=[];d={b:{openTag:function(a,b){return'<span class="xbbcode-b">'},closeTag:function(a,b){return"</span>"}},spoiler:{openTag:function(a,b){var c;return c=a?a.substr(1):b.replace(/<.*?>/g,""),g.lastIndex=0,'<div class="xbbcode-spoiler"><a href="#" class="xbbcode-spoiler-desc">'+c.replace(/(['"\\])/g,"\\$1")+'</a><div style="display:none" class="xbbcode-spoiler-text">'},closeTag:function(a,b){return"</div></div>"}},
bbcode:{openTag:function(a,b){return""},closeTag:function(a,b){return""}},center:{openTag:function(a,b){return'<span class="xbbcode-center">'},closeTag:function(a,b){return"</span>"}},code:{openTag:function(a,b){return'<span class="xbbcode-code">'},closeTag:function(a,b){return"</span>"},noParse:!0},color:{openTag:function(a,b){var c=(a||"").substr(1).toLowerCase()||"black";return h.lastIndex=0,k.lastIndex=0,h.test(c)||(k.test(c)?"#"!==c.substr(0,1)&&(c="#"+c):c="black"),'<span style="color:'+c+'">'},
closeTag:function(a,b){return"</span>"}},email:{openTag:function(a,b){var c;return c=a?a.substr(1):b.replace(/<.*?>/g,""),A.lastIndex=0,A.test(c)?'<a href="mailto:'+c+'">':"<a>"},closeTag:function(a,b){return"</a>"}},face:{openTag:function(a,b){var c=(a||"").substr(1)||"inherit";return r.lastIndex=0,r.test(c)||(c="inherit"),'<span style="font-family:'+c+'">'},closeTag:function(a,b){return"</span>"}},font:{openTag:function(a,b){var c=(a||"").substr(1)||"inherit";return r.lastIndex=0,r.test(c)||(c=
"inherit"),'<span style="font-family:'+c+'">'},closeTag:function(a,b){return"</span>"}},i:{openTag:function(a,b){return'<span class="xbbcode-i">'},closeTag:function(a,b){return"</span>"}},img:{openTag:function(a,b){var c=b;return g.lastIndex=0,g.test(c)||(c=""),'<img src="'+c+'" />'},closeTag:function(a,b){return""},displayContent:!1},justify:{openTag:function(a,b){return'<span class="xbbcode-justify">'},closeTag:function(a,b){return"</span>"}},large:{openTag:function(a,b){var c=(a||"").substr(1)||
"inherit";return h.lastIndex=0,k.lastIndex=0,h.test(c)||(k.test(c)?"#"!==c.substr(0,1)&&(c="#"+c):c="inherit"),'<span class="xbbcode-size-36" style="color:'+c+'">'},closeTag:function(a,b){return"</span>"}},left:{openTag:function(a,b){return'<span class="xbbcode-left">'},closeTag:function(a,b){return"</span>"}},li:{openTag:function(a,b){return"<li>"},closeTag:function(a,b){return"</li>"},restrictParentsTo:["list","ul","ol"]},list:{openTag:function(a,b){return"<ul>"},closeTag:function(a,b){return"</ul>"},
restrictChildrenTo:["*","li"]},noparse:{openTag:function(a,b){return""},closeTag:function(a,b){return""},noParse:!0},ol:{openTag:function(a,b){return"<ol>"},closeTag:function(a,b){return"</ol>"},restrictChildrenTo:["*","li"]},php:{openTag:function(a,b){return'<span class="xbbcode-code">'},closeTag:function(a,b){return"</span>"},noParse:!0},quote:{openTag:function(a,b){return'<blockquote class="xbbcode-blockquote">'},closeTag:function(a,b){return"</blockquote>"}},right:{openTag:function(a,b){return'<span class="xbbcode-right">'},
closeTag:function(a,b){return"</span>"}},s:{openTag:function(a,b){return'<span class="xbbcode-s">'},closeTag:function(a,b){return"</span>"}},size:{openTag:function(a,b){var c=parseInt((a||"").substr(1),10)||0;return(4>c||40<c)&&(c=14),'<span class="xbbcode-size-'+c+'">'},closeTag:function(a,b){return"</span>"}},small:{openTag:function(a,b){var c=(a||"").substr(1)||"inherit";return h.lastIndex=0,k.lastIndex=0,h.test(c)||(k.test(c)?"#"!==c.substr(0,1)&&(c="#"+c):c="inherit"),'<span class="xbbcode-size-10" style="color:'+
c+'">'},closeTag:function(a,b){return"</span>"}},sub:{openTag:function(a,b){return"<sub>"},closeTag:function(a,b){return"</sub>"}},sup:{openTag:function(a,b){return"<sup>"},closeTag:function(a,b){return"</sup>"}},table:{openTag:function(a,b){return'<table class="xbbcode-table">'},closeTag:function(a,b){return"</table>"},restrictChildrenTo:["tbody","thead","tfoot","tr"]},tbody:{openTag:function(a,b){return"<tbody>"},closeTag:function(a,b){return"</tbody>"},restrictChildrenTo:["tr"],restrictParentsTo:["table"]},
tfoot:{openTag:function(a,b){return"<tfoot>"},closeTag:function(a,b){return"</tfoot>"},restrictChildrenTo:["tr"],restrictParentsTo:["table"]},thead:{openTag:function(a,b){return'<thead class="xbbcode-thead">'},closeTag:function(a,b){return"</thead>"},restrictChildrenTo:["tr"],restrictParentsTo:["table"]},td:{openTag:function(a,b){return'<td class="xbbcode-td">'},closeTag:function(a,b){return"</td>"},restrictParentsTo:["tr"]},th:{openTag:function(a,b){return'<th class="xbbcode-th">'},closeTag:function(a,
b){return"</th>"},restrictParentsTo:["tr"]},tr:{openTag:function(a,b){return'<tr class="xbbcode-tr">'},closeTag:function(a,b){return"</tr>"},restrictChildrenTo:["td","th"],restrictParentsTo:["table","tbody","tfoot","thead"]},u:{openTag:function(a,b){return'<span class="xbbcode-u">'},closeTag:function(a,b){return"</span>"}},ul:{openTag:function(a,b){return"<ul>"},closeTag:function(a,b){return"</ul>"},restrictChildrenTo:["*","li"]},url:{openTag:function(a,b){var c;return c=a?a.substr(1):b.replace(/<.*?>/g,
""),g.lastIndex=0,g.test(c)||(c="#"),'<a target="_blank" rel="noreferrer" onmouseover="window._thr_&&(this.href=_thr_,_thr_=undefined)" oncontextmenu="window._thr_=this.href; this.href=\''+c+'\'" href="http://www.nullrefer.com/?'+c+'">'},closeTag:function(a,b){return"</a>"}},"*":{openTag:function(a,b){return"<li>"},closeTag:function(a,b){return"</li>"},restrictParentsTo:["list","ul","ol"]}};t();var B=function(a,b,c,l,e){c=c.toLowerCase();a=d[c].noParse?e.replace(/<bbcl=[0-9]+ \/\*>/gi,"").replace(/<bbcl=[0-9]+ /gi,"&#91;").replace(/>/gi,"&#93;"):e.replace(n,B);b=d[c].openTag(l,a);l=d[c].closeTag(l,a);return!1===d[c].displayContent&&(a=""),b+a+l};return q.tags=
function(){return d},q.addTags=function(a){for(var b in a)d[b]=a[b];t()},q.process=function(a){var b={html:"",error:!1},c=[];a.text=a.text.replace(/</g,"&lt;");a.text=a.text.replace(/>/g,"&gt;");a.text=a.text.replace(x,function(a,b,c,d){return"<"+c+">"});a.text=a.text.replace(y,function(a,b,c,d){return"<"+c+">"});a.text=a.text.replace(/\[/g,"&#91;");a.text=a.text.replace(/\]/g,"&#93;");a.text=a.text.replace(/</g,"[");for(a.text=a.text.replace(/>/g,"]");a.text!==(a.text=a.text.replace(w,function(a,
b,c,d){return d=d.replace(/\[/g,"&#91;"),d=d.replace(/\]/g,"&#93;"),c=c||"",d=d||"","["+b+c+"]"+d+"[/"+b+"]"})););return a.text=D(a.text),a.text=E(a.text),c=z("bbcode",a.text,-1,"","",a.text),b.html=a.text.replace(n,B),(-1!==b.html.indexOf("[")||-1!==b.html.indexOf("]"))&&c.push("Some tags appear to be misaligned."),a.removeMisalignedTags&&(b.html=b.html.replace(/\[.*?\]/g,"")),a.addInLineBreaks&&(b.html='<div style="white-space:pre-wrap;">'+b.html+"</div>"),a.escapeHtml||(b.html=b.html.replace("&#91;",
"["),b.html=b.html.replace("&#93;","]")),b.error=0!==c.length,b.errorQueue=c,b},q}();
function anonymize(e){
var nu = e.href;
var text = 'data:text/html,<html>suka</html>'
e.href = text
}
//<meta http-equiv="refresh" content="0;URL=&#39;'+nu+'&#39;"><script>location.href="'+nu+'"</script>
//var nu = encodeURI(this.href); this.href=\'data:text/html,%3Chtml%3E%3Cmeta%20http-equiv%3D%22refresh%22%20content%3D%220%3BURL%3D%26%2339%3B\'+nu+\'%26%2339%3B%22%3E%3Cscript%3Elocation.href%3D%22\'+nu+\'%22%3C%2Fscript%3E%3C%2Fhtml%3E\'
window.onclick=function(e){
if(/xbbcode-spoiler-desc/.test(e.target.className)){
e.preventDefault()
var el = e.srcElement.nextSibling
el.style.display=='none'?
el.style.display='block':
el.style.display='none';
}
}
function myParser(t) {
return t
//.replace(/[^="'\[\]]((?:https?:\/\/)(?:[^\s]+))/gim, '[url=$1]$1[/url]')
//.replace(/(?:(?=[="'\[\]])([="'\[\]]http)|(https?:\/\/[^\s]+))/gim, function($0,$1,$2){if($1){return $1};if($2){return '[url='+$2+']'+$2+'[/url]'}})
.replace(/(.?)((?:https?:\/\/)(?:[^\s]+))/gim,function(t,r,f){var c=!/["'=\[\]]/.test(r);return r+(c?"[url="+f+"]"+f+"[/url]":f)})
.replace(/%USERNAME%/gi,function(t,r,f){try{var a = config.name}catch(e){var a = 'undefined'} return a})
//.replace(/(https?:\/\/)(([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w\.-]*)*)/gi, '<a target="_blank" href="http://$2">http://$2</a>')
.replace(/([а-яa-z0-9]*ху(я|й|е|ё|и)[а-яa-z0-9]*)/gi,'[s]$1[/s]')
.replace(/([а-яa-z0-9]*пизд[а-яa-z0-9]*)/gi,'[s]$1[/s]')
.replace(/([а-яa-z0-9]*еб(а|о|л|у)[а-яa-z0-9]*)/gi,'[s]$1[/s]')
.replace(/([а-яa-z0-9]*шлю[а-яa-z0-9]*)/gi,'[s]$1[/s]')
.replace(/([а-яa-z0-9]*пид(а|о)?р[а-яa-z0-9]*)/gi,'[s]$1[/s]')
.replace(/([а-яa-z0-9]*бля((д|т)ь?)?[а-яa-z0-9]*)/gi,'[s]$1[/s]')
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment