Nice Javascript code showoff area
Fri, 13 July 2018
showoff.js
var init_showoff = function() {
var generate_random_id = function(len) {
var randId = "";
var values = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
for (var i = 0; i < len; i++) {
randId += values.charAt(Math.floor(Math.random() * values.length));
}
return 'showoff_' + randId
};
var replaceAllSpaces = function(val, replacement) {
return val.replace(/ /g, replacement);
};
var replaceAllTabs = function(val, replacement) {
return val.replace(/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\t/g, replacement);
};
var replaceAllLt = function(val) {
return val.replace(/</g, '<');
};
var replaceAllGt = function(val) {
return val.replace(/>/g, '>');
};
var showoff_transform = function(element) {
var bg_color = element.attr('showoff-bg');
if (typeof bg_color === 'undefined') {
bg_color = '#282c34';
}
var randomId = generate_random_id(8);
element.attr('id', randomId);
element.addClass('mc-showoff-transformed');
element.css('display', 'none');
var lines = element.html().split(/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\r?\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n/);
var num_lines = lines.length;
var so_case = $('<div style="margin:15px;display:block;width:100%;padding-top:15px;padding-bottom:35px;overflow-x:scroll;border:1px solid ' + bg_color + ';background-color:' + bg_color + ';border-radius:10px;-webkit-box-shadow: 0px 0px 10px 0px rgba(0,0,0,0.75);-moz-box-shadow: 0px 0px 10px 0px rgba(0,0,0,0.75);box-shadow: 0px 0px 10px 0px rgba(0,0,0,0.75);" />');
so_case.append(
$('<div style="display:block;height:20px;margin-bottom:35px;padding-left:25px;" />').append(
$('<div style="display:inline-block;width:20px;height:20px;margin-right:10px;background-color:#fc605b;border-radius:10px;" />')
).append(
$('<div style="display:inline-block;width:20px;height:20px;margin-right:10px;background-color:#fdbc40;border-radius:10px;" />')
).append(
$('<div style="display:inline-block;width:20px;height:20px;background-color:#33c748;border-radius:10px;" />')
)
);
var table = $('<table style="border-collapse:collapse;box-sizing:border-box;" />');
var left_spaces = 0;
for (var i=0;i<lines.length;i++) {
var l = lines[i];
l = replaceAllGt(l);
l = replaceAllLt(l);
l = replaceAllSpaces(l, ' ');
l = replaceAllTabs(l, ' ');
if (i === 0) {
left_spaces = l.length - l.trimLeft().length;
}
if (left_spaces > 0) {
l = l.substr(left_spaces);
}
l = replaceAllSpaces(l, ' ');
l = replaceAllTabs(l, ' ');
if (i === lines.length - 1) {
if (l === '') {
continue;
}
}
table.append(
$('<tr />').append(
$('<td style="text-align:right;font-size:18px;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select: none;-moz-user-select:none;-ms-user-select:none;user-select:none;padding-left:45px;padding-right:15px;color:#4f4a48;font-family:Lucida Console, Monaco, monospace;width:20px;" />').html((i+1))
).append(
$('<td style="white-space:nowrap;font-size:18px;color:#d4d3d2;font-family:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'Lucida Console\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\', Monaco, monospace" />').html(l)
)
);
}
so_case.append(table);
element.before(so_case);
};
$('.mc-showoff').each(function(){
if (!$(this).is('.mc-showoff-transformed')) {
showoff_transform($(this));
}
})
};
basic-example.html
<pre class="mc-showoff">
function foo() {
return "Bar";
}
</pre>
<script>
init_showoff();
</script>
change-bg-color.html
<pre class="mc-showoff" showoff-bg="#090300">
function foo() {
return "Bar";
}
</pre>
<script>
init_showoff();
</script>
longer-example.html
<pre class="mc-showoff" showoff-bg="#090300">
var generate_random_id = function(len) {
var randId = "";
var values = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
for (var i = 0; i < len; i++) {
randId += values.charAt(Math.floor(Math.random() * values.length));
}
return 'showoff_' + randId
};
</pre>
<script>
init_showoff();
</script>