--- a/src/pyams_thesaurus/zmi/thesaurus.py Tue Aug 28 17:02:29 2018 +0200
+++ b/src/pyams_thesaurus/zmi/thesaurus.py Wed Aug 29 13:56:54 2018 +0200
@@ -37,7 +37,7 @@
from z3c.form.interfaces import IDataExtractedEvent, DISPLAY_MODE
# import packages
-from pyams_form.form import AJAXAddForm, AJAXEditForm
+from pyams_form.form import AJAXAddForm, ajax_config
from pyams_form.schema import CloseButton
from pyams_pagelet.pagelet import pagelet_config
from pyams_skin.layer import IPyAMSLayer
@@ -112,7 +112,10 @@
modal_target = True
-@pagelet_config(name='add-thesaurus.html', context=ISite, layer=IPyAMSLayer, permission=CREATE_THESAURUS_PERMISSION)
+@pagelet_config(name='add-thesaurus.html', context=ISite, layer=IPyAMSLayer,
+ permission=CREATE_THESAURUS_PERMISSION)
+@ajax_config(name='add-thesaurus.json', context=ISite, layer=IPyAMSLayer,
+ permission=CREATE_THESAURUS_PERMISSION, base=AJAXAddForm)
class ThesaurusAddForm(AdminDialogAddForm):
"""Thesaurus add form"""
@@ -122,7 +125,6 @@
fields = field.Fields(IThesaurusInfo).select('name', 'title', 'subject', 'description', 'language', 'creator',
'publisher', 'created')
- ajax_handler = 'add-thesaurus.json'
edit_permission = None
def updateWidgets(self, prefix=None):
@@ -140,6 +142,13 @@
def nextURL(self):
return absolute_url(self.context, self.request, 'thesaurus.html')
+ def get_ajax_output(self, changes):
+ return {
+ 'status': 'redirect',
+ 'location': absolute_url(self.context, self.request, 'admin#thesaurus.html'),
+ 'close_form': True
+ }
+
@subscriber(IDataExtractedEvent, form_selector=ThesaurusAddForm)
def handle_new_thesaurus_data_extraction(event):
@@ -153,19 +162,6 @@
event.form.widgets.errors += (Invalid(_("A thesaurus is already registered with this name!")), )
-@view_config(name='add-thesaurus.json', context=ISite, request_type=IPyAMSLayer,
- permission=CREATE_THESAURUS_PERMISSION, renderer='json', xhr=True)
-class ThesaurusAJAXAddForm(AJAXAddForm, ThesaurusAddForm):
- """Thesaurus add form, AJAX view"""
-
- def get_ajax_output(self, changes):
- return {
- 'status': 'redirect',
- 'location': absolute_url(self.context, self.request, 'admin#thesaurus.html'),
- 'close_form': True
- }
-
-
@adapter_config(context=(IThesaurus, IAdminLayer, Interface), provides=ITableElementEditor)
class ThesaurusTableElementEditor(DefaultElementEditorAdapter):
"""Thesaurus table element editor"""
@@ -210,6 +206,7 @@
@pagelet_config(name='properties.html', context=IThesaurus, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION)
+@ajax_config(name='properties.json', context=IThesaurus, layer=IPyAMSLayer)
@implementer(IWidgetForm, IInnerPage, IThesaurusView)
class ThesaurusPropertiesEditForm(AdminEditForm):
"""Thesaurus properties edit form"""
@@ -235,12 +232,6 @@
self.widgets['description'].widget_css_class = 'input textarea'
-@view_config(name='properties.json', context=IThesaurus, request_type=IPyAMSLayer,
- permission=ADMIN_THESAURUS_PERMISSION, renderer='json', xhr=True)
-class ThesaurusPropertiesAJAXEditForm(AJAXEditForm, ThesaurusPropertiesEditForm):
- """Thesaurus properties edit form, AJAX view"""
-
-
#
# Thesaurus terms views
#
@@ -274,8 +265,7 @@
@property
def tree(self):
- return sorted([INode(node) for node in ITree(self.context).get_root_nodes()],
- key=lambda x: x.label)
+ return [INode(node) for node in ITree(self.context).get_root_nodes()]
@property
def search_query_params(self):
@@ -326,7 +316,7 @@
result = []
self.get_nodes(term, result)
return {'term': label,
- 'nodes': sorted(result, key=lambda x: x['label'])}
+ 'nodes': result}
@view_config(name='get-parent-nodes.json', context=IThesaurus, request_type=IPyAMSLayer,
@@ -406,6 +396,8 @@
@pagelet_config(name='import.html', context=IThesaurus, layer=IPyAMSLayer,
permission=ADMIN_THESAURUS_PERMISSION)
+@ajax_config(name='import.json', context=IThesaurus, layer=IPyAMSLayer,
+ permission=ADMIN_THESAURUS_PERMISSION, base=AJAXAddForm)
class ThesaurusImportForm(AdminDialogAddForm):
"""Thesaurus import form"""
@@ -413,8 +405,8 @@
legend = _("Import thesaurus terms")
icon_css_class = 'fa fa-fw fa-upload'
- fields = field.Fields(IThesaurusUpdaterConfiguration).select('clear', 'conflict_suffix', 'data', 'format',
- 'import_synonyms', 'language', 'encoding')
+ fields = field.Fields(IThesaurusUpdaterConfiguration).select(
+ 'clear', 'conflict_suffix', 'data', 'format', 'import_synonyms', 'language', 'encoding')
buttons = button.Buttons(IThesaurusFormImportButtons)
ajax_handler = 'import.json'
@@ -445,18 +437,12 @@
return absolute_url(self.context, self.request, 'admin#terms.html')
-@view_config(name='import.json', context=IThesaurus, request_type=IPyAMSLayer,
- permission=ADMIN_THESAURUS_PERMISSION, renderer='json', xhr=True)
-class ThesaurusImportAJAXForm(AJAXAddForm, ThesaurusImportForm):
- """Thesaurus import form, AJAX view"""
-
-
#
# Terms export views
#
-@viewlet_config(name='export.menu', context=IThesaurus, layer=IAdminLayer, manager=IThesaurusTermsMenu,
- permission=VIEW_SYSTEM_PERMISSION, weight=15)
+@viewlet_config(name='export.menu', context=IThesaurus, layer=IAdminLayer,
+ manager=IThesaurusTermsMenu, permission=VIEW_SYSTEM_PERMISSION, weight=15)
class ThesaurusExportMenuItem(MenuItem):
"""Thesaurus export menu"""
@@ -474,7 +460,10 @@
add = button.Button(name='add', title=_("Export terms"))
-@pagelet_config(name='export.html', context=IThesaurus, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION)
+@pagelet_config(name='export.html', context=IThesaurus, layer=IPyAMSLayer,
+ permission=VIEW_SYSTEM_PERMISSION)
+@ajax_config(name='export.xml', context=IThesaurus, layer=IPyAMSLayer,
+ permission=VIEW_SYSTEM_PERMISSION, base=AJAXAddForm)
class ThesaurusExportForm(AdminDialogAddForm):
"""Thesaurus export form"""
@@ -485,7 +474,6 @@
fields = field.Fields(IThesaurusExporterConfiguration)
buttons = button.Buttons(IThesaurusFormExportButtons)
- ajax_handler = 'export.xml'
download_target = 'download_frame'
edit_permission = None
@@ -498,11 +486,6 @@
exporter = self.exporter = get_utility(IThesaurusExporter, name=configuration.format)
return exporter.export(self.context, configuration)
-
-@view_config(name='export.xml', context=IThesaurus, request_type=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION)
-class ThesaurusExportAJAXForm(AJAXAddForm, ThesaurusExportForm):
- """Thesaurus export form, AJAX view"""
-
def get_ajax_output(self, changes):
changes.seek(0)
headers = {'Content-Disposition': 'attachment; filename="{0}"'.format(self.configuration.filename)}