Weiter am Ingame Chastity Game gearbeitet
Some checks failed
Host-Based Deploy (Java 21 Fix) / build-and-run (push) Has been cancelled
Some checks failed
Host-Based Deploy (Java 21 Fix) / build-and-run (push) Has been cancelled
This commit is contained in:
@@ -416,7 +416,7 @@
|
||||
|
||||
<label class="label-with-hint">
|
||||
<span>Beschreibung *</span>
|
||||
<button type="button" class="btn-hint" onclick="togglePlaceholderHint()" title="Platzhalter-Hilfe">i</button>
|
||||
<button type="button" id="iPlaceholderHintBtn" class="btn-hint" onclick="togglePlaceholderHint()" title="Platzhalter-Hilfe">i</button>
|
||||
</label>
|
||||
<div id="iPlaceholderHint" style="display:none;">
|
||||
<div class="placeholder-hint">
|
||||
@@ -451,15 +451,17 @@
|
||||
<div id="iLevelRow">
|
||||
<label for="iLevel">Level *</label>
|
||||
<input type="number" id="iLevel" min="1" max="5" placeholder="1–5">
|
||||
<label>Dauer (Sekunden)</label>
|
||||
<div class="modal-two-col">
|
||||
<div>
|
||||
<label for="iSekVon" style="margin-top:0;">Von</label>
|
||||
<input type="number" id="iSekVon" min="0" placeholder="z. B. 30">
|
||||
</div>
|
||||
<div>
|
||||
<label for="iSekBis" style="margin-top:0;">Bis</label>
|
||||
<input type="number" id="iSekBis" min="0" placeholder="z. B. 120">
|
||||
<div id="iSekRow">
|
||||
<label>Dauer (Sekunden)</label>
|
||||
<div class="modal-two-col">
|
||||
<div>
|
||||
<label for="iSekVon" style="margin-top:0;">Von</label>
|
||||
<input type="number" id="iSekVon" min="0" placeholder="z. B. 30">
|
||||
</div>
|
||||
<div>
|
||||
<label for="iSekBis" style="margin-top:0;">Bis</label>
|
||||
<input type="number" id="iSekBis" min="0" placeholder="z. B. 120">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -749,7 +751,7 @@
|
||||
<div class="gruppe-body" id="body-${esc(g.gruppenId)}" style="display:none;">
|
||||
${g.beschreibung ? `<div class="gruppe-desc">${esc(g.beschreibung)}</div>` : ''}
|
||||
${renderSubSection('Aufgaben', sortByLevelThenName(g.aufgaben || []), 'aufgabe', renderAufgabe, g.gruppenId, type)}
|
||||
${renderSubSection('Strafen', sortByLevelThenName(g.strafen || []), 'strafe', renderStrafe, g.gruppenId, type)}
|
||||
${g.availableIn !== 'CHASTITY_ONLY' ? renderSubSection('Strafen', sortByLevelThenName(g.strafen || []), 'strafe', renderStrafe, g.gruppenId, type) : ''}
|
||||
${renderSubSection('Zeitstrafen',sortByName(g.sperren || []), 'zeitstrafe',renderZeitstrafe, g.gruppenId, type)}
|
||||
${renderSubSection('Finisher', sortByGeschlecht(g.finisher || []), 'finisher', renderFinisher, g.gruppenId, type)}
|
||||
</div>
|
||||
@@ -1086,7 +1088,9 @@
|
||||
pubCb.checked = !g.privateGruppe;
|
||||
pubCb.disabled = g.privateGruppe; // Veröffentlichen nur über den Veröffentlichen-Button
|
||||
document.getElementById('gPublicLabel').style.display = 'block';
|
||||
document.getElementById('gAvailableIn').value = g.availableIn || 'BDSM_ONLY';
|
||||
const avSel = document.getElementById('gAvailableIn');
|
||||
avSel.value = g.availableIn || 'BDSM_ONLY';
|
||||
avSel.disabled = true;
|
||||
const imgWrap = document.getElementById('gCurrentImgWrap');
|
||||
if (g.bild) {
|
||||
document.getElementById('gCurrentImg').src = 'data:image/png;base64,' + g.bild;
|
||||
@@ -1104,7 +1108,8 @@
|
||||
document.getElementById('gDesc').value = '';
|
||||
document.getElementById('gPublic').checked = false;
|
||||
document.getElementById('gPublicLabel').style.display = 'none';
|
||||
document.getElementById('gAvailableIn').value = 'BDSM_ONLY';
|
||||
document.getElementById('gAvailableIn').value = 'BDSM_ONLY';
|
||||
document.getElementById('gAvailableIn').disabled = false;
|
||||
document.getElementById('gCurrentImgWrap').style.display = 'none';
|
||||
gruppeModal.classList.add('open');
|
||||
document.getElementById('gName').focus();
|
||||
@@ -1113,7 +1118,8 @@
|
||||
|
||||
function closeGruppeModal() {
|
||||
gruppeModal.classList.remove('open');
|
||||
document.getElementById('gPublic').disabled = false;
|
||||
document.getElementById('gPublic').disabled = false;
|
||||
document.getElementById('gAvailableIn').disabled = false;
|
||||
}
|
||||
|
||||
document.getElementById('openCreateBtn').addEventListener('click', () => openModal(null));
|
||||
@@ -1359,6 +1365,7 @@
|
||||
let currentItemGruppeId = null;
|
||||
let currentItemKind = null; // 'aufgabe' | 'strafe' | 'zeitstrafe'
|
||||
let currentItemEditId = null; // null = neu, sonst ID des zu bearbeitenden Items
|
||||
let _isChastityMode = false;
|
||||
|
||||
const ITEM_TITLES_NEW = { aufgabe: 'Aufgabe hinzufügen', strafe: 'Strafe hinzufügen', zeitstrafe: 'Zeitstrafe hinzufügen', finisher: 'Finisher hinzufügen' };
|
||||
const ITEM_TITLES_EDIT = { aufgabe: 'Aufgabe bearbeiten', strafe: 'Strafe bearbeiten', zeitstrafe: 'Zeitstrafe bearbeiten', finisher: 'Finisher bearbeiten' };
|
||||
@@ -1366,6 +1373,11 @@
|
||||
function _setupItemModal(kind) {
|
||||
const isZeit = kind === 'zeitstrafe';
|
||||
const isFinisher = kind === 'finisher';
|
||||
const isChastity = (_gruppeData[currentItemGruppeId]?.availableIn === 'CHASTITY_ONLY');
|
||||
_isChastityMode = isChastity;
|
||||
|
||||
// Placeholder hint button + text
|
||||
document.getElementById('iPlaceholderHintBtn').style.display = isChastity ? 'none' : '';
|
||||
document.querySelector('#iPlaceholderHint .placeholder-hint').innerHTML =
|
||||
isFinisher
|
||||
? 'In Texten können Platzhalter verwendet werden:<br>' +
|
||||
@@ -1374,15 +1386,38 @@
|
||||
: 'In Texten können Platzhalter verwendet werden:<br>' +
|
||||
'<code>{AKTIV}</code> – Name des aktiven Parts<br>' +
|
||||
'<code>{PASSIV}</code> – Name des passiven Parts';
|
||||
document.getElementById('iGeschlechtRow').style.display = isFinisher ? 'block' : 'none';
|
||||
document.getElementById('iLevelRow').style.display = (!isZeit && !isFinisher) ? 'block' : 'none';
|
||||
document.getElementById('iWerkzeugAktivRow').style.display = (!isZeit && !isFinisher) ? 'block' : 'none';
|
||||
document.getElementById('iWerkzeugPassivRow').style.display = (!isZeit && !isFinisher) ? 'block' : 'none';
|
||||
document.getElementById('iWerkzeugFinisherAktivRow').style.display = isFinisher ? 'block' : 'none';
|
||||
document.getElementById('iWerkzeugFinisherPassivRow').style.display = isFinisher ? 'block' : 'none';
|
||||
document.getElementById('iMinutenRow').style.display = isZeit ? 'block' : 'none';
|
||||
document.getElementById('iSperreFuerRow').style.display = isZeit ? 'block' : 'none';
|
||||
document.getElementById('iReleaseTextRow').style.display = isZeit ? 'block' : 'none';
|
||||
|
||||
// Geschlecht: finisher only, and not in chastity
|
||||
document.getElementById('iGeschlechtRow').style.display = (isFinisher && !isChastity) ? 'block' : 'none';
|
||||
|
||||
// Level row: aufgabe/strafe always; zeitstrafe only in chastity
|
||||
document.getElementById('iLevelRow').style.display = (!isZeit && !isFinisher) || (isZeit && isChastity) ? 'block' : 'none';
|
||||
// Sekunden sub-section: not for chastity zeitstrafe
|
||||
document.getElementById('iSekRow').style.display = (!isZeit && !isFinisher) ? 'block' : 'none';
|
||||
|
||||
// Aktiv Werkzeuge: aufgabe/strafe only
|
||||
document.getElementById('iWerkzeugAktivRow').style.display = (!isZeit && !isFinisher) ? 'block' : 'none';
|
||||
document.querySelector('#iWerkzeugAktivRow label').textContent = isChastity ? 'Benötigt' : 'Benötigt (aktiv)';
|
||||
['VAGINA', 'PENIS', 'UMSCHNALLDILDO'].forEach(v => {
|
||||
const lbl = document.querySelector(`#iWerkzeugAktiv input[value="${v}"]`)?.closest('label');
|
||||
if (lbl) lbl.style.display = isChastity ? 'none' : '';
|
||||
});
|
||||
|
||||
// Passiv Werkzeuge: aufgabe/strafe, not in chastity
|
||||
document.getElementById('iWerkzeugPassivRow').style.display = (!isZeit && !isFinisher && !isChastity) ? 'block' : 'none';
|
||||
|
||||
// Finisher Werkzeuge: not in chastity
|
||||
document.getElementById('iWerkzeugFinisherAktivRow').style.display = (isFinisher && !isChastity) ? 'block' : 'none';
|
||||
document.getElementById('iWerkzeugFinisherPassivRow').style.display = (isFinisher && !isChastity) ? 'block' : 'none';
|
||||
|
||||
// Zeitstrafe rows
|
||||
document.getElementById('iMinutenRow').style.display = isZeit ? 'block' : 'none';
|
||||
document.getElementById('iSperreFuerRow').style.display = isZeit ? 'block' : 'none';
|
||||
['VAGINA', 'PENIS'].forEach(v => {
|
||||
const lbl = document.querySelector(`#iSperreFuer input[value="${v}"]`)?.closest('label');
|
||||
if (lbl) lbl.style.display = isChastity ? 'none' : '';
|
||||
});
|
||||
document.getElementById('iReleaseTextRow').style.display = isZeit ? 'block' : 'none';
|
||||
}
|
||||
|
||||
function _resetItemFields() {
|
||||
@@ -1449,6 +1484,9 @@
|
||||
document.getElementById('iMinBis').value = d.minutenBis != null ? d.minutenBis : '';
|
||||
document.getElementById('iReleaseText').value = d.releaseText || '';
|
||||
(d.sperreFuer || []).forEach(w => { const cb = document.querySelector(`#iSperreFuer input[value="${w}"]`); if (cb) cb.checked = true; });
|
||||
if (_isChastityMode) {
|
||||
document.getElementById('iLevel').value = d.level != null ? d.level : '';
|
||||
}
|
||||
}
|
||||
|
||||
const preSelected = (d.benoetigteToys || []).filter(t => t.toyId);
|
||||
@@ -1480,7 +1518,7 @@
|
||||
}
|
||||
function buildItems(filter) {
|
||||
const f = filter || '';
|
||||
_items = STATIC.filter(s => !f || s.toLowerCase().includes(f)).map(s => ({ label: s, insert: s }));
|
||||
_items = (_isChastityMode ? [] : STATIC.filter(s => !f || s.toLowerCase().includes(f))).map(s => ({ label: s, insert: s }));
|
||||
const toys = _allToys.filter(t => !f || t.name.toLowerCase().includes(f));
|
||||
if (toys.length) {
|
||||
_items.push({ separator: true, label: 'Toys' });
|
||||
@@ -1606,13 +1644,14 @@
|
||||
method = isEdit ? 'PUT' : 'POST';
|
||||
|
||||
} else if (kind === 'finisher') {
|
||||
const geschlecht = document.querySelector('#iGeschlecht input:checked')?.value;
|
||||
if (!geschlecht) { showItemError('Bitte ein Geschlecht auswählen.'); return; }
|
||||
const geschlecht = _isChastityMode ? null : document.querySelector('#iGeschlecht input:checked')?.value;
|
||||
if (!_isChastityMode && !geschlecht) { showItemError('Bitte ein Geschlecht auswählen.'); return; }
|
||||
payload = {
|
||||
kurzText, text, geschlecht,
|
||||
kurzText, text,
|
||||
geschlecht: geschlecht || null,
|
||||
gruppeId: isEdit ? undefined : currentItemGruppeId,
|
||||
benoetigtAktiv: checkedValues('iWerkzeugFinisherAktiv'),
|
||||
benoetigtPassiv: checkedValues('iWerkzeugFinisherPassiv'),
|
||||
benoetigtAktiv: _isChastityMode ? [] : checkedValues('iWerkzeugFinisherAktiv'),
|
||||
benoetigtPassiv: _isChastityMode ? [] : checkedValues('iWerkzeugFinisherPassiv'),
|
||||
benoetigteToys: _selectedToys.map(t => ({ toyId: t.toyId }))
|
||||
};
|
||||
url = isEdit ? apiUrl(`/finisher/${currentItemEditId}`) : apiUrl('/finisher');
|
||||
@@ -1624,6 +1663,14 @@
|
||||
const sperreFuer = checkedValues('iSperreFuer');
|
||||
if (sperreFuer.length === 0) { showItemError('Bitte mindestens ein Werkzeug für die Sperre auswählen.'); return; }
|
||||
|
||||
let zeitLevel = null;
|
||||
if (_isChastityMode) {
|
||||
const lv = document.getElementById('iLevel').value.trim();
|
||||
if (!lv) { showItemError('Bitte ein Level angeben.'); return; }
|
||||
zeitLevel = parseInt(lv, 10);
|
||||
if (isNaN(zeitLevel) || zeitLevel < 1 || zeitLevel > 5) { showItemError('Level muss zwischen 1 und 5 liegen.'); return; }
|
||||
}
|
||||
|
||||
const minBis = document.getElementById('iMinBis').value.trim();
|
||||
payload = {
|
||||
kurzText, text,
|
||||
@@ -1632,6 +1679,7 @@
|
||||
minutenBis: minBis ? parseInt(minBis, 10) : null,
|
||||
releaseText: document.getElementById('iReleaseText').value.trim() || null,
|
||||
sperreFuer,
|
||||
level: zeitLevel,
|
||||
benoetigteToys: _selectedToys.map(t => ({ toyId: t.toyId }))
|
||||
};
|
||||
url = isEdit ? `/sperre/${currentItemEditId}` : '/sperre'; // BDSM-only
|
||||
|
||||
Reference in New Issue
Block a user