Update TwoStateWidget to use a template

Make it compatible with the SourceColumn class.

Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
This commit is contained in:
Roberto Rosario
2019-04-24 00:46:33 -04:00
parent 6ad306b3cf
commit a97c2ec662
16 changed files with 91 additions and 123 deletions

View File

@@ -128,6 +128,8 @@
* Backport source column identifiable and sortable
improvements.
* Update the way the no-result template is shown.
* Improve TwoStateWidget to use a template. Make
it compatible with the SourceColumn.
3.1.11 (2019-04-XX)
===================

View File

@@ -160,7 +160,8 @@ Other changes
* Backport source column identifiable and sortable
improvements.
* Update the way the no-result template is shown.
* Improve TwoStateWidget to use a template. Make
it compatible with the SourceColumn.
Removals
--------

View File

@@ -0,0 +1,22 @@
from __future__ import unicode_literals
from django.template.loader import render_to_string
from .icons import icon_fail as default_icon_fail
from .icons import icon_ok as default_icon_ok
class TwoStateWidget(object):
template_name = 'common/two_state_widget.html'
def __init__(self, center=False, icon_ok=None, icon_fail=None):
self.icon_ok = icon_ok or default_icon_ok
self.icon_fail = icon_fail or default_icon_fail
def render(self, name=None, value=None):
return render_to_string(
template_name=self.template_name, context={
'icon_ok': self.icon_ok, 'icon_fail': self.icon_fail,
'value': value
}
)

View File

@@ -0,0 +1,5 @@
{% if value %}
<div class="text-success">{{ icon_ok.render }}</div>
{% else %}
<div class="text-danger">{{ icon_fail.render }}</div>
{% endif %}

View File

@@ -5,8 +5,6 @@ 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,29 +74,3 @@ class TextAreaDiv(forms.widgets.Widget):
if attrs:
default_attrs.update(attrs)
super(TextAreaDiv, self).__init__(default_attrs)
class TwoStateWidget(object):
def __init__(self, state, center=False, 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
self.center = center
def render(self):
center_class = ''
if self.center:
center_class = 'text-center'
if self.state:
return mark_safe(
'<div class="{} text-success">{}</div>'.format(
center_class, self.icon_ok.render()
)
)
else:
return mark_safe(
'<div class="{} text-danger">{}</div>'.format(
center_class, self.icon_fail.render()
)
)

View File

@@ -10,11 +10,11 @@ from mayan.apps.acls.classes import ModelPermission
from mayan.apps.acls.links import link_acl_list
from mayan.apps.acls.permissions import permission_acl_edit, permission_acl_view
from mayan.apps.common.apps import MayanAppConfig
from mayan.apps.common.html_widgets import TwoStateWidget
from mayan.apps.common.menus import (
menu_facet, menu_list_facet, menu_main, menu_object, menu_secondary,
menu_setup, menu_tools
)
from mayan.apps.common.widgets import TwoStateWidget
from mayan.apps.documents.signals import post_document_created, post_initial_document_type
from mayan.apps.navigation import SourceColumn
from mayan.celery import app
@@ -86,10 +86,8 @@ class DocumentIndexingApp(MayanAppConfig):
SourceColumn(source=Index, label=_('Label'), attribute='label')
SourceColumn(source=Index, label=_('Slug'), attribute='slug')
SourceColumn(
source=Index, label=_('Enabled'),
func=lambda context: TwoStateWidget(
state=context['object'].enabled
).render()
attribute='enabled', label=_('Enabled'), source=Index,
widget=TwoStateWidget
)
SourceColumn(
@@ -112,18 +110,13 @@ class DocumentIndexingApp(MayanAppConfig):
func=lambda context: node_level(context['object'])
)
SourceColumn(
source=IndexTemplateNode, label=_('Enabled'),
func=lambda context: TwoStateWidget(
state=context['object'].enabled
).render()
attribute='enabled', label=_('Enabled'), source=IndexTemplateNode,
widget=TwoStateWidget
)
SourceColumn(
source=IndexTemplateNode, label=_('Has document links?'),
func=lambda context: TwoStateWidget(
state=context['object'].link_documents
).render()
attribute='enabled', label=_('Has document links?'),
source=IndexTemplateNode, widget=TwoStateWidget
)
SourceColumn(
source=IndexInstanceNode, label=_('Level'),
func=lambda context: index_instance_item_link(context['object'])

View File

@@ -11,12 +11,12 @@ from mayan.apps.acls.links import link_acl_list
from mayan.apps.common.apps import MayanAppConfig
from mayan.apps.common.classes import ModelAttribute
from mayan.apps.common.links import link_object_error_list
from mayan.apps.common.html_widgets import TwoStateWidget
from mayan.apps.common.menus import (
menu_facet, menu_list_facet, menu_main, menu_object, menu_secondary,
menu_setup, menu_tools
)
from mayan.apps.common.permissions_runtime import permission_error_log_view
from mayan.apps.common.widgets import TwoStateWidget
from mayan.apps.navigation import SourceColumn
from mayan.celery import app
@@ -200,10 +200,8 @@ class DocumentStatesApp(MayanAppConfig):
)
SourceColumn(
source=WorkflowState, label=_('Is initial state?'),
func=lambda context: TwoStateWidget(
state=context['object'].initial
).render()
attribute='initial', label=_('Is initial state?'),
source=WorkflowState, widget=TwoStateWidget
)
SourceColumn(
source=WorkflowState, label=_('Completion'), attribute='completion'
@@ -213,10 +211,8 @@ class DocumentStatesApp(MayanAppConfig):
source=WorkflowStateAction, label=_('Label'), attribute='label'
)
SourceColumn(
source=WorkflowStateAction, label=_('Enabled?'),
func=lambda context: TwoStateWidget(
state=context['object'].enabled
).render()
attribute='enabled', label=_('Enabled?'),
source=WorkflowStateAction, widget=TwoStateWidget
)
SourceColumn(
source=WorkflowStateAction, label=_('When?'),

View File

@@ -12,12 +12,12 @@ from mayan.apps.acls.links import link_acl_list
from mayan.apps.acls.permissions import permission_acl_edit, permission_acl_view
from mayan.apps.common.apps import MayanAppConfig
from mayan.apps.common.classes import MissingItem, ModelField, Template
from mayan.apps.common.html_widgets import TwoStateWidget
from mayan.apps.common.menus import (
menu_facet, menu_list_facet, menu_main, menu_object, menu_secondary,
menu_setup, menu_multi_item, menu_tools
)
from mayan.apps.common.signals import post_initial_setup
from mayan.apps.common.widgets import TwoStateWidget
from mayan.apps.dashboards.dashboards import dashboard_main
from mayan.apps.converter.links import link_transformation_list
from mayan.apps.converter.permissions import (
@@ -285,10 +285,8 @@ class DocumentsApp(MayanAppConfig):
)
SourceColumn(
source=DocumentTypeFilename, label=_('Enabled'),
func=lambda context: TwoStateWidget(
state=context['object'].enabled
).render()
attribute='enabled', label=_('Enabled'),
source=DocumentTypeFilename, widget=TwoStateWidget
)
# DeletedDocument

View File

@@ -4,10 +4,10 @@ from django.apps import apps
from django.utils.translation import ugettext_lazy as _
from mayan.apps.common.apps import MayanAppConfig
from mayan.apps.common.html_widgets import TwoStateWidget
from mayan.apps.common.menus import (
menu_main, menu_object, menu_secondary, menu_tools, menu_user
)
from mayan.apps.common.widgets import TwoStateWidget
from mayan.apps.navigation import SourceColumn
from .html_widgets import (
@@ -79,10 +79,8 @@ class EventsApp(MayanAppConfig):
)
SourceColumn(
source=Notification, label=_('Seen'),
func=lambda context: TwoStateWidget(
state=context['object'].read
).render()
attribute='read', label=_('Seen'), source=Notification,
widget=TwoStateWidget
)
menu_main.bind_links(

View File

@@ -7,10 +7,10 @@ from mayan.apps.acls.classes import ModelPermission
from mayan.apps.acls.links import link_acl_list
from mayan.apps.acls.permissions import permission_acl_edit, permission_acl_view
from mayan.apps.common.apps import MayanAppConfig
from mayan.apps.common.html_widgets import TwoStateWidget
from mayan.apps.common.menus import (
menu_facet, menu_list_facet, menu_object, menu_secondary, menu_setup
)
from mayan.apps.common.widgets import TwoStateWidget
from mayan.apps.navigation import SourceColumn
from .links import (
@@ -66,17 +66,13 @@ class LinkingApp(MayanAppConfig):
attribute='dynamic_label'
)
SourceColumn(
source=SmartLink, label=_('Enabled'),
func=lambda context: TwoStateWidget(
state=context['object'].enabled
).render()
attribute='enabled', label=_('Enabled'), source=SmartLink,
widget=TwoStateWidget
)
SourceColumn(
source=SmartLinkCondition, label=_('Enabled'),
func=lambda context: TwoStateWidget(
state=context['object'].enabled
).render()
attribute='enabled', label=_('Enabled'), source=SmartLinkCondition,
widget=TwoStateWidget
)
menu_facet.bind_links(

View File

@@ -9,11 +9,11 @@ from mayan.apps.acls.classes import ModelPermission
from mayan.apps.acls.links import link_acl_list
from mayan.apps.acls.permissions import permission_acl_edit, permission_acl_view
from mayan.apps.common.apps import MayanAppConfig
from mayan.apps.common.html_widgets import TwoStateWidget
from mayan.apps.common.menus import (
menu_list_facet, menu_multi_item, menu_object, menu_secondary, menu_setup,
menu_tools
)
from mayan.apps.common.widgets import TwoStateWidget
from mayan.apps.events import ModelEventType
from mayan.apps.events.links import (
link_events_for_object, link_object_event_types_user_subcriptions_list
@@ -72,16 +72,12 @@ class MailerApp(MayanAppConfig):
source=UserMailer, label=_('Label'), attribute='label'
)
SourceColumn(
source=UserMailer, label=_('Default?'),
func=lambda context: TwoStateWidget(
state=context['object'].default
).render()
attribute='default', label=_('Default?'), source=UserMailer,
widget=TwoStateWidget
)
SourceColumn(
source=UserMailer, label=_('Enabled?'),
func=lambda context: TwoStateWidget(
state=context['object'].enabled
).render()
attribute='enabled', label=_('Enabled?'), source=UserMailer,
widget=TwoStateWidget
)
SourceColumn(
source=UserMailer, label=_('Label'), attribute='backend_label'

View File

@@ -13,11 +13,11 @@ from mayan.apps.acls.links import link_acl_list
from mayan.apps.acls.permissions import permission_acl_edit, permission_acl_view
from mayan.apps.common.apps import MayanAppConfig
from mayan.apps.common.classes import ModelAttribute, ModelField
from mayan.apps.common.html_widgets import TwoStateWidget
from mayan.apps.common.menus import (
menu_facet, menu_list_facet, menu_multi_item, menu_object, menu_secondary,
menu_setup
)
from mayan.apps.common.widgets import TwoStateWidget
from mayan.apps.documents.search import document_page_search, document_search
from mayan.apps.documents.signals import post_document_type_change
from mayan.apps.events import ModelEventType
@@ -166,10 +166,8 @@ class MetadataApp(MayanAppConfig):
attribute='value'
)
SourceColumn(
source=DocumentMetadata, label=_('Required'),
func=lambda context: TwoStateWidget(
state=context['object'].is_required
).render()
attribute='is_required', label=_('Required'),
source=DocumentMetadata, widget=TwoStateWidget
)
app.conf.CELERY_QUEUES.append(

View File

@@ -6,6 +6,7 @@ from kombu import Exchange, Queue
from mayan.apps.common.apps import MayanAppConfig
from mayan.apps.common.classes import MissingItem
from mayan.apps.common.html_widgets import TwoStateWidget
from mayan.apps.common.menus import (
menu_list_facet, menu_object, menu_secondary, menu_setup
)
@@ -65,6 +66,23 @@ class SourcesApp(MayanAppConfig):
view='sources:setup_source_list'
)
SourceColumn(
attribute='label', is_identifier=True,
source=Source
)
SourceColumn(
attribute='class_fullname', label=_('Type'), source=Source
)
SourceColumn(
attribute='enabled', source=Source,
widget=TwoStateWidget
)
SourceColumn(
attribute='enabled', is_sortable=True, source=Source,
widget=TwoStateWidget
)
SourceColumn(
source=StagingFile,
label=_('Created'),

View File

@@ -16,12 +16,10 @@ from mayan.apps.acls.models import AccessControlList
from mayan.apps.checkouts.models import NewVersionBlock
from mayan.apps.common.menus import menu_facet
from mayan.apps.common.models import SharedUploadedFile
from mayan.apps.common.utils import encapsulate
from mayan.apps.common.views import (
ConfirmView, MultiFormView, SingleObjectCreateView,
SingleObjectDeleteView, SingleObjectEditView, SingleObjectListView
)
from mayan.apps.common.widgets import TwoStateWidget
from mayan.apps.documents.models import DocumentType, Document
from mayan.apps.documents.permissions import (
permission_document_create, permission_document_new_version
@@ -605,19 +603,8 @@ class SetupSourceListView(SingleObjectListView):
def get_extra_context(self):
return {
'extra_columns': (
{
'name': _('Type'),
'attribute': encapsulate(lambda entry: entry.class_fullname())
},
{
'name': _('Enabled'),
'attribute': encapsulate(
lambda entry: TwoStateWidget(state=entry.enabled).render()
)
},
),
'hide_link': True,
'hide_object': True,
'no_results_icon': icon_setup_sources,
'no_results_secondary_links': [
link_setup_source_create_webform.resolve(

View File

@@ -3,8 +3,8 @@ from __future__ import unicode_literals
from django.utils.translation import ugettext_lazy as _
from mayan.apps.common.apps import MayanAppConfig
from mayan.apps.common.html_widgets import TwoStateWidget
from mayan.apps.common.menus import menu_object, menu_secondary, menu_tools
from mayan.apps.common.widgets import TwoStateWidget
from mayan.apps.navigation import SourceColumn
from .classes import CeleryQueue, Task
@@ -32,16 +32,12 @@ class TaskManagerApp(MayanAppConfig):
source=CeleryQueue, label=_('Name'), attribute='name'
)
SourceColumn(
source=CeleryQueue, label=_('Default queue?'),
func=lambda context: TwoStateWidget(
state=context['object'].is_default_queue
).render()
attribute='is_default_queue', label=_('Default queue?'),
source=CeleryQueue, widget=TwoStateWidget
)
SourceColumn(
source=CeleryQueue, label=_('Is transient?'),
func=lambda context: TwoStateWidget(
state=context['object'].is_transient
).render()
attribute='is_transient', label=_('Is transient?'),
source=CeleryQueue, widget=TwoStateWidget
)
SourceColumn(
source=Task, label=_('Type'), attribute='task_type'
@@ -53,12 +49,6 @@ class TaskManagerApp(MayanAppConfig):
source=Task, label=_('Host'),
func=lambda context: context['object'].kwargs['hostname']
)
SourceColumn(
source=Task, label=_('Acknowledged'),
func=lambda context: TwoStateWidget(
state=context['object'].kwargs['acknowledged']
).render()
)
SourceColumn(
source=Task, label=_('Arguments'),
func=lambda context: context['object'].kwargs['args']

View File

@@ -9,11 +9,11 @@ from mayan.apps.acls.classes import ModelPermission
from mayan.apps.acls.links import link_acl_list
from mayan.apps.acls.permissions import permission_acl_edit, permission_acl_view
from mayan.apps.common.apps import MayanAppConfig
from mayan.apps.common.html_widgets import TwoStateWidget
from mayan.apps.common.menus import (
menu_list_facet, menu_multi_item, menu_object, menu_secondary, menu_setup,
menu_user
)
from mayan.apps.common.widgets import TwoStateWidget
from mayan.apps.events.classes import ModelEventType
from mayan.apps.events.links import (
link_events_for_object, link_object_event_types_user_subcriptions_list
@@ -131,16 +131,12 @@ class UserManagementApp(MayanAppConfig):
source=User, label=_('Email'), attribute='email'
)
SourceColumn(
source=User, label=_('Active'),
func=lambda context: TwoStateWidget(
state=context['object'].is_active
).render()
attribute='is_active', label=_('Active'), source=User,
widget=TwoStateWidget
)
SourceColumn(
source=User, label=_('Has usable password?'),
func=lambda context: TwoStateWidget(
state=context['object'].has_usable_password()
).render()
attribute='has_usable_password', label=_('Has usable password?'),
source=User, widget=TwoStateWidget
)
# Silence UnorderedObjectListWarning