|
5 | 5 | <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
6 | 6 | <title>pobfus // repository</title> |
7 | 7 | <style> |
8 | | - :root { --bg: #0a0a0a; --panel: #0d0d0d; --brd: #1a1a1a; --txt: #888; --main: #eee; --acc: #ffffff; } |
| 8 | + :root { --bg: #0a0a0a; --panel: #0d0d0d; --brd: #1a1a1a; --txt: #888; --main: #eee; --acc: #00ff88; --dev: #ffaa00; } |
| 9 | + |
| 10 | + * { box-sizing: border-box; } |
9 | 11 | body { |
10 | 12 | background: var(--bg); color: var(--main); |
11 | 13 | font-family: "fira code", monospace; margin: 0; |
12 | 14 | display: flex; height: 100vh; text-transform: lowercase; |
13 | | - overflow: hidden; |
| 15 | + overflow: hidden; |
14 | 16 | } |
15 | 17 |
|
16 | | - /* sidebar architecture */ |
17 | 18 | .sidebar { |
18 | | - width: 280px; background: var(--panel); border-right: 1px solid var(--brd); |
19 | | - padding: 30px; display: flex; flex-direction: column; gap: 15px; |
20 | | - z-index: 10; |
| 19 | + width: 320px; min-width: 320px; background: var(--panel); border-right: 1px solid var(--brd); |
| 20 | + padding: 25px; display: flex; flex-direction: column; gap: 15px; |
| 21 | + height: 100vh; |
21 | 22 | } |
22 | 23 |
|
23 | | - .brand-row { display: flex; align-items: center; gap: 12px; opacity: 0.8; margin-bottom: 10px;} |
| 24 | + .brand-row { display: flex; align-items: center; gap: 12px; opacity: 0.9; margin-bottom: 10px;} |
24 | 25 | .logo { width: 22px; height: 22px; fill: var(--main); } |
25 | 26 |
|
26 | | - .title-block { margin-bottom: 15px; } |
| 27 | + .title-block { margin-bottom: 10px; } |
27 | 28 | .title { font-size: 20px; font-weight: 800; color: #fff; letter-spacing: -1px; } |
28 | | - .subtitle { font-size: 10px; color: var(--txt); margin-top: 4px; } |
| 29 | + .subtitle { font-size: 9px; color: var(--txt); letter-spacing: 1px; } |
29 | 30 |
|
30 | | - .license-box { |
31 | | - font-size: 9px; color: #333; line-height: 1.4; |
32 | | - padding: 12px; border: 1px solid var(--brd); border-radius: 4px; margin-bottom: 10px; |
| 31 | + .changelog-container { |
| 32 | + margin-top: 10px; flex-grow: 1; overflow-y: auto; padding-right: 5px; |
33 | 33 | } |
| 34 | + .log-section { margin-bottom: 15px; } |
| 35 | + .log-ver { font-size: 10px; color: var(--acc); font-weight: 700; margin-bottom: 4px; display: block;} |
| 36 | + .log-ver.dev { color: var(--dev); } |
| 37 | + .log-item { font-size: 10px; color: #555; display: block; line-height: 1.4; border-left: 1px solid #222; padding-left: 8px; } |
34 | 38 |
|
35 | 39 | .nav-group { display: flex; flex-direction: column; gap: 8px; } |
36 | 40 | .btn { |
37 | 41 | background: transparent; border: 1px solid var(--brd); color: var(--txt); |
38 | 42 | padding: 10px; cursor: pointer; font-family: inherit; font-size: 11px; text-align: left; |
39 | | - transition: 0.1s; |
| 43 | + transition: 0.2s; border-radius: 4px; |
| 44 | + } |
| 45 | + .btn:hover { border-color: var(--main); color: var(--main); background: #151515; } |
| 46 | + .btn-run { background: #fff; color: #000; border: none; font-weight: 700; } |
| 47 | + |
| 48 | + .creator-link { |
| 49 | + margin-top: auto; padding-top: 15px; border-top: 1px solid var(--brd); |
| 50 | + text-decoration: none; display: flex; align-items: center; gap: 10px; |
40 | 51 | } |
41 | | - .btn:hover { border-color: var(--main); color: var(--main); background: #111; } |
42 | | - .btn-run { background: #fff; color: #000; border: none; font-weight: 700; margin-bottom: 5px;} |
43 | | - .btn-run:hover { background: #ccc; } |
| 52 | + .creator-at { color: var(--txt); font-size: 10px; } |
| 53 | + .creator-name { color: #fff; font-size: 11px; font-weight: 700; } |
44 | 54 |
|
45 | | - /* workspace */ |
46 | | - .main { flex: 1; display: flex; flex-direction: column; position: relative; } |
47 | | - .workspace { display: grid; grid-template-columns: 1fr 1fr; flex: 1; gap: 1px; background: var(--brd); } |
| 55 | + .main { flex: 1; display: flex; flex-direction: column; height: 100vh; } |
| 56 | + .workspace { |
| 57 | + display: grid; grid-template-columns: 1fr 1fr; flex: 1; |
| 58 | + gap: 1px; background: var(--brd); |
| 59 | + } |
| 60 | + |
| 61 | + .editor-container { position: relative; height: 100%; background: var(--bg); } |
48 | 62 | textarea { |
49 | | - background: var(--bg); border: none; color: var(--main); padding: 25px; |
50 | | - resize: none; outline: none; font-size: 12px; line-height: 1.6; |
51 | | - transition: background 0.3s ease; |
| 63 | + width: 100%; height: 100%; background: transparent; border: none; |
| 64 | + color: var(--main); padding: 30px; resize: none; outline: none; |
| 65 | + font-size: 13px; line-height: 1.6; font-family: "fira code", monospace; |
| 66 | + white-space: pre; overflow: auto; |
52 | 67 | } |
53 | 68 |
|
54 | | - textarea#in.drag-over { background: #111; outline: 1px dashed var(--txt); } |
55 | | - |
56 | | - #log { position: fixed; bottom: 20px; right: 20px; font-size: 10px; color: #444; pointer-events: none; } |
57 | | - input[type="file"] { display: none; } |
| 69 | + #log { position: fixed; bottom: 20px; right: 20px; font-size: 10px; color: #333; pointer-events: none; } |
58 | 70 | </style> |
59 | 71 | </head> |
60 | 72 | <body> |
|
67 | 79 |
|
68 | 80 | <div class="title-block"> |
69 | 81 | <div class="title">pobfus</div> |
70 | | - <div class="subtitle">v1.11.05 godly runtime</div> |
71 | | - </div> |
72 | | - |
73 | | - <div class="license-box"> |
74 | | - mit license<br><br> |
75 | | - permission is granted to process logic streams as-is. |
| 82 | + <div class="subtitle">v1.11.05 repository</div> |
76 | 83 | </div> |
77 | 84 |
|
78 | 85 | <div class="nav-group"> |
79 | 86 | <button class="btn btn-run" id="go">execute process</button> |
80 | | - <button class="btn" onclick="document.getElementById('up').click()">upload file</button> |
81 | 87 | <button class="btn" id="cp">copy output</button> |
82 | | - <button class="btn" id="dl">download .lua</button> |
83 | 88 | <button class="btn" id="cl">purge buffer</button> |
84 | | - <input type="file" id="up" accept=".lua,.txt"> |
85 | 89 | </div> |
86 | 90 |
|
87 | | - <div style="margin-top: auto;"> |
88 | | - <label style="font-size: 10px; color: #444; cursor: pointer; display: flex; align-items: center; gap: 8px;"> |
89 | | - <input type="checkbox" id="mob"> mobile_optimization |
90 | | - </label> |
| 91 | + <div class="history-title" style="font-size: 10px; color: #444; margin-top: 15px; border-bottom: 1px solid var(--brd); padding-bottom: 5px; text-transform: uppercase;">project logs</div> |
| 92 | + |
| 93 | + <div class="changelog-container"> |
| 94 | + <div class="log-section"> |
| 95 | + <span class="log-ver dev">v1.11.06 (scheduled)</span> |
| 96 | + <span class="log-item">deployment date: march 11 2026</span> |
| 97 | + <span class="log-item">stable core integration</span> |
| 98 | + </div> |
| 99 | + <div class="log-section"> |
| 100 | + <span class="log-ver">v1.11.05 (active)</span> |
| 101 | + <span class="log-item">full sidebar scroll fix</span> |
| 102 | + <span class="log-item">branding reconstruction</span> |
| 103 | + <span class="log-item">automated minification</span> |
| 104 | + </div> |
91 | 105 | </div> |
| 106 | + |
| 107 | + <a href="https://github.com/tenringsofdoom1x" class="creator-link" target="_blank"> |
| 108 | + <div class="creator-at">@</div> |
| 109 | + <div class="creator-name">tenringsofdoom1x</div> |
| 110 | + </a> |
92 | 111 | </div> |
93 | 112 |
|
94 | 113 | <div class="main"> |
95 | 114 | <div class="workspace"> |
96 | | - <textarea id="in" spellcheck="false" placeholder="-- source_stream (drag file here)"></textarea> |
97 | | - <textarea id="out" spellcheck="false" readonly placeholder="-- void_output"></textarea> |
| 115 | + <div class="editor-container"><textarea id="in" spellcheck="false" placeholder="-- source_input"></textarea></div> |
| 116 | + <div class="editor-container"><textarea id="out" spellcheck="false" readonly placeholder="-- void_output"></textarea></div> |
98 | 117 | </div> |
99 | 118 | </div> |
100 | 119 |
|
101 | 120 | <div id="log"></div> |
102 | | - |
103 | | - <script> |
104 | | - (function() { |
105 | | - const iel = document.getElementById('in'), oel = document.getElementById('out'); |
106 | | - const log = document.getElementById('log'), mob = document.getElementById('mob'); |
107 | | - const upInput = document.getElementById('up'); |
108 | | - |
109 | | - const push = (t) => { |
110 | | - log.innerText = `> ${t}`; |
111 | | - setTimeout(() => { if(log.innerText === `> ${t}`) log.innerText = ''; }, 4000); |
112 | | - }; |
113 | | - |
114 | | - // auto-minify engine |
115 | | - const minifyLogic = (src) => { |
116 | | - return src |
117 | | - .replace(/--\[\[[\s\S]*?\]\]/g, '') |
118 | | - .replace(/--.*$/gm, '') |
119 | | - .replace(/\s+/g, ' ') |
120 | | - .trim(); |
121 | | - }; |
122 | | - |
123 | | - const todec = (s) => s.split('').map(c => "\\" + c.charCodeAt(0)).join(''); |
124 | | - |
125 | | - // file handler |
126 | | - const handleFile = (file) => { |
127 | | - if (!file) return; |
128 | | - const ext = file.name.split('.').pop().toLowerCase(); |
129 | | - if (['lua', 'txt'].indexOf(ext) === -1) return push("err_type_refused"); |
130 | | - const reader = new FileReader(); |
131 | | - reader.onload = (f) => { iel.value = f.target.result; push("stream_imported"); }; |
132 | | - reader.readAsText(file); |
133 | | - }; |
134 | | - |
135 | | - upInput.onchange = (e) => { handleFile(e.target.files[0]); upInput.value = ''; }; |
136 | | - |
137 | | - iel.addEventListener('dragover', (e) => { e.preventDefault(); iel.classList.add('drag-over'); }); |
138 | | - iel.addEventListener('dragleave', () => { iel.classList.remove('drag-over'); }); |
139 | | - iel.addEventListener('drop', (e) => { |
140 | | - e.preventDefault(); |
141 | | - iel.classList.remove('drag-over'); |
142 | | - handleFile(e.dataTransfer.files[0]); |
143 | | - }); |
144 | | - |
145 | | - // core process |
146 | | - document.getElementById('go').onclick = () => { |
147 | | - let src = iel.value.trim(); |
148 | | - if(!src) return push("err_buffer_null"); |
149 | | - |
150 | | - push("minifying_stream..."); |
151 | | - |
152 | | - setTimeout(() => { |
153 | | - try { |
154 | | - src = minifyLogic(src); |
155 | | - push("building_void..."); |
156 | | - |
157 | | - const k = Math.floor(Math.random() * 45) + 32; |
158 | | - const d = Array.from(src).map(x => x.charCodeAt(0) ^ k).join(','); |
159 | | - const h = todec("pobfus: logic active"); |
160 | | - |
161 | | - let res = `--[[\n pobfus // v1.11.05\n auto-minified godly build\n]]\n\n`; |
162 | | - res += `task.spawn(function() while task.wait(120) do print("${h}") end end);\n\n`; |
163 | | - res += `local _0x_mem = {${d}}; \n`; |
164 | | - res += `local _success, _error = pcall(function() \n`; |
165 | | - |
166 | | - if (mob.checked) { |
167 | | - res += ` local _0x_buf = {}; for _, v in pairs(_0x_mem) do table.insert(_0x_buf, string.char(bit32.bxor(v, ${k}))) end; local _0x_str = table.concat(_0x_buf); \n`; |
168 | | - } else { |
169 | | - res += ` local _0x_str = ""; for _, v in pairs(_0x_mem) do _0x_str = _0x_str .. string.char(bit32.bxor(v, ${k})) end; \n`; |
170 | | - } |
171 | | - |
172 | | - res += ` local _0x_env = setmetatable({}, { \n`; |
173 | | - res += ` __index = function(_, k) \n`; |
174 | | - res += ` if k == "debug" or k == "getfenv" then return function() end end; \n`; |
175 | | - res += ` return (getgenv and getgenv()[k] or _G[k]) \n`; |
176 | | - res += ` end, \n`; |
177 | | - res += ` __metatable = "locked" \n`; |
178 | | - res += ` }); \n`; |
179 | | - |
180 | | - res += ` local _0x_vm = loadstring(_0x_str); \n`; |
181 | | - res += ` setfenv(_0x_vm, _0x_env); \n`; |
182 | | - res += ` (task and task.spawn or spawn)(_0x_vm); \n`; |
183 | | - res += `end); \n`; |
184 | | - |
185 | | - oel.value = res; |
186 | | - push("build_complete"); |
187 | | - } catch (e) { push("build_fault"); } |
188 | | - }, 1000); |
189 | | - }; |
190 | | - |
191 | | - // utility handlers |
192 | | - document.getElementById('cp').onclick = () => { |
193 | | - if(!oel.value) return; |
194 | | - navigator.clipboard.writeText(oel.value); |
195 | | - push("buffer_copied"); |
196 | | - }; |
197 | | - |
198 | | - document.getElementById('dl').onclick = () => { |
199 | | - if(!oel.value) return; |
200 | | - const blob = new Blob([oel.value], {type: "text/plain"}); |
201 | | - const a = document.createElement('a'); |
202 | | - a.href = URL.createObjectURL(blob); |
203 | | - a.download = "pobfus_build.lua"; |
204 | | - a.click(); |
205 | | - push("file_dispatched"); |
206 | | - }; |
207 | | - |
208 | | - document.getElementById('cl').onclick = () => { iel.value = ""; oel.value = ""; push("buffer_purged"); }; |
209 | | - })(); |
210 | | - </script> |
| 121 | + <script src="script.js"></script> |
211 | 122 | </body> |
212 | | - </html> |
| 123 | +</html> |
0 commit comments