src/pyams_thesaurus/zmi/thesaurus.py
changeset 87 dfe19304d980
parent 84 a3ca2f2dd419
child 90 f80eec0f148e
--- 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)}