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:
@@ -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)
|
||||
===================
|
||||
|
||||
@@ -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
|
||||
--------
|
||||
|
||||
22
mayan/apps/common/html_widgets.py
Normal file
22
mayan/apps/common/html_widgets.py
Normal 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
|
||||
}
|
||||
)
|
||||
5
mayan/apps/common/templates/common/two_state_widget.html
Normal file
5
mayan/apps/common/templates/common/two_state_widget.html
Normal 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 %}
|
||||
@@ -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()
|
||||
)
|
||||
)
|
||||
|
||||
@@ -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'])
|
||||
|
||||
@@ -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?'),
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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'),
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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']
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user