src/pyams_thesaurus/zmi/term.py
changeset 87 dfe19304d980
parent 74 9f4143b02965
child 125 53d8795a704d
--- a/src/pyams_thesaurus/zmi/term.py	Tue Aug 28 17:02:29 2018 +0200
+++ b/src/pyams_thesaurus/zmi/term.py	Wed Aug 29 13:56:54 2018 +0200
@@ -26,7 +26,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_pagelet.pagelet import pagelet_config
 from pyams_skin.viewlet.toolbar import ToolbarAction
 from pyams_thesaurus.term import ThesaurusTerm
@@ -36,7 +36,6 @@
 from pyams_viewlet.viewlet import viewlet_config
 from pyams_zmi.form import AdminDialogAddForm, AdminDialogEditForm
 from pyramid.events import subscriber
-from pyramid.view import view_config
 from z3c.form import field
 from zope.interface import Invalid
 
@@ -53,7 +52,10 @@
     modal_target = True
 
 
-@pagelet_config(name='add-term.html', context=IThesaurus, layer=IPyAMSLayer, permission=MANAGE_THESAURUS_CONTENT_PERMISSION)
+@pagelet_config(name='add-term.html', context=IThesaurus, layer=IPyAMSLayer,
+                permission=MANAGE_THESAURUS_CONTENT_PERMISSION)
+@ajax_config(name='add-term.json', context=IThesaurus, layer=IPyAMSLayer,
+             permission=MANAGE_THESAURUS_CONTENT_PERMISSION, base=AJAXAddForm)
 class ThesaurusTermAddForm(AdminDialogAddForm):
     """Thesaurus term add form"""
 
@@ -64,8 +66,8 @@
     legend = _("Add new term")
     icon_css_class = 'fa fa-fw fa-tag'
 
-    fields = field.Fields(IThesaurusTerm).select('label', 'alt', 'definition', 'note', 'generic', 'associations',
-                                                 'usage', 'extensions', 'status', 'created')
+    fields = field.Fields(IThesaurusTerm).select('label', 'alt', 'definition', 'note', 'generic', 'order',
+                                                 'associations', 'usage', 'extensions', 'status', 'created')
 
     ajax_handler = 'add-term.json'
     edit_permission = None
@@ -100,23 +102,9 @@
     def nextURL(self):
         return absolute_url(self.context, self.request, 'terms.html')
 
-
-@subscriber(IDataExtractedEvent, form_selector=ThesaurusTermAddForm)
-def handle_new_term_data_extraction(event):
-    """Handle new term data extraction"""
-    data = event.data
-    if data.get('label') in event.form.context.terms:
-        event.form.widgets.errors += (Invalid(_("Specified label is already used!")), )
-
-
-@view_config(name='add-term.json', context=IThesaurus, request_type=IPyAMSLayer,
-             permission=MANAGE_THESAURUS_CONTENT_PERMISSION, renderer='json', xhr=True)
-class ThesaurusTermAJAXAddForm(AJAXAddForm, ThesaurusTermAddForm):
-    """Thesaurus term add form, AJAX view"""
-
     def get_ajax_output(self, changes):
         if changes.generic is None:
-            return super(ThesaurusTermAJAXAddForm, self).get_ajax_output(changes)
+            return super(self.__class__, self).get_ajax_output(changes)
         else:
             label = changes.label.replace("'", "'")
             return {
@@ -128,7 +116,16 @@
             }
 
 
+@subscriber(IDataExtractedEvent, form_selector=ThesaurusTermAddForm)
+def handle_new_term_data_extraction(event):
+    """Handle new term data extraction"""
+    data = event.data
+    if data.get('label') in event.form.context.terms:
+        event.form.widgets.errors += (Invalid(_("Specified label is already used!")), )
+
+
 @pagelet_config(name='properties.html', context=IThesaurusTerm, layer=IPyAMSLayer, permission=VIEW_PERMISSION)
+@ajax_config(name='properties.json', context=IThesaurusTerm, layer=IPyAMSLayer)
 class ThesaurusTermEditForm(AdminDialogEditForm):
     """Thesaurus term edit form"""
 
@@ -141,11 +138,10 @@
     legend = _("Edit term properties")
     icon_css_class = 'fa fa-fw fa-tag'
 
-    fields = field.Fields(IThesaurusTerm).select('label', 'alt', 'definition', 'note', 'generic', 'specifics',
+    fields = field.Fields(IThesaurusTerm).select('label', 'alt', 'definition', 'note', 'generic', 'order', 'specifics',
                                                  'associations', 'usage', 'used_for', 'extracts', 'extensions',
                                                  'status', 'level', 'created', 'modified')
 
-    ajax_handler = 'properties.json'
     edit_permission = MANAGE_THESAURUS_CONTENT_PERMISSION
 
     generic_changed = False
@@ -233,34 +229,18 @@
                     term.usage.used_for += [term, ]
         return changes
 
-
-@subscriber(IDataExtractedEvent, form_selector=ThesaurusTermEditForm)
-def handle_term_properties_data_extraction(event):
-    """Handle term properties data extraction"""
-    context = event.form.context
-    thesaurus = get_parent(context, IThesaurus)
-    label = event.data.get('label')
-    if (label != context.label) and (label in thesaurus.terms):
-        event.form.widgets.errors += (Invalid(_("Specified new label is already used!")), )
-
-
-@pagelet_config(name='properties.json', context=IThesaurusTerm, request_type=IPyAMSLayer,
-                permission=MANAGE_THESAURUS_CONTENT_PERMISSION, renderer='json', xhr=True)
-class ThesaurusTermAJAXEditForm(AJAXEditForm, ThesaurusTermEditForm):
-    """Thesaurus term edit form, AJAX view"""
-
     def get_ajax_output(self, changes):
-        if self.generic_changed:
+        term_changes = changes.get(IThesaurusTerm, ())
+        if self.generic_changed or ('order' in term_changes):
             label = self.context.label.replace("'", "'")
             return {
                 'status': 'reload',
-                'callback': 'PyAMS_thesaurus.tree.findTerm',
-                'options': {
+                'post_reload': 'PyAMS_thesaurus.tree.findTerm',
+                'post_reload_options': {
                     'term': label
                 }
             }
         else:
-            term_changes = changes.get(IThesaurusTerm, ())
             if ('status' in term_changes) or ('label' in term_changes) or ('extensions' in term_changes):
                 label = (self.context.generic or self.context).label.replace("'", "'")
                 return {
@@ -271,4 +251,14 @@
                     }
                 }
             else:
-                return super(ThesaurusTermAJAXEditForm, self).get_ajax_output(changes)
+                return super(self.__class__, self).get_ajax_output(changes)
+
+
+@subscriber(IDataExtractedEvent, form_selector=ThesaurusTermEditForm)
+def handle_term_properties_data_extraction(event):
+    """Handle term properties data extraction"""
+    context = event.form.context
+    thesaurus = get_parent(context, IThesaurus)
+    label = event.data.get('label')
+    if (label != context.label) and (label in thesaurus.terms):
+        event.form.widgets.errors += (Invalid(_("Specified new label is already used!")), )