fix table with handling, icons implemented
This commit is contained in:
@@ -23,18 +23,61 @@
|
||||
{% elif d and d.data_type in ['integer','decimal'] %}<input type="number" {% if d.data_type=='decimal' %}step="any"{% endif %} name="{{f.field_name}}" value="{{value or ''}}" {% if f.required %}required{% endif %}>
|
||||
{% elif d and d.data_type == 'json' %}<textarea name="{{f.field_name}}">{{value|tojson if value else ''}}</textarea>
|
||||
{% else %}<input name="{{f.field_name}}" value="{{value or ''}}" {% if f.required %}required{% endif %}>{% endif %}</label>{% endfor %}{% endif %}
|
||||
<label>{{t('assets.image', 'Image')}}<input type="file" name="image" accept="image/*"></label><button class="button button-save">💾 {{t('common.save')}}</button></form>
|
||||
<div class="form-field asset-image-editor" data-image-editor>
|
||||
<label for="asset-image-input">{{t('assets.image', 'Image')}}</label>
|
||||
<div class="asset-edit-image-preview" id="asset-current-image-preview" data-image-preview {% if not (asset and not duplicate_mode and asset.image_path) %}hidden style="display:none"{% endif %}>
|
||||
<img src="{{ asset.image_path if asset and not duplicate_mode and asset.image_path else '' }}" alt="" class="asset-edit-preview-image">
|
||||
<div class="asset-edit-image-preview-actions">
|
||||
<span class="muted">{{ t('assets.current_image', 'Aktuelles Assetbild') }}</span>
|
||||
<button type="button" class="button button-danger button-small" id="remove-asset-image-button" data-image-remove aria-pressed="false" {% if not (asset and not duplicate_mode and asset.image_path) %}hidden disabled{% endif %}>{{ t('assets.remove_image', 'Assetbild entfernen') }}</button>
|
||||
</div>
|
||||
</div>
|
||||
<input type="hidden" name="remove_image" id="remove-asset-image" value="0" data-image-remove-input>
|
||||
<div class="image-remove-pending" data-image-remove-pending hidden>{{ t('assets.image_remove_pending', 'Assetbild wird beim Speichern entfernt.') }}</div>
|
||||
<div class="standard-image-library">
|
||||
<strong>{{ t('images.library', 'Standardbild-Bibliothek') }}</strong>
|
||||
<div class="muted image-library-help">{{ t('images.library_help', 'Wähle ein bereits vorhandenes Standardbild oder füge ein Bild einmalig zur Bibliothek hinzu.') }}</div>
|
||||
{% if standard_images %}
|
||||
<div class="standard-image-grid">
|
||||
{% for item in standard_images %}
|
||||
<label class="standard-image-choice" title="{{ item.name }}">
|
||||
<input type="radio" name="library_image" value="{{ item.path }}" data-image-library-choice data-image-src="{{ item.path }}" {% if asset and not duplicate_mode and asset.image_path == item.path %}checked{% endif %}>
|
||||
<img src="{{ item.path }}" alt="">
|
||||
<span>{{ item.name }}</span>
|
||||
</label>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="muted image-library-empty">{{ t('images.library_empty', 'Noch keine Standardbilder vorhanden.') }}</div>
|
||||
{% endif %}
|
||||
<label class="image-upload-label">{{ t('images.library_upload', 'Neues Standardbild hinzufügen und verwenden') }}
|
||||
<input type="file" name="library_upload" accept="image/*" data-image-library-upload>
|
||||
</label>
|
||||
<small class="muted">{{ t('images.library_upload_help', 'Das Bild wird einmal in der gemeinsamen Bibliothek gespeichert und kann danach bei weiteren Assets und Kategorien wiederverwendet werden.') }}</small>
|
||||
</div>
|
||||
</div>
|
||||
<label>{{ t('assets.visual_source', 'Anzeigequelle') }}
|
||||
<select name="visual_source">
|
||||
{% set current_visual_source = asset.visual_source if asset and asset.visual_source else 'auto' %}
|
||||
<option value="auto" {% if current_visual_source == 'auto' %}selected{% endif %}>{{ t('assets.visual_source.auto', 'Automatisch: Assetbild → Kategoriebild → MeshCentral-Icon') }}</option>
|
||||
<option value="asset_image" {% if current_visual_source == 'asset_image' %}selected{% endif %}>{{ t('assets.visual_source.asset_image', 'Nur Assetbild') }}</option>
|
||||
<option value="category_image" {% if current_visual_source == 'category_image' %}selected{% endif %}>{{ t('assets.visual_source.category_image', 'Kategoriebild') }}</option>
|
||||
<option value="mesh_icon" {% if current_visual_source == 'mesh_icon' %}selected{% endif %}>{{ t('assets.visual_source.mesh_icon', 'MeshCentral-Icon') }}</option>
|
||||
</select>
|
||||
<small class="muted">{{ t('assets.visual_source.help', 'Legt fest, welches Bild oder Icon für dieses Asset in Listen und Details bevorzugt angezeigt wird.') }}</small>
|
||||
</label><button class="button button-save">💾 {{t('common.save')}}</button></form>
|
||||
{% if asset and not duplicate_mode %}
|
||||
<script>
|
||||
(() => {
|
||||
const input = document.getElementById('mesh-node-id-input');
|
||||
const clearButton = document.getElementById('mesh-node-id-clear');
|
||||
if (!input || !clearButton) return;
|
||||
clearButton.addEventListener('click', () => {
|
||||
input.value = '';
|
||||
input.focus();
|
||||
input.dispatchEvent(new Event('input', { bubbles: true }));
|
||||
});
|
||||
if (input && clearButton) {
|
||||
clearButton.addEventListener('click', () => {
|
||||
input.value = '';
|
||||
input.focus();
|
||||
input.dispatchEvent(new Event('input', { bubbles: true }));
|
||||
});
|
||||
}
|
||||
})();
|
||||
</script>
|
||||
{% endif %}
|
||||
|
||||
Reference in New Issue
Block a user