var proxy = 'https://ldm.sys32.dev/', regProxy = new RegExp(`^` + proxy.replace(/\./gi, '\\.').replace(/\//gi, '\\/'), 'gi'), request = ((url, method, data) => { return new Promise((solve, reject) => { var methodd = 'GET', success = false; if (method.toLowerCase == 'post') methodd = 'POST'; var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = ((e) => { if (xhttp.readyState == 4 && xhttp.status == 200) { success = true; solve({ html: xhttp.responseText, url: xhttp.responseURL }); } }); setTimeout(() => { if (!success) reject('Timed out..'); }, 5000); xhttp.open(methodd, encodeURI(url), true); xhttp.send(); }); }), addproto = ((url) => { if (!/^(?:f|ht)tps?\:\/\//.test(url)) url = "https://" + url; return url; }), output = '', rewroteLines = [], links = [], initBrowser = (async () => { var lines = [], winEle = {}, responseHTML = '', inputBar = new inputbar(0, 0, 'https://example.org', (key, str) => { // onChange(e.key, this.value); }, async (str) => { // onSubmit(this.value); var response = await request(proxy + addproto(str), 'GET'); renderWebPage(response.html, response.url); }), window = new cwindow('VibeBrowser', 600, 250, (window) => { // after render inputBar.interactable.x = window.x + 30 inputBar.interactable.y = window.y + 35 inputBar.render(); rewroteLines.forEach((e, i) => { // if(ele == 'null' || ele == null)return; mctx.fillStyle = e.color; mctx.font = e.size + 'px Arial'; mctx.fillText(e.str, window.x + 15, window.y + 80 + i * 20); /*if(e.href != null){ var linkEle = moLs[e.linkEleID], winEle = moLs[winID]; linkwindow.x = window.x + 15; linkwindow.y = window.y + 70 + i*20; mctx.fillRect(linkwindow.x, linkwindow.y, linkEle.width, linkEle.height); }*/ }); /* mctx.fillStyle='#000'; mctx.font = "16px Roboto"; mctx.fillText(`Enter a URL for the application to visit`, window.x + 6, window.y + 70 ); */ }), renderWebPage = ((html, url) => { var lines = html.replace(/[\s\S]*?([\s\S]*?)<\/\s*?body\s*?>[\s\S]*?/gi, '$1').split('\n'), htmlTitle = html.match(/([\s\S]*?)<\/title>/i)[1], fullTitle = `${htmlTitle} - ${url.replace(regProxy, '')}` // hide proxy portion in url longestStr = '', maxLineLength = 50; // reset values rewroteLines = []; links.forEach((e, i) => { e.destroy(); }); links = []; this.closed = false; lines.forEach((e, i) => { if (longestStr.length <= e.length) longestStr = e; wordWrap(e, maxLineLength).split('\n').forEach((e, i) => { // rewroteLines.push(e); }); e.split('<').forEach((ee, ii) => { var lineData = { str: '<' + ee, size: 16, color: '#000', weight: 'normal' }, tag = lineData.str.match(/<([^\s]*) ?[\s\S]*?>/i); if (tag != null && tag[1] != null) tag = tag[1].toLowerCase() else if (tag == null) tag = ''; switch (tag) { case 'p': default: lineData.size = 16; break case 'h1': lineData.size = 32; break case 'a': lineData.color = 'blue' var hrefMatched = lineData.str.match(/<[\s\S]*?href\s*=\s*(?:"|')([\s\S]*?)(?:"|')/i); if (hrefMatched != null) { // FIX SOON /* var linkEleID = moLs.length, linkEle = new cele(linkEleID, 10000, 100000, lineData.str.length, lineData.size, async(type, e)=>{ // if the type is a click then redirect console.log(type); if(type == 'mouseDownLeft'){ // hrefMatched[1] var response = await request(proxy+addproto(hrefMatched[1]), 'GET'); renderWebPage(response.html, response.url ); lines.push(output); } }, ) // { hover : 'link', pressed : 'link' }), ele = moLs[linkEleID], winEle = moLs[winID]; lineData.href = hrefMatched[1]; lineData.linkEleID = linkEleID; */ } break } if (lineData.str.match(/&[\S]*?;/gi) != null) lineData.str.match(/&[\S]*?;/gi).forEach((e, i) => { if (e.startsWith('&#')) { var charCode = e.replace(/\D/gi, ''), // remove all non-digits chare = String.fromCharCode(Number(charCode)); // convert charcode to a character lineData.str = lineData.str.replace(e, chare); } }); lineData.str = lineData.str .replace(/<[\s\S]*?>/gi, '') // hide tags .replace(/[<>]/gi, '') // hide tags pt 2 .replace(/&[\S]*?;/gi, '') // hide escaped characters ; if (lineData.str.match(/(^$|^<\s*?$)/gi)) lineData.str = ''; if (lineData.str != '') rewroteLines.push(lineData); }); }); }); window.width = 700; window.height = 300; window.x = msize.w / 2 - window.width / 2; // center of screen window.y = msize.h / 2 - window.height / 2; // middle of screen window.icon = 'apps/24/internet-web-browser.png'; window.title = 'vibeBrowser'; inputBar.interactable.width = 300; inputBar.interactable.height = 25; inputBar.interactable.index = window.contentBox.index + 1; });