Files
mayan-edms/mayan/apps/document_indexing/widgets.py
Roberto Rosario 36a51eeb73 Switch to full app paths
Instead of inserting the path of the apps into the Python app,
the apps are now referenced by their full import path.

This solves name clashes with external or native Python libraries.
Example: Mayan statistics app vs. Python new statistics library.

Every app reference is now prepended with 'mayan.apps'.

Existing config.yml files need to be updated manually.

Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
2019-04-05 02:02:57 -04:00

88 lines
2.5 KiB
Python

from __future__ import unicode_literals
from django.apps import apps
from django.utils.encoding import force_text
from django.utils.html import mark_safe, escape
from .icons import icon_index, icon_index_level_up, icon_node_with_documents
def get_instance_link(index_instance_node):
"""
Return an HTML anchor to an index node instance
"""
return mark_safe(
'<a href="{url}">{text}</a>'.format(
url=index_instance_node.get_absolute_url(),
text=escape(index_instance_node.get_full_path())
)
)
def index_instance_item_link(index_instance_item):
IndexInstanceNode = apps.get_model(
app_label='document_indexing', model_name='IndexInstanceNode'
)
if isinstance(index_instance_item, IndexInstanceNode):
if index_instance_item.index_template_node.link_documents:
icon = icon_node_with_documents.render()
else:
icon = icon_index_level_up.render()
else:
icon = ''
return mark_safe(
'%(icon)s&nbsp;<a href="%(url)s">%(text)s</a>' % {
'url': index_instance_item.get_absolute_url(),
'icon': icon,
'text': index_instance_item
}
)
def node_level(node):
"""
Render an indented tree like output for a specific node
"""
return mark_safe(
''.join(
[
'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' * node.get_level(),
'' if node.is_root_node() else icon_index_level_up.render(),
force_text(node)
]
)
)
def node_tree(node, user):
result = []
result.append('<div class="list-group">')
for ancestor in node.get_ancestors(include_self=True):
if ancestor.is_root_node():
element = node.index()
icon = icon_index
else:
element = ancestor
if element.index_template_node.link_documents:
icon = icon_node_with_documents
else:
icon = icon_index_level_up
result.append(
'<a href="{url}" class="list-group-item {active}"><span class="badge">{count}</span>{icon} {text}</a>'.format(
url=element.get_absolute_url(),
active='active' if element == node or node.get_ancestors(include_self=True).count() == 1 else '',
count=element.get_item_count(user=user),
icon=icon.render(),
text=escape(element)
)
)
result.append('</div>')
return mark_safe(''.join(result))