feat: promotion

This commit is contained in:
2026-04-24 11:45:42 +07:00
parent df04cb1d09
commit 15077adf47
15 changed files with 2939 additions and 153 deletions
+44 -2
View File
@@ -374,6 +374,14 @@
setInnerAstValues(card, iv);
}
if (cd.badge && card.badge) {
var bv = {
left: cd.badge.left != null ? cd.badge.left : DEFAULTS.badge.left,
top: cd.badge.top != null ? cd.badge.top : DEFAULTS.badge.top
};
setBadgeValues(card, bv);
}
// Update originals to saved state
originals.set(cardKey(card), getCardState(card));
card.el.classList.remove('editor-changed');
@@ -432,6 +440,20 @@
}
}
// Badge
if (card.badge) {
var badgeChanged = false;
var badgeData = {};
if (Math.abs(cur.badge.left - DEFAULTS.badge.left) > 0.01) { badgeData.left = +cur.badge.left.toFixed(1); badgeChanged = true; }
if (Math.abs(cur.badge.top - DEFAULTS.badge.top) > 0.01) { badgeData.top = +cur.badge.top.toFixed(1); badgeChanged = true; }
if (badgeChanged) {
if (!changesOnly || Math.abs(cur.badge.left - orig.badge.left) > 0.01 || Math.abs(cur.badge.top - orig.badge.top) > 0.01) {
cardData.badge = badgeData;
hasChange = true;
}
}
}
if (changesOnly && !hasChange) return;
if (!changesOnly && !hasChange) return;
@@ -450,6 +472,7 @@
setAsteroidScale(card, orig.asteroidScale);
setShipValues(card, orig.ship);
if (card.innerAst) setInnerAstValues(card, orig.innerAst);
if (card.badge) setBadgeValues(card, orig.badge);
card.el.classList.remove('editor-changed');
});
if (selected && selected.card.pageNum === pageNum) updateInfo();
@@ -526,15 +549,34 @@
setInnerAstValues(card, iv); markChanged(card); updateInfo(); e.preventDefault(); break;
case '0':
setInnerAstValues(card, Object.assign({}, DEFAULTS.innerAst));
// Also reset transform to just translate (remove scale if any)
card.innerAst.style.transform = 'translate(-50%, -50%)';
markChanged(card); updateInfo(); e.preventDefault(); break;
}
} else if (mode === MODE_BADGE) {
var bv = getBadgeValues(card);
var bStep = e.shiftKey ? 0.5 : 1;
switch (e.key) {
case 'ArrowLeft':
bv.left = +(bv.left - bStep).toFixed(1);
setBadgeValues(card, bv); markChanged(card); updateInfo(); e.preventDefault(); break;
case 'ArrowRight':
bv.left = +(bv.left + bStep).toFixed(1);
setBadgeValues(card, bv); markChanged(card); updateInfo(); e.preventDefault(); break;
case 'ArrowUp':
bv.top = +(bv.top - bStep).toFixed(1);
setBadgeValues(card, bv); markChanged(card); updateInfo(); e.preventDefault(); break;
case 'ArrowDown':
bv.top = +(bv.top + bStep).toFixed(1);
setBadgeValues(card, bv); markChanged(card); updateInfo(); e.preventDefault(); break;
case '0':
setBadgeValues(card, Object.assign({}, DEFAULTS.badge));
markChanged(card); updateInfo(); e.preventDefault(); break;
}
}
});
document.addEventListener('click', function(e) {
if (selected && !e.target.closest('.space-asteroid') && !e.target.closest('.cargo-ship') && !e.target.closest('.inner-ast')) {
if (selected && !e.target.closest('.space-asteroid') && !e.target.closest('.cargo-ship') && !e.target.closest('.inner-ast') && !e.target.closest('.badge-10')) {
deselectAll();
}
});