-
Notifications
You must be signed in to change notification settings - Fork 4
/
bbcode.min.js
31 lines (31 loc) · 14.2 KB
/
bbcode.min.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
(function(){this.bbcode={};"undefined"!==typeof module&&(module.exports=this.bbcode)}).call(this);
(function(){var l,g,c,d,f,e,a=[].slice;d=/[&<>"]/g;c={"&":"&","<":"<",">":">",'"':"""};f=/\b((?:([\w-]+):(\/{1,3})|www[.])(?:(?:(?:[^\s&()]|&|")*(?:[^!"#$%&'()*+,.:;<=>?@\[\]^`{|}~\s]))|(?:\((?:[^\s&()]|&|")*\)))+)/g;l={"--":"–","---":"—","...":"…","(c)":"©","(reg)":"®","(tm)":"™"};g=new RegExp(function(){var a;a=[];for(e in l)a.push(e.replace(/(\.|\)|\()/g,"\\$1"));return a}().join("|"));this.bbcode.Renderer=function(){function b(a){a=
a||{};this._contexts=[];this.options={linkify:!!a.linkify}}b.prototype.context=function(a,b){var d,c,f,e;c={};f=this.options;for(d in f)e=f[d],c[d]=e;for(d in a)e=a[d],c[d]=e;this._contexts.push(this.options);this.options=c;e=b();this.options=this._contexts.pop();return e};b.prototype.escape=function(a){return a.replace(d,function(a){return c[a]})};b.prototype.linkify=function(b){return b.replace(f,function(){var b,d,c;b=1<=arguments.length?a.call(arguments,0):[];c=b[1];if((d=b[2])&&"http"!==d&&"https"!==
d)return c;b=b[1];d||(b="http://"+b);return'<a href="'+b+'" target="_blank">'+c+"</a>"})};b.prototype.strip=function(a){return a.replace(/^\s+|\s+$/g,"")};b.prototype.cosmeticReplace=function(b){return b.replace(g,function(){var b;b=(1<=arguments.length?a.call(arguments,0):[])[0];return l[b]||b})};b.prototype.htmlAttributes=function(a){var b,d;if(!a)return"";var c;c=[];for(b in a)d=a[b],c.push(b+'="'+d+'"');return c.join(" ")};return b}()}).call(this);
(function(){var l,g,c,d,f,e,a,b,v,w,m,n,p=[].indexOf||function(a){for(var h=0,b=this.length;h<b;h++)if(h in this&&this[h]===a)return h;return-1},k=function(a,h){function b(){this.constructor=a}for(var d in h)r.call(h,d)&&(a[d]=h[d]);b.prototype=h.prototype;a.prototype=new b;a.__super__=h.prototype;return a},r={}.hasOwnProperty;n=/\r?\n/g;this.bbcode.Tag=function(){function a(h,b){var d,c,e,f,g;this.renderer=h;null==b&&(b={});this.CLOSED_BY=[];this.DISCARD_TEXT=this.STRIP_OUTER=this.STRIP_INNER=this.SELF_CLOSE=
!1;this.name=b.name||null;this.parent=b.parent||null;this.text=b.text||"";this.parent&&this.parent.children.push(this);null==b.params&&(b.params=[]);this.params={};f=b.params;d=0;for(e=f.length;d<e;d++)g=f[d],c=g[0],(g=g[1])&&(this.params[c]=g);this.children=[]}a.prototype.getContent=function(a){var b,d,c,f,e;null==a&&(a=!1);c=[];this.text&&(b=this.renderer.escape(this.text),a||(this.renderer.options.linkify&&(b=this.renderer.linkify(b)),b=this.renderer.cosmeticReplace(b.replace(n,"<br />"))),c.push(b));
d=this.children;f=0;for(e=d.length;f<e;f++)b=d[f],a?c.push(b.toText()):this.DISCARD_TEXT&&null===b.name||c.push(b.toHTML());c=c.join("");if(!a&&this.STRIP_INNER){for(c=this.renderer.strip(c);"<br />"===c.slice(0,6);)c=c.slice(6);for(;"<br />"===c.slice(-6);)c=c.slice(0,-6);c=this.renderer.strip(c)}return c};a.prototype.toText=function(a){var b,c,d,f;null==a&&(a=!1);c=[];if(null!==this.name)if(this.params.length){var e,g;e=this.params;g=[];for(b in e)f=e[b],g.push([b,f].join("="));b=g.join(" ");this.name in
this.params?c.push("["+b+"]"):c.push("["+this.name+" "+b+"]")}else c.push("["+this.name+"]");c.push(this.getContent(!a));null!==this.name&&(d=this.name,0>p.call(this.CLOSED_BY,d))&&c.push("[/"+this.name+"]");return c.join("")};a.prototype._toHTML=function(){return this.toText(!0)};a.prototype.toHTML=function(){var b;b=this._toHTML();return"string"===typeof b?b:b.join("")};return a}();g=function(b){function a(){a.__super__.constructor.apply(this,arguments);this.STRIP_INNER=!0;this._inline="inline"===
this.params.code;this._inline||(this.STRIP_OUTER=!0)}k(a,b);a.prototype._toHTML=function(){var b;return this._inline?["<code>",this.getContent(!0),"</code>"]:(b=this.params.lang||this.params[this.name])?['<pre class="prettyprint lang-'+b+'">',this.getContent(!0),"</pre>"]:["<pre>",this.getContent(!0),"</pre>"]};return a}(this.bbcode.Tag);f=function(b){function a(){return a.__super__.constructor.apply(this,arguments)}k(a,b);a.prototype._toHTML=function(){var b;b={src:this.renderer.strip(this.getContent(!0))};
"width"in this.params&&(b.width=this.params.width);"height"in this.params&&(b.height=this.params.height);return"<img "+this.renderer.htmlAttributes(b)+" />"};return a}(this.bbcode.Tag);m=function(b){function a(){return a.__super__.constructor.apply(this,arguments)}k(a,b);a.prototype._toHTML=function(){var b;b=this.params.size;return isNaN(b)?this.getContent():['<span style="font-size:'+b+'px">',this.getContent(),"</span>"]};return a}(this.bbcode.Tag);c=function(b){function a(){return a.__super__.constructor.apply(this,
arguments)}k(a,b);a.prototype._toHTML=function(){var b;b=this.params.color;return null!=b?['<span style="color:'+b+'">',this.getContent(),"</span>"]:this.getContent()};return a}(this.bbcode.Tag);l=function(b){function a(){return a.__super__.constructor.apply(this,arguments)}k(a,b);a.prototype._toHTML=function(){return['<div style="text-align:center;">',this.getContent(),"</div>"]};return a}(this.bbcode.Tag);w=function(b){function a(){return a.__super__.constructor.apply(this,arguments)}k(a,b);a.prototype._toHTML=
function(){return['<div style="float:right;">',this.getContent(),"</div>"]};return a}(this.bbcode.Tag);d=function(b){function a(){a.__super__.constructor.apply(this,arguments);this.STRIP_OUTER=this.SELF_CLOSE=!0}k(a,b);a.prototype._toHTML=function(){return"<hr />"};return a}(this.bbcode.Tag);b=function(b){function a(){a.__super__.constructor.apply(this,arguments);this.STRIP_OUTER=this.STRIP_INNER=!0}k(a,b);a.prototype._toHTML=function(){var a;a=this.params.list;return"1"===a?["<ol>",this.getContent(),
"</ol>"]:"a"===a?['<ol style="list-style-type:lower-alpha;">',this.getContent(),"</ol>"]:"A"===a?['<ol style="list-style-type:upper-alpha;">',this.getContent(),"</ol>"]:["<ul>",this.getContent(),"</ul>"]};return a}(this.bbcode.Tag);a=function(a){function b(){b.__super__.constructor.apply(this,arguments);this.CLOSED_BY=["*","/list"];this.STRIP_INNER=!0}k(b,a);b.prototype._toHTML=function(){return["<li>",this.getContent(),"</li>"]};return b}(this.bbcode.Tag);v=function(a){function b(){b.__super__.constructor.apply(this,
arguments);this.STRIP_OUTER=this.STRIP_INNER=!0}k(b,a);b.prototype._toHTML=function(){var b,a;a=["<blockquote>",this.getContent()];if(b=this.params.quote)a.push("<small>"),a.push(b),a.push("</small>");a.push("</blockquote>");return a};return b}(this.bbcode.Tag);e=function(a){function b(){return b.__super__.constructor.apply(this,arguments)}k(b,a);b.prototype._toHTML=function(){var a;a=this.renderer.strip(this.params[this.name]||this.getContent(!0));/javascript:/i.test(a)&&(a="");return a?this.renderer.context({linkify:!1},
function(b){return function(){return['<a href="'+a+'" target="_blank">',b.getContent(),"</a>"]}}(this)):this.getContent()};return b}(this.bbcode.Tag);this.bbcode.createSimpleTag=function(a){return function(b,c){return function(a){function d(){var a,b;d.__super__.constructor.apply(this,arguments);for(a in c)b=c[a],this[a]=b}k(d,a);d.prototype._toHTML=function(){var a;(a=this.renderer.htmlAttributes(this.params))&&(a=" "+a);return["<"+b+a+">",this.getContent(),"</"+b+">"]};return d}(a.bbcode.Tag)}}(this);
this.bbcode.BUILTIN={b:this.bbcode.createSimpleTag("strong"),i:this.bbcode.createSimpleTag("em"),u:this.bbcode.createSimpleTag("u"),s:this.bbcode.createSimpleTag("strike"),h1:this.bbcode.createSimpleTag("h1",{STRIP_OUTER:!0}),h2:this.bbcode.createSimpleTag("h2",{STRIP_OUTER:!0}),h3:this.bbcode.createSimpleTag("h3",{STRIP_OUTER:!0}),h4:this.bbcode.createSimpleTag("h4",{STRIP_OUTER:!0}),h5:this.bbcode.createSimpleTag("h5",{STRIP_OUTER:!0}),h6:this.bbcode.createSimpleTag("h6",{STRIP_OUTER:!0}),pre:this.bbcode.createSimpleTag("pre"),
table:this.bbcode.createSimpleTag("table",{DISCARD_TEXT:!0}),thead:this.bbcode.createSimpleTag("thead",{DISCARD_TEXT:!0}),tbody:this.bbcode.createSimpleTag("tbody",{DISCARD_TEXT:!0}),tr:this.bbcode.createSimpleTag("tr",{DISCARD_TEXT:!0}),th:this.bbcode.createSimpleTag("th"),td:this.bbcode.createSimpleTag("td"),code:g,img:f,hr:d,size:m,center:l,right:w,color:c,list:b,"*":a,quote:v,url:e,link:e}}).call(this);
(function(){var l,g,c,d,f=[].indexOf||function(c){for(var a=0,b=this.length;a<b;a++)if(a in this&&this[a]===c)return a;return-1};l=/^\s*$/;c=/(\[\/?.+?\])/;g=/^\r?\n/;d=this.bbcode;this.bbcode.Parser=function(){function e(a){var b,c,e;null==a&&(a=null);this.tags={};if(a)for(b=0,c=a.length;b<c;b++)e=a[b],0<=f.call(d.BUILTIN,e)&&this.registerTag(e,d.BUILTIN[e]);else for(e in a=d.BUILTIN,a)b=a[e],this.registerTag(e,b);this.renderer=new d.Renderer}e.prototype.registerTag=function(a,b){return this.tags[a]=
b};e.prototype._parseParams=function(a){var b,c,d,e,f,g,k,r,q;f=[];if(a){k=d=[];q=[];r=" ";g=!1;c=0;for(e=a.length;c<e;c++)b=a[c],g?g=!1:k===d&&"="===b?k=q:k===d&&":"===b?k=q:q.length||'"'!==b?b!==r?k.push(b):(f.push([d.join("").toLowerCase(),q.join("")]),l.test(r)||(g=!0),k=d=[],q=[],r=" "):r=b;f.push([d.join("").toLowerCase(),q.join("")])}return f};e.prototype._createTextNode=function(a,b){var c;null!=(c=a.children.slice(-1)[0])&&c.STRIP_OUTER&&(b=b.replace(g,""));return new d.Tag(this.renderer,
{text:b,parent:a})};e.prototype.parse=function(a){var b,e,g,m,n,p;e=m=new d.Tag(this.renderer);for(p=a.split(c);p.length;)(n=p.shift(),n.match(c))?(g=this._parseParams(n.slice(1,-1)),a=g[0][0],0<=f.call(e.CLOSED_BY,a)&&(p.unshift(n),a="/"+e.name,g=[]),"/"===a[0])?(a=a.slice(1),a in this.tags)?e.name===a&&(e=e.parent):this._createTextNode(e,n):(b=this.tags[a])?(b=new b(this.renderer,{name:a,parent:e,params:g}),!b.SELF_CLOSE&&(0>f.call(b.CLOSED_BY,a)||e.name!==a)&&(e=b)):this._createTextNode(e,n):this._createTextNode(e,
n);return m};e.prototype.toHTML=function(a){return this.parse(a).toHTML()};return e}()}).call(this);
(function(){var l;l={bold:{keyCode:66,title:"Bold (Ctrl+B)",placeholder:"bold text",open:"[b]",close:"[/b]"},italic:{keyCode:73,title:"Italic (Ctrl+I)",placeholder:"italic text",open:"[i]",close:"[/i]"},center:{keyCode:69,title:"Center (Ctrl+E)",placeholder:"center text",open:"[center]",close:"[/center]"},hyperlink:{keyCode:76,title:"Hyperlink (Ctrl+L)",placeholder:"link text",open:function(){return"[url="+(prompt("Please enter the URL of your link","http://")||"link url")+"]"},close:"[/url]"},blockquote:{keyCode:190,
title:"Blockquote (Ctrl+.)",placeholder:"blockquote",open:"[quote]",close:"[/quote]"},code:{keyCode:76,title:"Code (Ctrl+K)",placeholder:'print("code sample");',open:"[code]",close:"[/code]"},image:{keyCode:71,placeholder:"image url",open:"[img]",close:"[/img]"},nlist:{keyCode:79,title:"Numbered List (Ctrl+O)",placeholder:"list item",open:function(g){var c,d,f;c=(null!=(d=g.match(/\[list=1\]/g))?d.length:void 0)||0;g=(null!=(f=g.match(/\[\/list\]/g))?f.length:void 0)||0;return c===g?"[list=1]\n\t[*]":
"\t[*]"},close:function(g){var c,d,f;c=(null!=(d=g.match(/\[list=1\]/g))?d.length:void 0)||0;g=(null!=(f=g.match(/\[\/list\]/g))?f.length:void 0)||0;if(c===g)return"\n[/list]"}},list:{keyCode:85,title:"Bulleted List (Ctrl+O)",placeholder:"list item",open:function(g){var c,d,f;c=(null!=(d=g.match(/\[list\]/g))?d.length:void 0)||0;g=(null!=(f=g.match(/\[\/list\]/g))?f.length:void 0)||0;return c===g?"[list]\n\t[*]":"\t[*]"},close:function(g){var c,d,f;c=(null!=(d=g.match(/\[list\]/g))?d.length:void 0)||
0;g=(null!=(f=g.match(/\[\/list\]/g))?f.length:void 0)||0;if(c===g)return"\n[/list]"}},heading:{keyCode:72,title:"Heading (Ctrl+H)",placeholder:"heading",open:"[h3]",close:"[/h3]",before:/\n$/,after:/^\n/},hrule:{keyCode:82,title:"Hprizontal Rule (Ctrl+R)",open:"[hr]\n",before:/\n\n$/,after:/^\n\n/}};this.bbcode.Editor=function(){function g(c,d){this.markup=null!=d?d:l;this.$=$(c);this.textarea=this.$[0];this.$.on("keydown",function(c){return function(d){var a,b,g,l,m,n,p,k,r,q,h,u,t;if(9===d.which){h=
c.getSelection();p=0;if(h.start!==h.end||d.shiftKey){l=0;t=!1;n=[];k=c.textarea.value.split("\n");b=0;for(g=k.length;b<g;b++)m=k[b],a=[l,l+=m.length+1],u=a[0],a=a[1],!t&&u<=(r=h.start)&&r<a&&(t=!0),t&&(d.shiftKey?"\t"===m[0]&&(m=m.slice(1),p--):(m="\t"+m,p++),t=!(u<=(q=h.end)&&q<=a)),n.push(m);c.setValue(n.join("\n"))}else p++,h.value[1]="\t"+h.value[1],c.setValue(h.value.join(""));0<p?h.start++:0>p&&h.start--;c.select(h.start,h.end+p)}else{if(!d.ctrlKey||d.altKey||null==c.getRule(d.which))return!0;
c.replace(d.which)}return!1}}(this))}g.prototype._escapeRe=function(c){c=c.replace(RegExp("(\\/|\\.|\\*|\\+|\\?|\\||\\(|\\)|\\[|\\]|\\{|\\}|\\\\|\\^|\\$)","g"),"\\$1");return new RegExp("^"+c.replace(/\d+/,"\\d+")+"$")};g.prototype.getRule=function(c){var d,f,e;f=this.markup;for(d in f)if(e=f[d],e.keyCode===c)return e};g.prototype.replace=function(c,d,f){var e,a,b;this.$.focus();b=this.getSelection();a=this.getRule(c);d=this.textarea.value;e=("function"===typeof a.open?a.open(b.value[0]):a.open)||
"";c=("function"===typeof a.close?a.close(b.value[2]):a.close)||"";if(this._escapeRe(e).test(d.slice(b.start-e.length,b.start))&&this._escapeRe(c).test(d.slice(b.end,b.end+c.length)))return f=b.start-e.length,this.setValue(d.substr(0,f)+b.value[1]+d.substr(b.end+c.length,d.length)),this.select(f,f+b.value[1].length);d=e+(f||b.value[1]||a.placeholder||"")+c;null==a.before||a.before.test(b.value[0])||(d="\n\n"+d,b.start+=2);null==a.after||a.after.test(b.value[2])||(d+="\n\n",b.end+=2);this.setValue(b.value[0]+
d+b.value[2]);return this.select(b.start+e.length,b.start+d.length-c.length)};g.prototype.setValue=function(c){var d;d=this.$.scrollTop();this.$.val(c);return this.$.scrollTop(d)};g.prototype.select=function(c,d){var f;if(null!=(null!=(f=document.selection)?f.createRange:void 0))return f=this.textarea.createTextRange(),f.collapse(!0),f.moveStart("character",c),f.moveEnd("character",d-c),f.select();this.textarea.selectionStart=c;return this.textarea.selectionEnd=d};g.prototype.getSelection=function(){var c,
d,f,e,a;a=this.textarea.value;null!=(null!=(e=document.selection)?e.createRange:void 0)?(d=document.selection,/testarea/i.test(this.textarea.tagName)?(c=d.createRange(),e=c.duplicate(),e.moveToElementText(this.textarea),e.setEndPoint("EndToEnd",c),e=e.text.length-c.text.length,d=e+c.text.length):(c=d.createRange().duplicate(),c.moveEnd("character",a.length),e=""===c.text?a.length:a.lastIndexOf(c.text),c=d.createRange().duplicate(),c.moveStart("character",-a.length),d=c.text.length+1)):(e=this.textarea.selectionStart,
d=this.textarea.selectionEnd);f=a.substring(0,e);c=a.substring(d,a.length);return{start:e,end:d,value:[f,a.substring(e,d),c]}};return g}()}).call(this);