JSFiddle - React, Tailwind, and code Playground
by Kai
HTML
<textarea></textarea>
CSS
.bbcode-editor {
width: 100%;
}
.bbcode-toolbar {
margin: 0;
list-style-type: none;
padding: 0;
}
.bbcode-toolbar li {
display: inline;
padding-left: 18px;
margin-left: 10px;
cursor: pointer;
opacity: 0.5;
}
.bbcode-toolbar li:hover {
opacity: 1;
}
.bbcode-textarea {
width: 100%;
height: 150px;
padding: 5px;
border: 1px solid #999;
resize: vertical;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
-ie-box-sizing: border-box;
-o-box-sizing: border-box;
box-sizing: border-box;
}
.bbcode-preview {
color: #777;
font-family: "Courier New";
background: #F8F8F8;
margin: 0 auto;
padding: 10px;
}
.bbcode-preview img {
max-width: 100%;
}
JavaScript
// BBCode.js v0.1 by Kai Mallea
// https://github.com/kaimallea/bbcode
// License: http://www.opensource.org/licenses/mit-license.php
(function(){var d={},i;d.VERSION="0.1";i=function(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">")};_render=function(e,d){var a={},f={escape:!0,newlines:!0};if(!e)return"";if(d)for(var g in d)d.hasOwnProperty(g)&&(f[g]=d[g]);f.escape&&(e=i(e));a.bold={re:/\[b\]([\s\S]*?)\[\/b\]/ig,sub:function(a,b){return"<strong>"+b+"</strong>"}};a.italic={re:/\[i\]([\s\S]*?)\[\/i\]/ig,sub:function(a,b){return"<em>"+b+"</em>"}};a.code={re:/\[code\]([\s\S]*?)\[\/code\]/ig,
sub:function(a,b){return"<pre><code>"+b+"</code></pre>"}};a.quote={re:/\[quote\]([\s\S]*?)\[\/quote\]/ig,sub:function(a,b){return"<blockquote><p>"+b+"<p></blockquote>"}};a.quotespecific={re:/\[quote=(?:"|")(.*?)(?:"|")\]([\s\S]*?)\[\/quote\]/ig,sub:function(a,b,c){return b+" wrote: <blockquote><p>"+c+"<p></blockquote>"}};a.size={re:/\[size=(\d+)\]([\s\S]*?)\[\/size\]/ig,sub:function(a,b,c){return'<span style="font-size:'+b+'%;">'+c+"</span>"}};a.strikethrough={re:/\[s\]([\s\S]*?)\[\/s\]/ig,
sub:function(a,b){return"<del>"+b+"</del>"}};a.underline={re:/\[u\]([\s\S]*?)\[\/u\]/ig,sub:function(a,b){return'<span style="text-decoration:underline;">'+b+"</span>"}};a.center={re:/\[center\]([\s\S]*?)\[\/center\]/ig,sub:function(a,b){return'<div style="text-align:center;">'+b+"</div>"}};a.color={re:/\[color=([#a-z0-9]+)\]([\s\S]*?)\[\/color\]/ig,sub:function(a,b,c){return'<span style="color:'+b+';">'+c+"</span>"}};a.email={re:/\[email\]([\s\S]*?)\[\/email\]/ig,sub:function(a,b){return'<a href="mailto:'+
b+'">'+b+"</a>"}};a.emailcustom={re:/\[email=(.*?)\]([\s\S]*?)\[\/email\]/ig,sub:function(a,b,c){return'<a href="mailto:'+b+'">'+c+"</a>"}};a.url={re:/\[url\]([\s\S]*?)\[\/url\]/ig,sub:function(a,b){return'<a...