Issue #56, #97, Make multi item links a drop down list of actions, remove unused code

This commit is contained in:
Roberto Rosario
2014-10-27 16:26:13 -04:00
parent b166d559ed
commit a728690335
17 changed files with 33 additions and 80 deletions

View File

@@ -115,7 +115,6 @@ def acl_detail_for(request, actor, obj):
context = {
'object': obj.source_object,
'subtemplates_list': subtemplates_list,
'multi_select_as_buttons': True,
'multi_select_item_properties': {
'permission_pk': lambda x: x.pk,
'holder_gid': lambda x: actor.gid,
@@ -447,7 +446,6 @@ def acl_class_acl_detail(request, access_object_class_gid, holder_object_gid):
return render_to_response('main/generic_detail.html', {
'object': access_object_class,
'subtemplates_list': subtemplates_list,
'multi_select_as_buttons': True,
'multi_select_item_properties': {
'permission_pk': lambda x: x.pk,
'holder_gid': lambda x: actor.gid,

View File

@@ -12,6 +12,7 @@ from history.permissions import PERMISSION_HISTORY_VIEW
from main.api import register_diagnostic, register_maintenance_links
from navigation.api import (register_links, register_model_list_columns,
register_multi_item_links, register_top_menu)
from navigation.links import link_spacer
from project_setup.api import register_setup
from rest_api.classes import APIEndPoint
from statistics.classes import StatisticNamespace
@@ -76,7 +77,7 @@ register_links([DocumentTypeFilename, 'documents:document_type_filename_list', '
# Register document links
register_links(Document, [document_view_simple, document_edit, document_print, document_delete, document_download, document_clear_transformations, document_update_page_count])
register_multi_item_links(['folders:folder_view', 'index_instance_node_view', 'search', 'results', 'document_group_view', 'documents:document_list', 'documents:document_list_recent', 'tags:tag_tagged_item_list'], [document_multiple_clear_transformations, document_multiple_delete, document_multiple_download, document_multiple_update_page_count])
register_multi_item_links(['folders:folder_view', 'index_instance_node_view', 'search', 'results', 'document_group_view', 'documents:document_list', 'documents:document_list_recent', 'tags:tag_tagged_item_list'], [link_spacer, document_multiple_clear_transformations, document_multiple_delete, document_multiple_download, document_multiple_update_page_count])
# Document Version links
register_links(DocumentVersion, [document_version_revert, document_version_download])

View File

@@ -62,7 +62,6 @@ class DocumentListView(SingleObjectListView):
extra_context = {
'title': _(u'All documents'),
'multi_select_as_buttons': True,
'hide_links': True,
}
@@ -84,7 +83,6 @@ def document_list(request, object_list=None, title=None, extra_context=None):
context = {
'object_list': final_object_list,
'title': title if title else _(u'documents'),
'multi_select_as_buttons': True,
'hide_links': True,
}
if extra_context:

View File

@@ -26,7 +26,6 @@ def results(request, extra_context=None):
context = {
'query_string': request.GET,
'hide_links': True,
'multi_select_as_buttons': True,
'search_results_limit': LIMIT,
}

View File

@@ -8,6 +8,7 @@ from common.utils import encapsulate
from documents.models import Document
from navigation.api import (register_links, register_model_list_columns,
register_multi_item_links, register_top_menu)
from navigation.links import link_spacer
from rest_api.classes import APIEndPoint
from .links import (document_folder_list, folder_acl_list,
@@ -27,7 +28,7 @@ register_links(Folder, [folder_view, folder_edit, folder_acl_list, folder_delete
register_links([Folder, 'folders:folder_list', 'folders:folder_create'], [folder_list, folder_create], menu_name='secondary_menu')
register_links(['folders:document_folder_list', 'folders:folder_add_document'], [folder_add_document], menu_name="sidebar")
register_multi_item_links(['folders:folder_view', 'indexes:index_instance_node_view', 'documents:document_type_document_list', 'search:search', 'search:results', 'indexing:document_group_view', 'documents:document_list', 'documents:document_list_recent', 'tags:tag_tagged_item_list'], [folder_add_multiple_documents])
register_multi_item_links(['folders:folder_view', 'indexes:index_instance_node_view', 'documents:document_type_document_list', 'search:search', 'search:results', 'indexing:document_group_view', 'documents:document_list', 'documents:document_list_recent', 'tags:tag_tagged_item_list'], [link_spacer, folder_add_multiple_documents])
register_multi_item_links(['folders:folder_view'], [folder_document_multiple_remove])
register_top_menu(name='folders', link=folders_main_menu_link, children_views=['folders:folder_list', 'folders:folder_create', 'folders:folder_edit', 'folders:folder_delete', 'folders:folder_view', 'folders:folder_document_multiple_remove'])

View File

@@ -36,7 +36,6 @@ class FolderListView(SingleObjectListView):
def get_extra_context(self):
return {
'title': _(u'Folders'),
'multi_select_as_buttons': True,
'hide_link': True,
}
@@ -145,7 +144,6 @@ class FolderDetailView(DocumentListView):
return {
'title': _(u'Documents in folder: %s') % self.get_folder(),
'hide_links': True,
'multi_select_as_buttons': True,
'object': self.get_folder(),
'object_name': _(u'Folder'),
}
@@ -215,7 +213,6 @@ def document_folder_list(request, document_id):
context = {
'title': _(u'Folders containing: %s') % document,
'object': document,
'multi_select_as_buttons': True,
'hide_link': True,
}

View File

@@ -30,29 +30,17 @@
{% endif %}
<form action="{% url 'common:multi_object_action_view' %}" class="form multi_select" method="get">
{% get_multi_item_links_form %}
{% if multi_item_actions %}
{% with multi_item_form as form %}
{% include 'main/generic_form_instance.html' %}
{% endwith %}
{% if object_list %}
{% if multi_select or multi_select_as_buttons %}
{% if multi_select_as_buttons %}
{% get_multi_item_links as multi_item_links %}
<div class="group navform wat-cf" style="margin-bottom: 0px;">
{% for link in multi_item_links %}
<button class="button" type="submit" name="action" value="{{ link.url }}" style="margin-bottom: 8px;">
{% if link.famfam %}<span class="famfam active famfam-{{ link.famfam|default:'link' }}"></span>{% endif %}{{ link.text }}
</button>
{% endfor %}
</div>
{% else %}
{% with 'true' as form_hide_required_text %}
{% get_multi_item_links_form %}
{% endwith %}
<div class="group navform wat-cf">
<button class="button" type="submit" name="{{ form.prefix }}-submit">
<img src="{% static 'web_theme_media/images/icons/tick.png' %}" alt="{% if object %}{% trans 'Save' %}{% else %}{% trans 'Submit' %}{% endif %}" /> {% if object %}{% trans 'Save' %}{% else %}{% trans 'Submit' %}{% endif %}
</button>
</div>
{% endif %}
{% endif %}
<div class="group navform wat-cf">
<button class="button" type="submit" name="{{ form.prefix }}-submit">
<img src="{% static 'web_theme_media/images/icons/tick.png' %}" alt="{% if object %}{% trans 'Save' %}{% else %}{% trans 'Submit' %}{% endif %}" /> {% if object %}{% trans 'Save' %}{% else %}{% trans 'Submit' %}{% endif %}
</button>
</div>
{% endif %}
{% if scrollable_content %}
@@ -63,7 +51,7 @@
<tbody>
{% if not hide_header %}
<tr>
{% if multi_select or multi_select_as_buttons %}
{% if multi_item_actions %}
<th class="first"><input type="checkbox" class="checkbox toggle" /></th>
{% endif %}
@@ -90,7 +78,8 @@
{% endif %}
{% for object in object_list %}
<tr class="{% cycle 'odd' 'even2' %}">
{% if multi_select or multi_select_as_buttons %}
{% if multi_item_actions %}
<td>
{% if multi_select_item_properties %}
<input type="checkbox" class="checkbox" name="properties_{{ object|get_encoded_parameter:multi_select_item_properties }}" value="" />
@@ -150,30 +139,6 @@
{% if scrollable_content %}
</div>
{% endif %}
{% if object_list %}
{% if multi_select or multi_select_as_buttons %}
{% if multi_select_as_buttons %}
{% get_multi_item_links as multi_item_links %}
<div class="group navform wat-cf" style="margin-bottom: 0px;">
{% for link in multi_item_links %}
<button class="button" type="submit" name="action" value="{{ link.url }}" style="margin-bottom: 8px;">
{% if link.famfam %}<span class="famfam active famfam-{{ link.famfam|default:'link' }}"></span>{% endif %}{{ link.text }}
</button>
{% endfor %}
</div>
{% else %}
{% with 'true' as form_hide_required_text %}
{% get_multi_item_links_form %}
{% endwith %}
<div class="group navform wat-cf">
<button class="button" type="submit" name="{{ form.prefix }}-submit">
<img src="{% static 'web_theme_media/images/icons/tick.png' %}" alt="{% if object %}{% trans 'Save' %}{% else %}{% trans 'Submit' %}{% endif %}" /> {% if object %}{% trans "Save" %}{% else %}{% trans "Submit" %}{% endif %}
</button>
</div>
{% endif %}
{% endif %}
{% endif %}
</form>
{% paginate %}

View File

@@ -7,6 +7,7 @@ from common.utils import encapsulate
from documents.models import Document, DocumentType
from navigation.api import (register_links, register_model_list_columns,
register_multi_item_links)
from navigation.links import link_spacer
from project_setup.api import register_setup
from rest_api.classes import APIEndPoint
@@ -40,7 +41,7 @@ register_links(Document, [metadata_view], menu_name='form_header')
register_links(DocumentType, [setup_document_type_metadata])
register_links(MetadataType, [setup_metadata_type_edit, setup_metadata_type_delete])
register_links([MetadataType, 'metadata:setup_metadata_type_list', 'metadata:setup_metadata_type_create'], [setup_metadata_type_list, setup_metadata_type_create], menu_name='secondary_menu')
register_multi_item_links(['folders:folder_view', 'indexes:index_instance_node_view', 'documents:document_type_document_list', 'search:search', 'search:results', 'linking:document_group_view', 'documents:document_list', 'documents:document_list_recent', 'tags:tag_tagged_item_list'], [metadata_multiple_add, metadata_multiple_edit, metadata_multiple_remove])
register_multi_item_links(['folders:folder_view', 'indexes:index_instance_node_view', 'documents:document_type_document_list', 'search:search', 'search:results', 'linking:document_group_view', 'documents:document_list', 'documents:document_list_recent', 'tags:tag_tagged_item_list'], [link_spacer, metadata_multiple_add, metadata_multiple_edit, metadata_multiple_remove])
register_setup(setup_metadata_type_list)

View File

@@ -6,8 +6,8 @@ class MultiItemForm(forms.Form):
def __init__(self, *args, **kwargs):
actions = kwargs.pop('actions', [])
super(MultiItemForm, self).__init__(*args, **kwargs)
choices = [('', '------')]
choices = []
choices.extend([(action[0], action[1]) for action in actions])
self.fields['action'].choices = choices
action = forms.ChoiceField(label=_(u'Multi item action'))
action = forms.ChoiceField(label=_(u'Action'), required=False)

View File

@@ -0,0 +1 @@
link_spacer = {'text': ('------'), 'url': ''}

View File

@@ -267,16 +267,12 @@ def get_multi_item_links(parser, token):
return GetNavigationLinks(menu_name=menu_name, links_dict=multi_object_navigation, var_name=var_name)
@register.inclusion_tag('main/generic_form_instance.html', takes_context=True)
@register.simple_tag(takes_context=True)
def get_multi_item_links_form(context):
new_context = copy.copy(context)
new_context.update({
'form': MultiItemForm(actions=[(link['url'], link['text']) for link in _get_object_navigation_links(context, links_dict=multi_object_navigation)]),
'title': _(u'Selected item actions:'),
'form_action': reverse('common:multi_object_action_view'),
'submit_method': 'get',
})
return new_context
actions = [(link['url'], link['text']) for link in _get_object_navigation_links(context, links_dict=multi_object_navigation)]
form = MultiItemForm(actions=actions)
context.update({'multi_item_form': form, 'multi_item_actions': actions})
return ''
class GetSidebarTemplatesNone(Node):

View File

@@ -12,6 +12,7 @@ from documents.models import Document, DocumentVersion
from documents.signals import post_version_upload
from main.api import register_maintenance_links
from navigation.api import register_links, register_multi_item_links
from navigation.links import link_spacer
from project_tools.api import register_tool
from .links import (all_document_ocr_cleanup, ocr_tool_link,
@@ -25,7 +26,7 @@ from .tasks import task_do_ocr
logger = logging.getLogger(__name__)
register_links(Document, [submit_document])
register_multi_item_links(['folders:folder_view', 'indexing:index_instance_node_view', 'documents:document_type_document_list', 'search:search', 'search:results', 'linking:document_group_view', 'documents:document_list', 'document:document_list_recent', 'tags:tag_tagged_item_list'], [submit_document_multiple])
register_multi_item_links(['folders:folder_view', 'indexing:index_instance_node_view', 'documents:document_type_document_list', 'search:search', 'search:results', 'linking:document_group_view', 'documents:document_list', 'document:document_list_recent', 'tags:tag_tagged_item_list'], [link_spacer, submit_document_multiple])
register_multi_item_links(['ocr:queue_document_list'], [re_queue_multiple_document, queue_document_multiple_delete])
register_links(['ocr:queue_document_list'], [queue_document_list], menu_name='secondary_menu')

View File

@@ -41,7 +41,6 @@ def queue_document_list(request, queue_name='default'):
{'name': _('Node'), 'attribute': 'node_name'},
{'name': _('Result'), 'attribute': 'result'},
],
'multi_select_as_buttons': True,
}
return render_to_response('main/generic_list.html', context,

View File

@@ -97,7 +97,6 @@ def role_permissions(request, role_id):
'object': role,
'object_name': _(u'Role'),
'subtemplates_list': subtemplates_list,
'multi_select_as_buttons': True,
'multi_select_item_properties': {
'permission_id': lambda x: x.pk,
'requester_id': lambda x: role.pk,

View File

@@ -8,6 +8,7 @@ from documents import document_search
from documents.models import Document
from navigation.api import (register_links, register_model_list_columns,
register_multi_item_links, register_top_menu)
from navigation.links import link_spacer
from rest_api.classes import APIEndPoint
from .links import (multiple_documents_selection_tag_remove,
@@ -52,14 +53,14 @@ register_model_list_columns(Document, [
])
register_links(Tag, [tag_tagged_item_list, tag_edit, tag_acl_list, tag_delete])
register_multi_item_links(['tags:tag_list'], [tag_multiple_delete])
register_multi_item_links(['tags:tag_list'], [link_spacer, tag_multiple_delete])
register_links([Tag, 'tags:tag_list', 'tags:tag_create'], [tag_list, tag_create], menu_name='secondary_menu')
register_top_menu('tags', link={'text': _(u'Tags'), 'view': 'tags:tag_list', 'famfam': 'tag_blue'}, children_view_regex=[r'^tag_(list|create|delete|edit|tagged|acl)'])
register_links(Document, [tag_document_list], menu_name='form_header')
register_links(['tags:document_tags', 'tags:tag_remove', 'tag_multiple_remove', 'tag_attach'], [tag_attach], menu_name='sidebar')
register_multi_item_links(['document_tags'], [single_document_multiple_tag_remove])
register_multi_item_links(['tags:document_tags'], [link_spacer, single_document_multiple_tag_remove])
register_multi_item_links(['folders:folder_view', 'indexes:index_instance_node_view', 'documents:document_type_document_list', 'search:search', 'search:results', 'linking:document_group_view', 'documents:document_list', 'documents:document_list_recent', 'tags:tag_tagged_item_list'], [tag_multiple_attach, multiple_documents_selection_tag_remove])
register_multi_item_links(['folders:folder_view', 'indexes:index_instance_node_view', 'documents:document_type_document_list', 'search:search', 'search:results', 'linking:document_group_view', 'documents:document_list', 'documents:document_list_recent', 'tags:tag_tagged_item_list'], [link_spacer, tag_multiple_attach, multiple_documents_selection_tag_remove])
document_search.add_model_field('tags__label', label=_(u'Tags'))

View File

@@ -114,7 +114,6 @@ def tag_list(request, queryset=None, extra_context=None):
context = {
'title': _(u'Tags'),
'hide_link': True,
'multi_select_as_buttons': True,
'hide_object': True,
}
if extra_context:
@@ -225,7 +224,6 @@ class TagTaggedItemListView(DocumentListView):
return {
'title': _(u'Documents with the tag "%s"') % self.get_tag(),
'hide_links': True,
'multi_select_as_buttons': True,
'object': self.get_tag(),
'object_name': _(u'Tag'),
}

View File

@@ -47,7 +47,6 @@ def user_list(request):
'attribute': encapsulate(lambda x: two_state_template(x.has_usable_password())),
},
],
'multi_select_as_buttons': True,
}
return render_to_response('main/generic_list.html', context,
@@ -256,7 +255,6 @@ def group_list(request):
'attribute': 'user_set.count'
},
],
'multi_select_as_buttons': True,
}
return render_to_response('main/generic_list.html', context,