diff -r 04f176e237cc -r dfe19304d980 src/pyams_thesaurus/zmi/term.py --- 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!")), )