--- 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!")), )