Add markup inserter functionality and render markup filter for enhanced text editing
This commit is contained in:
@@ -216,4 +216,11 @@
|
||||
{{ caseresource_formset.empty_form | crispy}}
|
||||
</li>
|
||||
</div>
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function(){
|
||||
if(window.markupInserter && typeof markupInserter.initForNames === 'function'){
|
||||
markupInserter.initForNames(['description','history','discussion','report','notes']);
|
||||
}
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
||||
@@ -219,4 +219,63 @@
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<script>
|
||||
// Global handler for markup links inserted by render_markup
|
||||
document.body.addEventListener('click', function(ev){
|
||||
var el = ev.target.closest && ev.target.closest('.markup-link');
|
||||
if(!el) return;
|
||||
ev.preventDefault();
|
||||
try{
|
||||
var typ = el.getAttribute('data-type');
|
||||
var args = el.getAttribute('data-args');
|
||||
var href = el.getAttribute('href') || '#';
|
||||
|
||||
if(typ === 'case'){
|
||||
// open case — give option to open in new tab
|
||||
if(window.confirm('Open case in new tab?')){
|
||||
window.open(href, '_blank');
|
||||
} else {
|
||||
window.location = href;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// For finding/displayset open modal with basic options — endpoints can be wired later
|
||||
var modal = document.getElementById('case-field-modal');
|
||||
var content = modal && modal.querySelector('.modal-content');
|
||||
var parsedArgs = [];
|
||||
try{ parsedArgs = JSON.parse(args || '[]'); }catch(e){ parsedArgs = []; }
|
||||
|
||||
if(typ === 'finding'){
|
||||
var findingId = parsedArgs[0] || '';
|
||||
var html = '<div class="modal-header"><h5 class="modal-title">Finding '+findingId+'</h5><button type="button" class="btn-close" data-bs-dismiss="modal"></button></div>';
|
||||
html += '<div class="modal-body">';
|
||||
html += '<p>This will open the finding viewer for ID '+findingId+'.</p>';
|
||||
html += '<p><a class="btn btn-sm btn-primary" href="/atlas/finding/'+findingId+'" target="_blank">Open in new tab</a> ';
|
||||
html += '<button class="btn btn-sm btn-secondary" type="button" data-bs-dismiss="modal">Close</button></p>';
|
||||
html += '</div>';
|
||||
if(content) content.innerHTML = html;
|
||||
var bs = new bootstrap.Modal(modal);
|
||||
bs.show();
|
||||
return;
|
||||
}
|
||||
|
||||
if(typ === 'displayset'){
|
||||
var caseId = parsedArgs[0] || '';
|
||||
var setName = parsedArgs[1] || '';
|
||||
var html = '<div class="modal-header"><h5 class="modal-title">Display set '+setName+'</h5><button type="button" class="btn-close" data-bs-dismiss="modal"></button></div>';
|
||||
html += '<div class="modal-body">';
|
||||
html += '<p>Display set <strong>'+setName+'</strong> from case #'+caseId+'.</p>';
|
||||
html += '<p><a class="btn btn-sm btn-primary" href="/atlas/collection/'+caseId+'" target="_blank">Open case in new tab</a> ';
|
||||
html += '<button class="btn btn-sm btn-secondary" type="button" data-bs-dismiss="modal">Close</button></p>';
|
||||
html += '</div>';
|
||||
if(content) content.innerHTML = html;
|
||||
var bs2 = new bootstrap.Modal(modal);
|
||||
bs2.show();
|
||||
return;
|
||||
}
|
||||
|
||||
}catch(err){ console.error('markup link handler error', err); }
|
||||
}, false);
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
class="mt-2">
|
||||
{% csrf_token %}
|
||||
{% if field_kind == "textarea" %}
|
||||
<div class="markup-toolbar-placeholder"></div>
|
||||
<textarea class="form-control" name="value" rows="4">{{ value|default_if_none:"" }}</textarea>
|
||||
{% elif field_kind == "select" %}
|
||||
<select class="form-select" name="value" {% if multiple %}multiple{% endif %}>
|
||||
@@ -71,7 +72,8 @@
|
||||
{% else %}
|
||||
{% if field_kind == "textarea" %}
|
||||
{% if display_value %}
|
||||
<div class="pre-whitespace{% if show_label %} mt-1{% endif %}">{{ display_value|linebreaks }}</div>
|
||||
{% load markup_links %}
|
||||
<div class="pre-whitespace{% if show_label %} mt-1{% endif %}">{{ display_value|render_markup }}</div>
|
||||
{% else %}
|
||||
<div class="{% if show_label %}mt-1 {% endif %}text-muted">Not set</div>
|
||||
{% endif %}
|
||||
|
||||
Reference in New Issue
Block a user