v0.14.37 - Fix gear panel: buttons were submitting the armory form
Root cause: both buttons were inserted inside the armory <form>. HTML <button> defaults to type=submit — clicking submitted the form, the page reloaded, and the panel (which renders 300ms later) was destroyed. The split-second flash was the panel before the reload. Fix: type='button' on both buttons. Panel now stays up.
This commit is contained in:
parent
f3561bb435
commit
b2e96c6191
5 changed files with 15 additions and 21 deletions
|
|
@ -1,7 +1,7 @@
|
||||||
// ==UserScript==
|
// ==UserScript==
|
||||||
// @name HV Unified
|
// @name HV Unified
|
||||||
// @namespace hvunified
|
// @namespace hvunified
|
||||||
// @version 0.14.36
|
// @version 0.14.37
|
||||||
// @description HV Unified — battle automation, guidance, and UI enhancements for HentaiVerse
|
// @description HV Unified — battle automation, guidance, and UI enhancements for HentaiVerse
|
||||||
// @author GaboGG + Hermes
|
// @author GaboGG + Hermes
|
||||||
// @match *://*.hentaiverse.org/*
|
// @match *://*.hentaiverse.org/*
|
||||||
|
|
@ -17,7 +17,7 @@
|
||||||
// CONFIG — default settings
|
// CONFIG — default settings
|
||||||
// ═══════════════════════════════════════════════════════════════════════
|
// ═══════════════════════════════════════════════════════════════════════
|
||||||
|
|
||||||
const VERSION = '0.14.36';
|
const VERSION = '0.14.37';
|
||||||
|
|
||||||
const CFG = {
|
const CFG = {
|
||||||
// — Battle automation
|
// — Battle automation
|
||||||
|
|
@ -3857,7 +3857,6 @@ function analyzeGear() {
|
||||||
|
|
||||||
// ── UI ──
|
// ── UI ──
|
||||||
function buildGearPanel() {
|
function buildGearPanel() {
|
||||||
console.log('%c[HV] 📊 buildGearPanel called', 'color:#0f0');
|
|
||||||
// Remove old panel
|
// Remove old panel
|
||||||
const old = document.getElementById('hv-gear-panel');
|
const old = document.getElementById('hv-gear-panel');
|
||||||
if (old) old.remove();
|
if (old) old.remove();
|
||||||
|
|
@ -3884,7 +3883,6 @@ function buildGearPanel() {
|
||||||
panel.appendChild(title);
|
panel.appendChild(title);
|
||||||
|
|
||||||
const { results } = analyzeGear();
|
const { results } = analyzeGear();
|
||||||
console.log(`%c[HV] 📊 Analysis: ${results.length} slots`, 'color:#0f0');
|
|
||||||
|
|
||||||
results.forEach(({ slot, current, cands }) => {
|
results.forEach(({ slot, current, cands }) => {
|
||||||
const block = document.createElement('div');
|
const block = document.createElement('div');
|
||||||
|
|
@ -3935,7 +3933,6 @@ function buildGearPanel() {
|
||||||
});
|
});
|
||||||
|
|
||||||
document.body.appendChild(panel);
|
document.body.appendChild(panel);
|
||||||
console.log(`%c[HV] 📊 Panel rendered (${document.getElementById('hv-gear-panel') ? 'in DOM' : 'MISSING from DOM'})`, 'color:#0f0');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function enhanceGearAnalysis() {
|
function enhanceGearAnalysis() {
|
||||||
|
|
@ -3954,6 +3951,7 @@ function enhanceGearAnalysis() {
|
||||||
|
|
||||||
// Analyze button
|
// Analyze button
|
||||||
const analyzeBtn = document.createElement('button');
|
const analyzeBtn = document.createElement('button');
|
||||||
|
analyzeBtn.type = 'button'; // CRITICAL: prevent form submit (inside armory form)
|
||||||
analyzeBtn.textContent = '🔍 Analyze Gear';
|
analyzeBtn.textContent = '🔍 Analyze Gear';
|
||||||
analyzeBtn.style.cssText = css({
|
analyzeBtn.style.cssText = css({
|
||||||
padding: '3px 8px', background: '#2a2a4a', color: '#fff',
|
padding: '3px 8px', background: '#2a2a4a', color: '#fff',
|
||||||
|
|
@ -3961,12 +3959,11 @@ function enhanceGearAnalysis() {
|
||||||
fontSize: '11px', fontFamily: 'monospace',
|
fontSize: '11px', fontFamily: 'monospace',
|
||||||
});
|
});
|
||||||
analyzeBtn.onclick = () => {
|
analyzeBtn.onclick = () => {
|
||||||
console.log('%c[HV] 🔍 Analyze clicked', 'color:#0f0');
|
|
||||||
try {
|
try {
|
||||||
autoScrapeGear();
|
autoScrapeGear();
|
||||||
} catch (e) { console.error('[HV] scrape failed:', e); }
|
} catch (e) { console.error('[HV] scrape failed:', e); }
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
try { buildGearPanel(); console.log('%c[HV] 📊 Panel built', 'color:#0f0'); }
|
try { buildGearPanel(); }
|
||||||
catch (e) { console.error('[HV] gear panel failed:', e); }
|
catch (e) { console.error('[HV] gear panel failed:', e); }
|
||||||
}, 300);
|
}, 300);
|
||||||
};
|
};
|
||||||
|
|
@ -3974,6 +3971,7 @@ function enhanceGearAnalysis() {
|
||||||
|
|
||||||
// Rescan button (clears buy data then rescrapes)
|
// Rescan button (clears buy data then rescrapes)
|
||||||
const rescanBtn = document.createElement('button');
|
const rescanBtn = document.createElement('button');
|
||||||
|
rescanBtn.type = 'button'; // CRITICAL: prevent form submit (inside armory form)
|
||||||
rescanBtn.textContent = '🔄 Clear Buy + Rescan';
|
rescanBtn.textContent = '🔄 Clear Buy + Rescan';
|
||||||
rescanBtn.style.cssText = css({
|
rescanBtn.style.cssText = css({
|
||||||
padding: '3px 8px', background: '#3a2a2a', color: '#fff',
|
padding: '3px 8px', background: '#3a2a2a', color: '#fff',
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
// ==UserScript==
|
// ==UserScript==
|
||||||
// @name HV Unified
|
// @name HV Unified
|
||||||
// @namespace hvunified
|
// @namespace hvunified
|
||||||
// @version 0.14.36
|
// @version 0.14.37
|
||||||
// @description HV Unified — battle automation, guidance, and UI enhancements for HentaiVerse
|
// @description HV Unified — battle automation, guidance, and UI enhancements for HentaiVerse
|
||||||
// @author GaboGG + Hermes
|
// @author GaboGG + Hermes
|
||||||
// @match *://*.hentaiverse.org/*
|
// @match *://*.hentaiverse.org/*
|
||||||
|
|
@ -17,7 +17,7 @@
|
||||||
// CONFIG — default settings
|
// CONFIG — default settings
|
||||||
// ═══════════════════════════════════════════════════════════════════════
|
// ═══════════════════════════════════════════════════════════════════════
|
||||||
|
|
||||||
const VERSION = '0.14.36';
|
const VERSION = '0.14.37';
|
||||||
|
|
||||||
const CFG = {
|
const CFG = {
|
||||||
// — Battle automation
|
// — Battle automation
|
||||||
|
|
@ -3857,7 +3857,6 @@ function analyzeGear() {
|
||||||
|
|
||||||
// ── UI ──
|
// ── UI ──
|
||||||
function buildGearPanel() {
|
function buildGearPanel() {
|
||||||
console.log('%c[HV] 📊 buildGearPanel called', 'color:#0f0');
|
|
||||||
// Remove old panel
|
// Remove old panel
|
||||||
const old = document.getElementById('hv-gear-panel');
|
const old = document.getElementById('hv-gear-panel');
|
||||||
if (old) old.remove();
|
if (old) old.remove();
|
||||||
|
|
@ -3884,7 +3883,6 @@ function buildGearPanel() {
|
||||||
panel.appendChild(title);
|
panel.appendChild(title);
|
||||||
|
|
||||||
const { results } = analyzeGear();
|
const { results } = analyzeGear();
|
||||||
console.log(`%c[HV] 📊 Analysis: ${results.length} slots`, 'color:#0f0');
|
|
||||||
|
|
||||||
results.forEach(({ slot, current, cands }) => {
|
results.forEach(({ slot, current, cands }) => {
|
||||||
const block = document.createElement('div');
|
const block = document.createElement('div');
|
||||||
|
|
@ -3935,7 +3933,6 @@ function buildGearPanel() {
|
||||||
});
|
});
|
||||||
|
|
||||||
document.body.appendChild(panel);
|
document.body.appendChild(panel);
|
||||||
console.log(`%c[HV] 📊 Panel rendered (${document.getElementById('hv-gear-panel') ? 'in DOM' : 'MISSING from DOM'})`, 'color:#0f0');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function enhanceGearAnalysis() {
|
function enhanceGearAnalysis() {
|
||||||
|
|
@ -3954,6 +3951,7 @@ function enhanceGearAnalysis() {
|
||||||
|
|
||||||
// Analyze button
|
// Analyze button
|
||||||
const analyzeBtn = document.createElement('button');
|
const analyzeBtn = document.createElement('button');
|
||||||
|
analyzeBtn.type = 'button'; // CRITICAL: prevent form submit (inside armory form)
|
||||||
analyzeBtn.textContent = '🔍 Analyze Gear';
|
analyzeBtn.textContent = '🔍 Analyze Gear';
|
||||||
analyzeBtn.style.cssText = css({
|
analyzeBtn.style.cssText = css({
|
||||||
padding: '3px 8px', background: '#2a2a4a', color: '#fff',
|
padding: '3px 8px', background: '#2a2a4a', color: '#fff',
|
||||||
|
|
@ -3961,12 +3959,11 @@ function enhanceGearAnalysis() {
|
||||||
fontSize: '11px', fontFamily: 'monospace',
|
fontSize: '11px', fontFamily: 'monospace',
|
||||||
});
|
});
|
||||||
analyzeBtn.onclick = () => {
|
analyzeBtn.onclick = () => {
|
||||||
console.log('%c[HV] 🔍 Analyze clicked', 'color:#0f0');
|
|
||||||
try {
|
try {
|
||||||
autoScrapeGear();
|
autoScrapeGear();
|
||||||
} catch (e) { console.error('[HV] scrape failed:', e); }
|
} catch (e) { console.error('[HV] scrape failed:', e); }
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
try { buildGearPanel(); console.log('%c[HV] 📊 Panel built', 'color:#0f0'); }
|
try { buildGearPanel(); }
|
||||||
catch (e) { console.error('[HV] gear panel failed:', e); }
|
catch (e) { console.error('[HV] gear panel failed:', e); }
|
||||||
}, 300);
|
}, 300);
|
||||||
};
|
};
|
||||||
|
|
@ -3974,6 +3971,7 @@ function enhanceGearAnalysis() {
|
||||||
|
|
||||||
// Rescan button (clears buy data then rescrapes)
|
// Rescan button (clears buy data then rescrapes)
|
||||||
const rescanBtn = document.createElement('button');
|
const rescanBtn = document.createElement('button');
|
||||||
|
rescanBtn.type = 'button'; // CRITICAL: prevent form submit (inside armory form)
|
||||||
rescanBtn.textContent = '🔄 Clear Buy + Rescan';
|
rescanBtn.textContent = '🔄 Clear Buy + Rescan';
|
||||||
rescanBtn.style.cssText = css({
|
rescanBtn.style.cssText = css({
|
||||||
padding: '3px 8px', background: '#3a2a2a', color: '#fff',
|
padding: '3px 8px', background: '#3a2a2a', color: '#fff',
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
// CONFIG — default settings
|
// CONFIG — default settings
|
||||||
// ═══════════════════════════════════════════════════════════════════════
|
// ═══════════════════════════════════════════════════════════════════════
|
||||||
|
|
||||||
const VERSION = '0.14.36';
|
const VERSION = '0.14.37';
|
||||||
|
|
||||||
const CFG = {
|
const CFG = {
|
||||||
// — Battle automation
|
// — Battle automation
|
||||||
|
|
|
||||||
|
|
@ -149,7 +149,6 @@ function analyzeGear() {
|
||||||
|
|
||||||
// ── UI ──
|
// ── UI ──
|
||||||
function buildGearPanel() {
|
function buildGearPanel() {
|
||||||
console.log('%c[HV] 📊 buildGearPanel called', 'color:#0f0');
|
|
||||||
// Remove old panel
|
// Remove old panel
|
||||||
const old = document.getElementById('hv-gear-panel');
|
const old = document.getElementById('hv-gear-panel');
|
||||||
if (old) old.remove();
|
if (old) old.remove();
|
||||||
|
|
@ -176,7 +175,6 @@ function buildGearPanel() {
|
||||||
panel.appendChild(title);
|
panel.appendChild(title);
|
||||||
|
|
||||||
const { results } = analyzeGear();
|
const { results } = analyzeGear();
|
||||||
console.log(`%c[HV] 📊 Analysis: ${results.length} slots`, 'color:#0f0');
|
|
||||||
|
|
||||||
results.forEach(({ slot, current, cands }) => {
|
results.forEach(({ slot, current, cands }) => {
|
||||||
const block = document.createElement('div');
|
const block = document.createElement('div');
|
||||||
|
|
@ -227,7 +225,6 @@ function buildGearPanel() {
|
||||||
});
|
});
|
||||||
|
|
||||||
document.body.appendChild(panel);
|
document.body.appendChild(panel);
|
||||||
console.log(`%c[HV] 📊 Panel rendered (${document.getElementById('hv-gear-panel') ? 'in DOM' : 'MISSING from DOM'})`, 'color:#0f0');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function enhanceGearAnalysis() {
|
function enhanceGearAnalysis() {
|
||||||
|
|
@ -246,6 +243,7 @@ function enhanceGearAnalysis() {
|
||||||
|
|
||||||
// Analyze button
|
// Analyze button
|
||||||
const analyzeBtn = document.createElement('button');
|
const analyzeBtn = document.createElement('button');
|
||||||
|
analyzeBtn.type = 'button'; // CRITICAL: prevent form submit (inside armory form)
|
||||||
analyzeBtn.textContent = '🔍 Analyze Gear';
|
analyzeBtn.textContent = '🔍 Analyze Gear';
|
||||||
analyzeBtn.style.cssText = css({
|
analyzeBtn.style.cssText = css({
|
||||||
padding: '3px 8px', background: '#2a2a4a', color: '#fff',
|
padding: '3px 8px', background: '#2a2a4a', color: '#fff',
|
||||||
|
|
@ -253,12 +251,11 @@ function enhanceGearAnalysis() {
|
||||||
fontSize: '11px', fontFamily: 'monospace',
|
fontSize: '11px', fontFamily: 'monospace',
|
||||||
});
|
});
|
||||||
analyzeBtn.onclick = () => {
|
analyzeBtn.onclick = () => {
|
||||||
console.log('%c[HV] 🔍 Analyze clicked', 'color:#0f0');
|
|
||||||
try {
|
try {
|
||||||
autoScrapeGear();
|
autoScrapeGear();
|
||||||
} catch (e) { console.error('[HV] scrape failed:', e); }
|
} catch (e) { console.error('[HV] scrape failed:', e); }
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
try { buildGearPanel(); console.log('%c[HV] 📊 Panel built', 'color:#0f0'); }
|
try { buildGearPanel(); }
|
||||||
catch (e) { console.error('[HV] gear panel failed:', e); }
|
catch (e) { console.error('[HV] gear panel failed:', e); }
|
||||||
}, 300);
|
}, 300);
|
||||||
};
|
};
|
||||||
|
|
@ -266,6 +263,7 @@ function enhanceGearAnalysis() {
|
||||||
|
|
||||||
// Rescan button (clears buy data then rescrapes)
|
// Rescan button (clears buy data then rescrapes)
|
||||||
const rescanBtn = document.createElement('button');
|
const rescanBtn = document.createElement('button');
|
||||||
|
rescanBtn.type = 'button'; // CRITICAL: prevent form submit (inside armory form)
|
||||||
rescanBtn.textContent = '🔄 Clear Buy + Rescan';
|
rescanBtn.textContent = '🔄 Clear Buy + Rescan';
|
||||||
rescanBtn.style.cssText = css({
|
rescanBtn.style.cssText = css({
|
||||||
padding: '3px 8px', background: '#3a2a2a', color: '#fff',
|
padding: '3px 8px', background: '#3a2a2a', color: '#fff',
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
// ==UserScript==
|
// ==UserScript==
|
||||||
// @name HV Unified
|
// @name HV Unified
|
||||||
// @namespace hvunified
|
// @namespace hvunified
|
||||||
// @version 0.14.36
|
// @version 0.14.37
|
||||||
// @description HV Unified — battle automation, guidance, and UI enhancements for HentaiVerse
|
// @description HV Unified — battle automation, guidance, and UI enhancements for HentaiVerse
|
||||||
// @author GaboGG + Hermes
|
// @author GaboGG + Hermes
|
||||||
// @match *://*.hentaiverse.org/*
|
// @match *://*.hentaiverse.org/*
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue