38676-vm/fix_admin.py
2026-03-07 02:50:28 +00:00

125 lines
7.0 KiB
Python

import sys
import re
try:
with open('admin.php', 'r') as f:
content = f.read()
# Remove any existing script tags and their contents
content = re.sub(r'<script>.*?</script>', '', content, flags=re.DOTALL)
content = content.replace('<script>', '').replace('</script>', '')
# Define the full script content
script_content = r"""
<script>
function syncSlug(val, targetId) {
const target = document.getElementById(targetId);
if (target) {
target.value = val.toLowerCase().normalize('NFD').replace(/[̀-ͤ]/g, '').replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '');
if (typeof checkUnitFormValidity === 'function') checkUnitFormValidity();
}
}
// UNIT TAB JS
const unitGridDataInput = document.getElementById('unit_grid_data');
const unitGridCells = document.querySelectorAll('.grid-cell');
function initUnitGrid() {
const grid = document.getElementById('unit_grid');
if (grid) {
const cells = grid.querySelectorAll('.grid-cell');
cells.forEach(cell => {
cell.addEventListener('click', () => {
cell.classList.toggle('active');
cell.style.background = cell.classList.contains('active') ? '#88c0d0' : '#0a0f1d';
updateGridData();
});
});
}
}
function updateGridData() {
const activeIndices = [];
const cells = document.querySelectorAll('.grid-cell');
cells.forEach(cell => { if (cell.classList.contains('active')) activeIndices.push(cell.getAttribute('data-index')); });
const input = document.getElementById('unit_grid_data');
if (input) input.value = JSON.stringify(activeIndices);
checkUnitFormValidity();
}
function checkUnitFormValidity() {
const name = document.getElementById('unit_name')?.value;
const slug = document.getElementById('unit_slug')?.value;
const gridData = document.getElementById('unit_grid_data')?.value;
const submitBtn = document.getElementById('unit_submit_btn');
if (submitBtn) {
const isValid = name && slug && gridData && gridData !== '[]' && gridData !== '';
submitBtn.disabled = !isValid;
submitBtn.style.opacity = isValid ? '1' : '0.5';
}
}
function resetUnitForm() {
document.getElementById('unit_id').value = 0;
const cells = document.querySelectorAll('.grid-cell');
cells.forEach(cell => { cell.classList.remove('active'); cell.style.background = '#0a0f1d'; });
const input = document.getElementById('unit_grid_data');
if (input) input.value = '';
document.querySelectorAll('.reward-input-destroy, .reward-input-capture').forEach(input => input.value = 0);
checkUnitFormValidity();
}
function editUnit(data) {
document.getElementById('unit_id').value = data.id;
document.getElementById('unit_name').value = data.name;
document.getElementById('unit_slug').value = data.slug;
document.getElementById('unit_faction_id').value = data.faction_id || "";
document.getElementById('unit_can_be_destroyed').checked = data.can_be_destroyed == 1;
document.getElementById('unit_can_be_captured').checked = data.can_be_captured == 1;
document.getElementById('unit_points_per_hit').value = data.points_per_hit;
document.getElementById('unit_bonus_destruction').value = data.bonus_destruction;
document.getElementById('unit_bonus_capture').value = data.bonus_capture;
const indices = JSON.parse(data.grid_data || '[]');
const cells = document.querySelectorAll('.grid-cell');
cells.forEach(cell => {
const active = indices.includes(cell.getAttribute('data-index'));
cell.classList.toggle('active', active);
cell.style.background = active ? '#88c0d0' : '#0a0f1d';
});
const input = document.getElementById('unit_grid_data');
if (input) input.value = data.grid_data;
document.querySelectorAll('.reward-input-destroy, .reward-input-capture').forEach(input => input.value = 0);
if (data.rewards) {
data.rewards.forEach(r => {
const selector = r.action_type === 'destroy' ? '.reward-input-destroy' : '.reward-input-capture';
const input = document.querySelector(selector + '[data-res-id="' + r.resource_id + '"]');
if (input) input.value = r.amount;
});
}
window.scrollTo({ top: 0, behavior: 'smooth' });
checkUnitFormValidity();
}
// Shared helpers
function editLevel(d) { document.getElementById("level_id").value = d.id; document.getElementById("level_name").value = d.name; document.getElementById("level_slug").value = d.slug; document.getElementById("level_resource_id").value = d.resource_id; document.getElementById("level_required_quantity").value = d.required_quantity; window.scrollTo(0,0); }
function editRank(r) { document.getElementById('rank_id').value = r.id; document.getElementById('rank_name').value = r.name; document.getElementById('rank_slug').value = r.slug; document.getElementById('rank_type').value = r.user_type; document.getElementById('rank_min').value = r.min_level || ''; document.getElementById('rank_max').value = r.max_level || ''; window.scrollTo(0,0); }
function editStatus(s) { document.getElementById("st_id").value = s.id; document.getElementById("st_name").value = s.name; document.getElementById("st_slug").value = s.slug; document.getElementById("st_color").value = s.color.replace(';blink',''); document.getElementById("st_is_blinking").checked = s.color.includes(';blink'); window.scrollTo(0,0); }
function editResource(r) { document.getElementById('res_id').value = r.id; document.getElementById('res_name').value = r.name; document.getElementById('res_slug').value = r.slug; document.getElementById('res_icon').value = r.icon; window.scrollTo(0,0); }
function editFaction(f) { document.getElementById('fac_id').value = f.id; document.getElementById('fac_name').value = f.name; document.getElementById('fac_slug').value = f.slug; document.getElementById('fac_color').value = f.color; window.scrollTo(0,0); }
function editObject(o) { document.getElementById('obj_id').value = o.id; document.getElementById('obj_name').value = o.name; document.getElementById('obj_slug').value = o.slug; window.scrollTo(0,0); }
function resetObjectForm() { document.getElementById('obj_id').value = 0; }
function resetLevelForm() { document.getElementById('level_id').value = 0; }
function resetRankForm() { document.getElementById('rank_id').value = 0; }
function resetStatusForm() { document.getElementById('st_id').value = 0; }
function resetResourceForm() { document.getElementById('res_id').value = 0; }
function resetFactionForm() { document.getElementById('fac_id').value = 0; }
document.addEventListener('DOMContentLoaded', () => {
initUnitGrid();
checkUnitFormValidity();
});
</script>