Improve and condense related controls

This commit is contained in:
2026-02-15 22:11:17 +00:00
parent ae3365e165
commit 981ee56de7
18 changed files with 1340 additions and 209 deletions

View File

@@ -45,6 +45,14 @@ def _preferred_related_text_field(model: type[models.Model]) -> str | None:
return None
def _column_field_name(column: "OsintColumn") -> str:
if column.search_lookup:
return str(column.search_lookup).split("__", 1)[0]
if column.sort_field:
return str(column.sort_field).split("__", 1)[0]
return str(column.key)
def _url_with_query(base_url: str, query: dict[str, Any]) -> str:
params = {}
for key, value in query.items():
@@ -465,6 +473,8 @@ class OSINTListBase(ObjectList):
if not column.sort_field:
columns.append(
{
"key": column.key,
"field_name": _column_field_name(column),
"label": column.label,
"sortable": False,
"kind": column.kind,
@@ -482,6 +492,8 @@ class OSINTListBase(ObjectList):
)
columns.append(
{
"key": column.key,
"field_name": _column_field_name(column),
"label": column.label,
"sortable": True,
"kind": column.kind,
@@ -815,6 +827,8 @@ class OSINTSearch(LoginRequiredMixin, View):
if not column.sort_field:
columns.append(
{
"key": column.key,
"field_name": _column_field_name(column),
"label": column.label,
"sortable": False,
"kind": column.kind,
@@ -832,6 +846,8 @@ class OSINTSearch(LoginRequiredMixin, View):
)
columns.append(
{
"key": column.key,
"field_name": _column_field_name(column),
"label": column.label,
"sortable": True,
"kind": column.kind,
@@ -1019,3 +1035,51 @@ class OSINTSearch(LoginRequiredMixin, View):
return render(request, self.widget_template, widget_context)
return render(request, self.page_template, context)
class OSINTWorkspace(LoginRequiredMixin, View):
template_name = "pages/osint-workspace.html"
def get(self, request):
context = {
"tabs_widget_url": reverse("osint_workspace_tabs_widget"),
}
return render(request, self.template_name, context)
class OSINTWorkspaceTabsWidget(LoginRequiredMixin, View):
def get(self, request):
tabs = [
{
"key": "people",
"label": "People",
"icon": "fa-solid fa-user-group",
"widget_url": reverse("people", kwargs={"type": "widget"}),
},
{
"key": "groups",
"label": "Groups",
"icon": "fa-solid fa-users",
"widget_url": reverse("groups", kwargs={"type": "widget"}),
},
{
"key": "personas",
"label": "Personas",
"icon": "fa-solid fa-masks-theater",
"widget_url": reverse("personas", kwargs={"type": "widget"}),
},
{
"key": "manipulations",
"label": "Manipulations",
"icon": "fa-solid fa-sliders",
"widget_url": reverse("manipulations", kwargs={"type": "widget"}),
},
]
context = {
"title": "OSINT Workspace",
"unique": "osint-workspace-tabs",
"window_content": "partials/osint-workspace-tabs-widget.html",
"widget_options": 'gs-w="12" gs-h="4" gs-x="0" gs-y="0" gs-min-w="6"',
"tabs": tabs,
}
return render(request, "mixins/wm/widget.html", context)