Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a6b246a92b |
@@ -812,12 +812,12 @@
|
||||
<div id="range_generator_group" class="form-group" style="display:none; background: #f9f9f9; padding: 15px; border-radius: 5px; border: 1px solid #ddd; margin-bottom: 15px;">
|
||||
<label style="font-weight: bold;">Code-Bereich automatisch generieren:</label>
|
||||
<div style="display: flex; gap: 10px; margin-bottom: 10px; align-items: center;">
|
||||
<input type="text" id="range_prefix" placeholder="Präfix (z.B. IT-)" class="form-control" style="flex: 2;">
|
||||
<input type="text" id="range_prefix" placeholder="Präfix optional (z.B. IT-)" class="form-control" style="flex: 2;">
|
||||
<input type="number" id="range_start" placeholder="Start (z.B. 1)" class="form-control" style="flex: 1;">
|
||||
<span style="font-weight: bold;">bis</span>
|
||||
<input type="text" id="range_end" placeholder="Ende (z.B. 020)" class="form-control" style="flex: 1;">
|
||||
</div>
|
||||
<small style="display:block; color:#666; margin-bottom: 10px;">Tipp: Die Anzahl der Ziffern im "Ende"-Feld bestimmt die führenden Nullen (z.B. Ende "050" macht aus Start "1" einen "001").</small>
|
||||
<small style="display:block; color:#666; margin-bottom: 10px;">Tipp: Der Präfix ist optional. Die Anzahl der Ziffern im "Ende"-Feld bestimmt die führenden Nullen (z.B. Ende "050" macht aus Start "1" einen "001").</small>
|
||||
<button type="button" class="btn btn-secondary" onclick="generateCodeRange()">Bereich generieren & einfügen</button>
|
||||
</div>
|
||||
|
||||
@@ -852,9 +852,9 @@
|
||||
</select>
|
||||
<small style="display:block; color:#666;">Wählen Sie einen Medientyp aus zur Klassifizierung.</small>
|
||||
</div>
|
||||
<h3>Kategorie/Typ:</h3>
|
||||
<h3>Kategorie/Typ/Fach:</h3>
|
||||
<div class="form-group">
|
||||
<input type="text" name="library_category" id="library_category" placeholder="z.B. Belletristik, Sachbücher, Nachschlagewerke, etc.">
|
||||
<input type="text" name="library_category" id="library_category" placeholder="z.B. Belletristik, Sachbücher, Nachschlagewerke, etc. (optional)">
|
||||
<small style="display:block; color:#666;">Geben Sie hier eine beliebige Kategorie ein zur freien Klassifizierung.</small>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1024,6 +1024,66 @@
|
||||
<script>
|
||||
const libraryModuleEnabled = {{ 'true' if library_module_enabled else 'false' }};
|
||||
|
||||
function getFocusableFormFields(form) {
|
||||
if (!form) return [];
|
||||
return Array.from(form.querySelectorAll('input, select, textarea, button'))
|
||||
.filter((element) => {
|
||||
if (element.disabled || element.getAttribute('aria-hidden') === 'true') return false;
|
||||
const style = window.getComputedStyle(element);
|
||||
if (style.display === 'none' || style.visibility === 'hidden') return false;
|
||||
const tagName = element.tagName.toLowerCase();
|
||||
const type = (element.type || '').toLowerCase();
|
||||
return tagName !== 'button' || type !== 'button';
|
||||
});
|
||||
}
|
||||
|
||||
function focusNextFormField(currentField) {
|
||||
const form = currentField && currentField.form ? currentField.form : null;
|
||||
const fields = getFocusableFormFields(form || document);
|
||||
const currentIndex = fields.indexOf(currentField);
|
||||
|
||||
if (currentIndex >= 0) {
|
||||
for (let i = currentIndex + 1; i < fields.length; i++) {
|
||||
const nextField = fields[i];
|
||||
const nextStyle = window.getComputedStyle(nextField);
|
||||
if (nextStyle.display !== 'none' && nextStyle.visibility !== 'hidden') {
|
||||
nextField.focus();
|
||||
if (nextField.tagName.toLowerCase() === 'select') {
|
||||
nextField.click();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (form) {
|
||||
const submitButton = form.querySelector('button[type="submit"]');
|
||||
if (submitButton) {
|
||||
submitButton.focus();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
document.querySelectorAll('form').forEach(function (form) {
|
||||
form.addEventListener('keydown', function (event) {
|
||||
const target = event.target;
|
||||
if (event.key !== 'Enter') return;
|
||||
if (!target || target.tagName === 'TEXTAREA' && !event.shiftKey) return;
|
||||
const tagName = target.tagName.toLowerCase();
|
||||
const type = (target.type || '').toLowerCase();
|
||||
if (!['input', 'select', 'textarea'].includes(tagName)) return;
|
||||
if (['button', 'submit', 'reset', 'file', 'checkbox', 'radio', 'hidden'].includes(type)) return;
|
||||
|
||||
event.preventDefault();
|
||||
focusNextFormField(target);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
// Function to check if a file is a video
|
||||
function isVideoFile(filename) {
|
||||
const videoExtensions = ['.mp4', '.mov', '.avi', '.mkv', '.webm', '.flv', '.m4v', '.3gp'];
|
||||
@@ -1195,7 +1255,7 @@
|
||||
let generatedCodes = [];
|
||||
for (let i = start; i <= end; i++) {
|
||||
let numStr = i.toString().padStart(paddingLength, '0');
|
||||
generatedCodes.push(`${prefix}${numStr}`);
|
||||
generatedCodes.push(prefix ? `${prefix}${numStr}` : numStr);
|
||||
}
|
||||
|
||||
const codeField = document.getElementById('code_4');
|
||||
|
||||
Reference in New Issue
Block a user