# HG changeset patch # User Thierry Florac # Date 1542300703 -3600 # Node ID 465b273c312bdeb416f08e19834923de32921d49 # Parent f95d237cbd68d7e1fa0e2500139a83e247ab2bb6 Added property to get milestone anchor target diff -r f95d237cbd68 -r 465b273c312b src/pyams_content/component/paragraph/interfaces/milestone.py --- a/src/pyams_content/component/paragraph/interfaces/milestone.py Thu Nov 15 14:03:07 2018 +0100 +++ b/src/pyams_content/component/paragraph/interfaces/milestone.py Thu Nov 15 17:51:43 2018 +0100 @@ -14,7 +14,7 @@ from zope.annotation.interfaces import IAttributeAnnotatable from zope.container.constraints import containers, contains -from zope.interface import Interface +from zope.interface import Attribute, Interface from zope.schema import Bool, Choice from pyams_content.component.paragraph import IBaseParagraph @@ -50,6 +50,8 @@ vocabulary='PyAMS content paragraphs', required=False) + target = Attribute("Anchor target") + class IMilestoneContainer(IOrderedContainer): """Milestones container interface""" diff -r f95d237cbd68 -r 465b273c312b src/pyams_content/component/paragraph/milestone.py --- a/src/pyams_content/component/paragraph/milestone.py Thu Nov 15 14:03:07 2018 +0100 +++ b/src/pyams_content/component/paragraph/milestone.py Thu Nov 15 17:51:43 2018 +0100 @@ -12,8 +12,6 @@ __docformat__ = 'restructuredtext' - -# import standard library from persistent import Persistent from pyramid.events import subscriber from zope.container.contained import Contained @@ -26,28 +24,27 @@ from zope.schema.fieldproperty import FieldProperty from zope.traversing.interfaces import ITraversable -# import interfaces from pyams_catalog.utils import index_object -from pyams_content import _ -from pyams_content.component.paragraph import BaseParagraph, BaseParagraphFactory, BaseParagraphContentChecker -# import packages -from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget, IParagraphContainer, \ +from pyams_content.component.paragraph import BaseParagraph, BaseParagraphContentChecker, BaseParagraphFactory +from pyams_content.component.paragraph.interfaces import IParagraphContainer, IParagraphContainerTarget, \ IParagraphFactory from pyams_content.component.paragraph.interfaces.milestone import IMilestone, IMilestoneContainer, \ - IMilestoneContainerTarget, MILESTONE_CONTAINER_KEY, IMilestoneParagraph, MILESTONE_PARAGRAPH_TYPE, \ - MILESTONE_PARAGRAPH_RENDERERS, MILESTONE_PARAGRAPH_NAME + IMilestoneContainerTarget, IMilestoneParagraph, MILESTONE_CONTAINER_KEY, MILESTONE_PARAGRAPH_NAME, \ + MILESTONE_PARAGRAPH_RENDERERS, MILESTONE_PARAGRAPH_TYPE from pyams_content.features.checker import BaseContentChecker -from pyams_content.features.checker.interfaces import IContentChecker, MISSING_VALUE, MISSING_LANG_VALUE, ERROR_VALUE +from pyams_content.features.checker.interfaces import ERROR_VALUE, IContentChecker, MISSING_LANG_VALUE, MISSING_VALUE from pyams_content.features.renderer import RenderersVocabulary from pyams_form.interfaces.form import IFormContextPermissionChecker from pyams_i18n.interfaces import II18n, II18nManager, INegotiator -from pyams_utils.adapter import adapter_config, ContextAdapter, get_annotation_adapter +from pyams_utils.adapter import ContextAdapter, adapter_config, get_annotation_adapter from pyams_utils.factory import factory_config from pyams_utils.registry import get_current_registry, get_utility, utility_config from pyams_utils.request import check_request from pyams_utils.traversing import get_parent from pyams_utils.vocabulary import vocabulary_config +from pyams_content import _ + # # Milestone class and adapters @@ -62,6 +59,12 @@ label = FieldProperty(IMilestone['label']) anchor = FieldProperty(IMilestone['anchor']) + @property + def target(self): + container = get_parent(self, IParagraphContainer) + if container is not None: + return container.get(self.anchor) + @adapter_config(context=IMilestone, provides=IFormContextPermissionChecker) class MilestonePermissionChecker(ContextAdapter): @@ -114,7 +117,7 @@ langs = manager.get_languages() else: negotiator = get_utility(INegotiator) - langs = (negotiator.server_language, ) + langs = (negotiator.server_language,) i18n = II18n(self.context) for lang in langs: for attr in ('title', 'label'): @@ -204,7 +207,7 @@ for milestone in IMilestoneContainer(self.context).values(): if not milestone.visible: continue - for name, checker in sorted(registry.getAdapters((milestone, ), IContentChecker), + for name, checker in sorted(registry.getAdapters((milestone,), IContentChecker), key=lambda x: x[1].weight): output.append('- {0} :'.format(II18n(milestone).query_attribute('title', request=request))) output.append(checker.get_check_output(request)) @@ -240,7 +243,7 @@ request = check_request() translate = request.localizer.translate return II18n(self.context).query_attribute('title', request) or \ - '({0})'.format(translate(self.context.icon_hint).lower()) + '({0})'.format(translate(self.context.icon_hint).lower()) def inner_check(self, request): output = [] @@ -250,7 +253,7 @@ langs = manager.get_languages() else: negotiator = get_utility(INegotiator) - langs = (negotiator.server_language, ) + langs = (negotiator.server_language,) i18n = II18n(self.context) for lang in langs: value = i18n.get_attribute('title', lang, request)