JSFiddle - React, Tailwind, and code Playground

by Marcos vini

HTML

<div class='panel'>

<form id="acesso" method="post">    
<label>Link:<input type="text"  name="url" id="url"></label>
<br>
<input type="button" id='gerar' value="Gerar Code">   
<div id="resultado"></div>
</form>
</div>

CSS

::focus{
  outline:none;
}
.panel {
    margin-bottom: 20px;
    background-color: #ffffff;
    border: 1px solid transparent;
    border-radius: 4px;
    -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
    box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
    max-width:450px;
}
input[type='text']:focus {
    -webkit-box-shadow: none !important;
    box-shadow: none !important;
    border-color: #19b9e7 #17b0dc !important;
    outline: none;
    -webkit-transition: linear 0.5s;
    transition: linear 0.5s;
    -moz-transition: linear 0.5s;
    -ms-transition: linear 0.5s;
    -o-transition: linear 0.5s;
}
input[type='text']{
      position: relative;
    padding: 10px;
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
    display: block;
    width: 100%;
    height: 34px;
    padding: 6px 12px;
    font-size: 14px;
    line-height: 1.42857143;
    color: #555;
    background-color: #fff;
    background-image: none;
    border: 1px solid #ccc;
    border-radius: 4px;
    -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
    box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
    -webkit-transition: border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;
    -o-transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s;
    transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s;
    border-radius: 0px !important;
    color: #999 !important;
    -webkit-box-shadow: none !important;
    box-shadow: none !important;
    border: 1px solid #ddd !important;
}
input[type='button']{
      float: left;
      display: inline-block;
    padding: 6px 12px;
    margin-bottom: 0;
    font-size: 14px;
    font-weight: 400;
    line-height: 1.42857143;
    text-align: center;
    white-space: nowrap;
    vertical-align: middle;
    -ms-touch-action: manipulation;
    touch-action: manipulation;
    cursor: pointer;
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
   ...

JavaScript

"use strict";
var url= document.querySelector('#url');

function decode_base64(s){
var e = {},z, i, k, v = [], r = '', w = String.fromCharCode;
var n = [[65, 91], [97, 123], [48, 58], [43, 44], [47, 48]];

for (z in n){
for (i = n[z][0]; i < n[z][1]; i++){
v.push(w(i));
}
}
for (i = 0; i < 64; i++){
e[v[i]] = i;
}

for (i = 0; i < s.length; i+=72){
var b = 0, c, x, l = 0, o = s.substring(i, i+72);
for (x = 0; x < o.length; x++){
c = e[o.charAt(x)];
b = (b << 6) + c;
l += 6;
while (l >= 8)
{
r += w((b >>> (l -= 8)) % 256);
}
}
}
return r;
}

const UNPROTECT ={
protetor: function(){ new Promise((Resolve, Reject) => {

 let sanitize = (str) => decodeURIComponent(str.substring(0, str.indexOf('\\\\')));

const query="?token=";


var base64 = url.value.split(query);
if (typeof base64[1] == 'undefined'){
	Reject('Protetor não Suportado');
	return false;
}


let convetido =decode_base64(base64[1]);

Resolve({				
"resultado": convetido
})


}).then(c => document.querySelector('#resultado').innerHTML= "<textarea>document.body.innerHTML =\'<iframe src=\""+c.resultado+"\">'</textarea>").catch( error =>  document.querySelector('#resultado').innerHTML =error );
}
}

document.querySelector('#gerar').addEventListener('click',function(){

document.querySelector('#resultado').innerHTML ='';

UNPROTECT.protetor();


});