/
gitversepreview_template
/
gitversepreview
Обзор
Документация
Войти
/
gitversepreview_template
/
gitversepreview
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
master
new/index.html
161 строка
6 KB
TwixoffStudio
Create: vercel.json, index.html, index.html, README.md, tatnet.json
22 июн 2026, 06:29
Верифицирован
22 июн 2026, 06:29
33ff849
Код
Авторство
О чём код?
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>GitVerse & BitBucket HTML Preview</title> <style> body { font: 12px 'Helvetica Neue', Helvetica, Arial, freesans, clean, sans-serif; color: #333; } h1 { font-size: 20px; } a { color: #666; } #previewform { display: none; padding: 20px; text-align: center; } strong { color: #333; background-color: #FAFFA6; padding: 0.1em; } #footer { margin: 20px 0; font-size: 10px; color: #666; } </style> </head> <body> <form id="previewform" onsubmit="location.href='/?'+this.file.value;return false"> <h1>GitVerse & BitBucket HTML Preview</h1> <p> Enter URL of the HTML file to preview: <input type="url" id="file" value="" placeholder="e.g. https://gitverse.ru/user/repo/content/master/index.html" size="60" autofocus> <input type="submit" value="Preview"> </p> <p>or prepend to the URL: <code><strong>http://gitverse.tatnet.app/new/?</strong>https://gitverse.ru/liveprogramma/liveprogramma/content/master/index.html</code></p> <p id="footer">Developed by <a href="https://github.com/oinktechltd">oinktech</a> | Contribute on GitVerse</p> </form> <script>(function () { var previewForm = document.getElementById('previewform'); var url = location.search.substring(1).replace(/\/\/gitverse\.ru/, '//gitverse.ru/api/repos/').replace(/\/raw\/\/branch\\/master\//, '/'); //Get URL of the raw file var replaceAssets = function () { var frame, a, link, links = [], script, scripts = [], i, href, src; //Framesets if (document.querySelectorAll('frameset').length) return; //Don't replace CSS/JS if it's a frameset, because it will be erased by document.write() //Frames frame = document.querySelectorAll('iframe[src],frame[src]'); for (i = 0; i < frame.length; ++i) { src = frame[i].src; //Get absolute URL if (src.indexOf('//gitverse.ru/api/repos/') > 0 || src.indexOf('//bitbucket.org') > 0) { //Check if it's from raw.github.com or bitbucket.org frame[i].src = '//' + location.hostname + location.pathname + '?' + src; //Then rewrite URL so it can be loaded using CORS proxy } } //Links a = document.querySelectorAll('a[href]'); for (i = 0; i < a.length; ++i) { href = a[i].href; //Get absolute URL if (href.indexOf('#') > 0) { //Check if it's an anchor a[i].href = '//' + location.hostname + location.pathname + location.search + '#' + a[i].hash.substring(1); //Then rewrite URL with support for empty anchor } else if ((href.indexOf('//gitverse.ru/api/repos/') > 0 || href.indexOf('//bitbucket.org') > 0) && (href.indexOf('.html') > 0 || href.indexOf('.htm') > 0)) { //Check if it's from raw.github.com or bitbucket.org and to HTML files a[i].href = '//' + location.hostname + location.pathname + '?' + href; //Then rewrite URL so it can be loaded using CORS proxy } } //Stylesheets link = document.querySelectorAll('link[rel=stylesheet]'); for (i = 0; i < link.length; ++i) { href = link[i].href; //Get absolute URL if (href.indexOf('//gitverse.ru/api/repos/') > 0 || href.indexOf('//bitbucket.org') > 0) { //Check if it's from raw.github.com or bitbucket.org links.push(fetchProxy(href, null, 0)); //Then add it to links queue and fetch using CORS proxy } } Promise.all(links).then(function (res) { for (i = 0; i < res.length; ++i) { loadCSS(res[i]); } }); //Scripts script = document.querySelectorAll('script[type="text/htmlpreview"]'); for (i = 0; i < script.length; ++i) { src = script[i].src; //Get absolute URL if (src.indexOf('//gitverse.ru/api/repos/') > 0 || src.indexOf('//bitbucket.org') > 0) { //Check if it's from raw.github.com or bitbucket.org scripts.push(fetchProxy(src, null, 0)); //Then add it to scripts queue and fetch using CORS proxy } else { script[i].removeAttribute('type'); scripts.push(script[i].innerHTML); //Add inline script to queue to eval in order } } Promise.all(scripts).then(function (res) { for (i = 0; i < res.length; ++i) { loadJS(res[i]); } document.dispatchEvent(new Event('DOMContentLoaded', {bubbles: true, cancelable: true})); //Dispatch DOMContentLoaded event after loading all scripts }); }; var loadHTML = function (data) { if (data) { data = data.replace(/<head([^>]*)>/i, '<head$1><base href="' + url + '">').replace(/<script(\s*src=["'][^"']*["'])?(\s*type=["'](text|application)\/javascript["'])?/gi, '<script type="text/htmlpreview"$1'); //Add <base> just after <head> and replace <script type="text/javascript"> with <script type="text/htmlpreview"> setTimeout(function () { document.open(); document.write(data); document.close(); replaceAssets(); }, 10); //Delay updating document to have it cleared before } }; var loadCSS = function (data) { if (data) { var style = document.createElement('style'); style.innerHTML = data; document.head.appendChild(style); } }; var loadJS = function (data) { if (data) { var script = document.createElement('script'); script.innerHTML = data; document.body.appendChild(script); } }; var fetchProxy = function (url, options, i) { var proxy = [ '', // try without proxy first 'https://api.gitverse.ru/', 'https://api.codetabs.com/v1/proxy/?quest=' ]; return fetch(proxy[i] + url, options).then(function (res) { if (!res.ok) throw new Error('Cannot load ' + url + ': ' + res.status + ' ' + res.statusText); return res.text(); }).catch(function (error) { if (i === proxy.length - 1) throw error; return fetchProxy(url, options, i + 1); }) }; if (url && url.indexOf(location.hostname) < 0) fetchProxy(url, null, 0).then(loadHTML).catch(function (error) { console.error(error); previewForm.style.display = 'block'; previewForm.innerText = error; }); else previewForm.style.display = 'block'; })()</script> </body> </html>