diff --git a/mayan/apps/common/icons.py b/mayan/apps/common/icons.py
index 413e807e62..e689a21347 100644
--- a/mayan/apps/common/icons.py
+++ b/mayan/apps/common/icons.py
@@ -16,6 +16,9 @@ icon_current_user_locale_profile_edit = Icon(
driver_name='fontawesome', symbol='globe'
)
icon_documentation = Icon(driver_name='fontawesome', symbol='book')
+icon_fail = Icon(
+ driver_name='fontawesome', symbol='times'
+)
icon_forum = Icon(
driver_name='fontawesome', symbol='life-ring'
)
@@ -31,6 +34,9 @@ icon_menu_user = Icon(
icon_object_error_list_with_icon = Icon(
driver_name='fontawesome', symbol='lock'
)
+icon_ok = Icon(
+ driver_name='fontawesome', symbol='check'
+)
icon_packages_licenses = Icon(
driver_name='fontawesome', symbol='certificate'
)
@@ -43,3 +49,4 @@ icon_support = Icon(
icon_tools = Icon(
driver_name='fontawesome', symbol='wrench'
)
+
diff --git a/mayan/apps/common/widgets.py b/mayan/apps/common/widgets.py
index f8ebf0fca4..a4b021097f 100644
--- a/mayan/apps/common/widgets.py
+++ b/mayan/apps/common/widgets.py
@@ -5,6 +5,8 @@ from django.utils.encoding import force_text
from django.utils.html import format_html
from django.utils.safestring import mark_safe
+from icons import icon_fail as default_icon_fail, icon_ok as default_icon_ok
+
class DisableableSelectWidget(forms.SelectMultiple):
allow_multiple_selected = True
@@ -76,8 +78,22 @@ class TextAreaDiv(forms.widgets.Widget):
super(TextAreaDiv, self).__init__(default_attrs)
-def two_state_template(state, ok_icon='fa fa-check', fail_icon='fa fa-times'):
- if state:
- return mark_safe(''.format(ok_icon))
- else:
- return mark_safe(''.format(fail_icon))
+class TwoStateWidget(object):
+ def __init__(self, state, icon_ok=None, icon_fail=None):
+ self.state = state
+ self.icon_ok = icon_ok or default_icon_ok
+ self.icon_fail = icon_fail or default_icon_fail
+
+ def render(self):
+ if self.state:
+ return mark_safe(
+ '
{}
'.format(
+ self.icon_ok.render()
+ )
+ )
+ else:
+ return mark_safe(
+ '{}
'.format(
+ self.icon_fail.render()
+ )
+ )
diff --git a/mayan/apps/document_indexing/apps.py b/mayan/apps/document_indexing/apps.py
index 03084da236..b28324c260 100644
--- a/mayan/apps/document_indexing/apps.py
+++ b/mayan/apps/document_indexing/apps.py
@@ -14,7 +14,7 @@ from common import (
MayanAppConfig, menu_facet, menu_main, menu_object, menu_secondary,
menu_setup, menu_tools
)
-from common.widgets import two_state_template
+from common.widgets import TwoStateWidget
from documents.signals import post_document_created, post_initial_document_type
from mayan.celery import app
from navigation import SourceColumn
@@ -80,7 +80,9 @@ class DocumentIndexingApp(MayanAppConfig):
SourceColumn(source=Index, label=_('Slug'), attribute='slug')
SourceColumn(
source=Index, label=_('Enabled'),
- func=lambda context: two_state_template(context['object'].enabled)
+ func=lambda context: TwoStateWidget(
+ state=context['object'].enabled
+ ).render()
)
SourceColumn(
@@ -108,13 +110,15 @@ class DocumentIndexingApp(MayanAppConfig):
)
SourceColumn(
source=IndexTemplateNode, label=_('Enabled'),
- func=lambda context: two_state_template(context['object'].enabled)
+ func=lambda context: TwoStateWidget(
+ state=context['object'].enabled
+ ).render()
)
SourceColumn(
source=IndexTemplateNode, label=_('Has document links?'),
- func=lambda context: two_state_template(
- context['object'].link_documents
- )
+ func=lambda context: TwoStateWidget(
+ state=context['object'].link_documents
+ ).render()
)
SourceColumn(
diff --git a/mayan/apps/document_states/apps.py b/mayan/apps/document_states/apps.py
index 92f1195991..85a64ad6d7 100644
--- a/mayan/apps/document_states/apps.py
+++ b/mayan/apps/document_states/apps.py
@@ -15,7 +15,7 @@ from common import (
from common.classes import ModelAttribute
from common.links import link_object_error_list
from common.permissions_runtime import permission_error_log_view
-from common.widgets import two_state_template
+from common.widgets import TwoStateWidget
from mayan.celery import app
from navigation import SourceColumn
@@ -198,7 +198,9 @@ class DocumentStatesApp(MayanAppConfig):
SourceColumn(
source=WorkflowState, label=_('Is initial state?'),
- func=lambda context: two_state_template(context['object'].initial)
+ func=lambda context: TwoStateWidget(
+ state=context['object'].initial
+ ).render()
)
SourceColumn(
source=WorkflowState, label=_('Completion'), attribute='completion'
@@ -209,7 +211,9 @@ class DocumentStatesApp(MayanAppConfig):
)
SourceColumn(
source=WorkflowStateAction, label=_('Enabled?'),
- func=lambda context: two_state_template(context['object'].enabled)
+ func=lambda context: TwoStateWidget(
+ state=context['object'].enabled
+ ).render()
)
SourceColumn(
source=WorkflowStateAction, label=_('When?'),
diff --git a/mayan/apps/documents/apps.py b/mayan/apps/documents/apps.py
index 3416c1e1d4..b5076efd10 100644
--- a/mayan/apps/documents/apps.py
+++ b/mayan/apps/documents/apps.py
@@ -17,7 +17,7 @@ from common import (
from common.classes import ModelAttribute
from common.dashboards import dashboard_main
from common.signals import post_initial_setup
-from common.widgets import two_state_template
+from common.widgets import TwoStateWidget
from converter.links import link_transformation_list
from converter.permissions import (
permission_transformation_create,
@@ -251,7 +251,9 @@ class DocumentsApp(MayanAppConfig):
SourceColumn(
source=DocumentTypeFilename, label=_('Enabled'),
- func=lambda context: two_state_template(context['object'].enabled)
+ func=lambda context: TwoStateWidget(
+ state=context['object'].enabled
+ ).render()
)
# DeletedDocument
diff --git a/mayan/apps/events/apps.py b/mayan/apps/events/apps.py
index 33283841f0..8de1e7012a 100644
--- a/mayan/apps/events/apps.py
+++ b/mayan/apps/events/apps.py
@@ -8,7 +8,7 @@ from common import (
MayanAppConfig, menu_main, menu_object, menu_secondary, menu_tools,
menu_user
)
-from common.widgets import two_state_template
+from common.widgets import TwoStateWidget
from navigation import SourceColumn
from .links import (
@@ -75,9 +75,9 @@ class EventsApp(MayanAppConfig):
)
SourceColumn(
source=Notification, label=_('Seen'),
- func=lambda context: two_state_template(
+ func=lambda context: TwoStateWidget(
state=context['object'].read
- )
+ ).render()
)
menu_main.bind_links(
diff --git a/mayan/apps/linking/apps.py b/mayan/apps/linking/apps.py
index fc3dc5bfdb..56fee57d08 100644
--- a/mayan/apps/linking/apps.py
+++ b/mayan/apps/linking/apps.py
@@ -10,7 +10,7 @@ from common import (
MayanAppConfig, menu_facet, menu_object, menu_secondary, menu_setup,
menu_sidebar
)
-from common.widgets import two_state_template
+from common.widgets import TwoStateWidget
from navigation import SourceColumn
from .links import (
@@ -65,12 +65,16 @@ class LinkingApp(MayanAppConfig):
)
SourceColumn(
source=SmartLink, label=_('Enabled'),
- func=lambda context: two_state_template(context['object'].enabled)
+ func=lambda context: TwoStateWidget(
+ state=context['object'].enabled
+ ).render()
)
SourceColumn(
source=SmartLinkCondition, label=_('Enabled'),
- func=lambda context: two_state_template(context['object'].enabled)
+ func=lambda context: TwoStateWidget(
+ state=context['object'].enabled
+ ).render()
)
menu_facet.bind_links(
diff --git a/mayan/apps/mailer/apps.py b/mayan/apps/mailer/apps.py
index 3b465426b6..a9d95ad7f8 100644
--- a/mayan/apps/mailer/apps.py
+++ b/mayan/apps/mailer/apps.py
@@ -12,7 +12,7 @@ from common import (
MayanAppConfig, menu_object, menu_multi_item, menu_secondary, menu_setup,
menu_tools
)
-from common.widgets import two_state_template
+from common.widgets import TwoStateWidget
from mayan.celery import app
from navigation import SourceColumn
@@ -60,15 +60,15 @@ class MailerApp(MayanAppConfig):
)
SourceColumn(
source=UserMailer, label=_('Default?'),
- func=lambda context: two_state_template(
- context['object'].default
- )
+ func=lambda context: TwoStateWidget(
+ state=context['object'].default
+ ).render()
)
SourceColumn(
source=UserMailer, label=_('Enabled?'),
- func=lambda context: two_state_template(
- context['object'].enabled
- )
+ func=lambda context: TwoStateWidget(
+ state=context['object'].enabled
+ ).render()
)
SourceColumn(
source=UserMailer, label=_('Label'), attribute='backend_label'
diff --git a/mayan/apps/metadata/apps.py b/mayan/apps/metadata/apps.py
index b169f165a5..a5163f4538 100644
--- a/mayan/apps/metadata/apps.py
+++ b/mayan/apps/metadata/apps.py
@@ -14,7 +14,7 @@ from common import (
menu_setup, menu_sidebar
)
from common.classes import ModelAttribute
-from common.widgets import two_state_template
+from common.widgets import TwoStateWidget
from documents.search import document_page_search, document_search
from documents.signals import post_document_type_change
from mayan.celery import app
@@ -135,9 +135,9 @@ class MetadataApp(MayanAppConfig):
)
SourceColumn(
source=DocumentMetadata, label=_('Required'),
- func=lambda context: two_state_template(
- context['object'].is_required
- )
+ func=lambda context: TwoStateWidget(
+ state=context['object'].is_required
+ ).render()
)
app.conf.CELERY_QUEUES.append(
diff --git a/mayan/apps/sources/views.py b/mayan/apps/sources/views.py
index 6f624ac4bd..81cd45cba9 100644
--- a/mayan/apps/sources/views.py
+++ b/mayan/apps/sources/views.py
@@ -18,7 +18,7 @@ from common.views import (
ConfirmView, MultiFormView, SingleObjectCreateView,
SingleObjectDeleteView, SingleObjectEditView, SingleObjectListView
)
-from common.widgets import two_state_template
+from common.widgets import TwoStateWidget
from documents.models import DocumentType, Document
from documents.permissions import (
permission_document_create, permission_document_new_version
@@ -574,7 +574,7 @@ class SetupSourceListView(SingleObjectListView):
{
'name': _('Enabled'),
'attribute': encapsulate(
- lambda entry: two_state_template(entry.enabled)
+ lambda entry: TwoStateWidget(state=entry.enabled).render()
)
},
),
diff --git a/mayan/apps/task_manager/apps.py b/mayan/apps/task_manager/apps.py
index 67c4aa55e0..2660d558f8 100644
--- a/mayan/apps/task_manager/apps.py
+++ b/mayan/apps/task_manager/apps.py
@@ -5,7 +5,7 @@ from django.utils.translation import ugettext_lazy as _
from common import (
MayanAppConfig, menu_object, menu_secondary, menu_tools
)
-from common.widgets import two_state_template
+from common.widgets import TwoStateWidget
from navigation import SourceColumn
from .classes import CeleryQueue, Task
@@ -34,15 +34,15 @@ class TaskManagerApp(MayanAppConfig):
)
SourceColumn(
source=CeleryQueue, label=_('Default queue?'),
- func=lambda context: two_state_template(
- context['object'].is_default_queue
- )
+ func=lambda context: TwoStateWidget(
+ state=context['object'].is_default_queue
+ ).render()
)
SourceColumn(
source=CeleryQueue, label=_('Is transient?'),
- func=lambda context: two_state_template(
- context['object'].is_transient
- )
+ func=lambda context: TwoStateWidget(
+ state=context['object'].is_transient
+ ).render()
)
SourceColumn(
source=Task, label=_('Type'), attribute='task_type'
@@ -56,9 +56,9 @@ class TaskManagerApp(MayanAppConfig):
)
SourceColumn(
source=Task, label=_('Acknowledged'),
- func=lambda context: two_state_template(
- context['object'].kwargs['acknowledged']
- )
+ func=lambda context: TwoStateWidget(
+ state=context['object'].kwargs['acknowledged']
+ ).render()
)
SourceColumn(
source=Task, label=_('Arguments'),
diff --git a/mayan/apps/user_management/apps.py b/mayan/apps/user_management/apps.py
index 908491f7bc..5e1df8d9ae 100644
--- a/mayan/apps/user_management/apps.py
+++ b/mayan/apps/user_management/apps.py
@@ -9,7 +9,7 @@ from acls.links import link_acl_list
from acls.permissions import permission_acl_edit, permission_acl_view
from common import menu_multi_item, menu_object, menu_secondary, menu_setup
from common.apps import MayanAppConfig
-from common.widgets import two_state_template
+from common.widgets import TwoStateWidget
from metadata import MetadataLookup
from navigation import SourceColumn
from rest_api.fields import DynamicSerializerField
@@ -96,15 +96,15 @@ class UserManagementApp(MayanAppConfig):
)
SourceColumn(
source=User, label=_('Active'),
- func=lambda context: two_state_template(
- context['object'].is_active
- )
+ func=lambda context: TwoStateWidget(
+ state=context['object'].is_active
+ ).render()
)
SourceColumn(
source=User, label=_('Has usable password?'),
- func=lambda context: two_state_template(
- context['object'].has_usable_password()
- )
+ func=lambda context: TwoStateWidget(
+ state=context['object'].has_usable_password()
+ ).render()
)
menu_multi_item.bind_links(