Small feature and fixes

Added field_widgets to asyncron.base.admin models
fixed language config not working
This commit is contained in:
Oracle 2025-08-11 17:06:24 +02:00
parent 07fe648b9c
commit 9d7e1b080d
3 changed files with 14 additions and 15 deletions

View File

@ -12,6 +12,11 @@ class BaseModelAdmin( admin.ModelAdmin ):
formfield = super().formfield_for_dbfield(db_field, **kwargs) formfield = super().formfield_for_dbfield(db_field, **kwargs)
if isinstance( formfield, JSONField ): if isinstance( formfield, JSONField ):
formfield.widget = Codearea( language = "json" ) formfield.widget = Codearea( language = "json" )
custom_widget = getattr(self, "field_widgets", {}).get(db_field.name, None)
if custom_widget:
formfield.widget = custom_widget()
return formfield return formfield
def explain_gather_results( self, request, results, fails_to_show = 2 ): def explain_gather_results( self, request, results, fails_to_show = 2 ):

View File

@ -5,7 +5,7 @@
<div id="codearea_{{ target }}"> <div id="codearea_{{ target }}">
{{ textarea }} {{ textarea }}
<pre>{{ value }}</pre> <code class="language-{{ language }}">{{ value }}</code>
</div> </div>
<style media="screen"> <style media="screen">
#codearea_{{ target }} { #codearea_{{ target }} {
@ -22,10 +22,10 @@
color: transparent; color: transparent;
text-shadow: none; text-shadow: none;
} }
#codearea_{{ target }} > pre { #codearea_{{ target }} > code {
position: absolute; pointer-events: none; position: absolute; pointer-events: none;
left: 0; right: 0; top: 0; bottom: 0; left: 0; right: 0; top: 0; bottom: 0;
white-space: wrap; white-space: pre-wrap;
opacity: 1; opacity: 1;
background: transparent; background: transparent;
} }
@ -38,19 +38,17 @@
} }
</style> </style>
{{ hljs_config | json_script:"hlsj-config" }}
<script> <script>
(function(){ (function(){
const codearea = document.getElementById("codearea_{{ target }}"); const codearea = document.getElementById("codearea_{{ target }}");
const textarea = codearea.querySelector('textarea'); const textarea = codearea.querySelector('textarea');
const pre = codearea.querySelector('pre'); const code = codearea.querySelector('code');
const config = JSON.parse(document.getElementById('hlsj-config').textContent);
textarea.addEventListener('input', (e) => { textarea.addEventListener('input', (e) => {
pre.innerText = e.target.value; code.innerHTML = textarea.value;
delete pre.dataset.highlighted; delete code.dataset.highlighted;
hljs.highlightElement( pre, config ) hljs.highlightElement( code )
}); });
hljs.highlightElement( pre, config ) hljs.highlightElement( code )
})() })()
</script> </script>

View File

@ -10,13 +10,9 @@ class Codearea( Textarea ):
super().__init__( *args, **kwargs ) super().__init__( *args, **kwargs )
def render( self, name, value, attrs = None, renderer = None ): def render( self, name, value, attrs = None, renderer = None ):
print( self )
print(f"RENDERING: {name=} {value=} {attrs=} {renderer=}")
return loader.get_template("asyncron/codearea-widget.html").render({ return loader.get_template("asyncron/codearea-widget.html").render({
"textarea": super().render( name, value, attrs, renderer ), "textarea": super().render( name, value, attrs, renderer ),
"value": value, "value": value,
"target": name, "target": name,
"hljs_config": {
"language": self.language "language": self.language
}
}) })