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)
if isinstance( formfield, JSONField ):
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
def explain_gather_results( self, request, results, fails_to_show = 2 ):

View File

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

View File

@ -10,13 +10,9 @@ class Codearea( Textarea ):
super().__init__( *args, **kwargs )
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({
"textarea": super().render( name, value, attrs, renderer ),
"value": value,
"target": name,
"hljs_config": {
"language": self.language
}
})