- Separated widgets for ReferencedKeyword and NarrowerKeyword as they
have different behaviors regarding the display of back references. - Values for widgets are now rendered as dictionaries (vs. tuples), with url, label historical and scope notes. Makes it easier to display them in the views.
This commit is contained in:
parent
d33aed941e
commit
16c7685fe7
|
@ -43,18 +43,16 @@
|
|||
tal:define="rel_widget python:view.widgets.get('related')">
|
||||
<label tal:content="string:NT (Narrower Term)" />
|
||||
<br />
|
||||
<span id="" class=""
|
||||
<ul id="" class=""
|
||||
tal:attributes="id string:form-widgets-children;
|
||||
class string:contenttree-widget relatedthesauruskeywords-field;
|
||||
"><tal:block
|
||||
tal:repeat="value view/children"
|
||||
"><li tal:repeat="value view/children"
|
||||
><a class="selected-option"
|
||||
href="#"
|
||||
tal:content="python:value[1]"
|
||||
tal:attributes="href python:value[0]"
|
||||
/><tal:block condition="not:repeat/value/end">, </tal:block
|
||||
></tal:block
|
||||
></span>
|
||||
tal:content="value/label"
|
||||
tal:attributes="href value/url"
|
||||
/></li
|
||||
></ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -26,7 +26,12 @@ class DmsKeywordView(DefaultView):
|
|||
else:
|
||||
for ref in catalog.findRelations(
|
||||
{'to_id': doc_intid, 'from_attribute': 'broader'}):
|
||||
tp = (ref.from_path, ref.from_object.Title())
|
||||
tp = dict(
|
||||
url=ref.from_path,
|
||||
label=ref.from_object.Title(),
|
||||
hn=ref.from_object.historical_note,
|
||||
sn=ref.from_object.scope_note
|
||||
)
|
||||
if tp not in value:
|
||||
value.append(tp)
|
||||
return value
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
<include package=".browser" />
|
||||
|
||||
<adapter factory=".relatedkeywords.RelatedThesaurusKeywordsFieldWidget" />
|
||||
<adapter factory=".broaderkeywords.BroaderThesaurusKeywordsFieldWidget" />
|
||||
<adapter factory=".equivalences.ThesaurusKeywordEquivalencesFieldWidget" />
|
||||
|
||||
<genericsetup:registerProfile
|
||||
|
|
|
@ -19,6 +19,7 @@ from plone.supermodel import model
|
|||
|
||||
from . import _
|
||||
from .relatedkeywords import RelatedThesaurusKeywords
|
||||
from .broaderkeywords import BroaderThesaurusKeywords
|
||||
from .equivalences import ThesaurusKeywordEquivalences
|
||||
|
||||
#from plone.autoform import directives as form
|
||||
|
@ -27,14 +28,14 @@ from .equivalences import ThesaurusKeywordEquivalences
|
|||
class IDmsKeyword(model.Schema):
|
||||
""" """
|
||||
|
||||
# XXX: Ungly widget that needs to be replaced
|
||||
# EQ: equivalences
|
||||
equivs = ThesaurusKeywordEquivalences(
|
||||
title=u'EQ (Equivalences)',
|
||||
required=False,
|
||||
)
|
||||
|
||||
# BT: broader term
|
||||
broader = RelatedThesaurusKeywords(
|
||||
broader = BroaderThesaurusKeywords(
|
||||
title=_(u"BT (Broader Terms)"),
|
||||
required=False,
|
||||
)
|
||||
|
@ -43,6 +44,19 @@ class IDmsKeyword(model.Schema):
|
|||
related = RelatedThesaurusKeywords(
|
||||
title=_(u"RT (Related Terms)"),
|
||||
required=False,
|
||||
display_backrefs=True
|
||||
)
|
||||
|
||||
# HN: historical note
|
||||
historical_note = schema.Text(
|
||||
title=_(u"HN (Historical Note)"),
|
||||
required=False,
|
||||
)
|
||||
|
||||
# SN: scope note
|
||||
scope_note = schema.Text(
|
||||
title=_(u"SN (Scope Note)"),
|
||||
required=False,
|
||||
)
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0"?>
|
||||
<object name="portal_catalog" meta_type="Plone Catalog Tool">
|
||||
<column value="historical_note"/>
|
||||
<column value="scope_note"/>
|
||||
</object>
|
|
@ -3,6 +3,7 @@
|
|||
<version>0001</version>
|
||||
<dependencies>
|
||||
<dependency>profile-plone.app.dexterity:default</dependency>
|
||||
<dependency>profile-plone.app.intid:default</dependency>
|
||||
<dependency>profile-collective.dms.thesaurus:default</dependency>
|
||||
</dependencies>
|
||||
</metadata>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<span id="" class=""
|
||||
<ul id="" class=""
|
||||
tal:attributes="id view/id;
|
||||
class view/klass;
|
||||
style view/style;
|
||||
|
@ -13,12 +13,11 @@
|
|||
onmouseout view/onmouseout;
|
||||
onkeypress view/onkeypress;
|
||||
onkeydown view/onkeydown;
|
||||
onkeyup view/onkeyup"><tal:block
|
||||
tal:repeat="value view/tuples"
|
||||
onkeyup view/onkeyup
|
||||
"><li tal:repeat="value view/dictvalues"
|
||||
><a class="selected-option"
|
||||
href="#"
|
||||
tal:content="python:value[1]"
|
||||
tal:attributes="href python:value[0]"
|
||||
/><tal:block condition="not:repeat/value/end">, </tal:block
|
||||
></tal:block
|
||||
></span>
|
||||
tal:content="value/label"
|
||||
tal:attributes="href value/url"
|
||||
/></li
|
||||
></ul>
|
||||
|
|
|
@ -21,37 +21,60 @@ class IRelatedThesaurusKeywords(IRelationList):
|
|||
class RelatedThesaurusKeywordsWidget(MultiContentTreeWidget):
|
||||
display_template = ViewPageTemplateFile('related-thesaurus-keywords-display.pt')
|
||||
|
||||
def __init__(self, request):
|
||||
def __init__(self, request, from_attribute='related', display_backrefs=False):
|
||||
self.from_attribute = from_attribute
|
||||
self.display_backrefs = display_backrefs
|
||||
super(RelatedThesaurusKeywordsWidget, self).__init__(request)
|
||||
|
||||
def get_url(self, v):
|
||||
return v
|
||||
|
||||
def get_label(self, v):
|
||||
term = self.terms.getTermByToken(v)
|
||||
return term.title
|
||||
def get_term(self, v):
|
||||
return self.terms.getTermByToken(v)
|
||||
|
||||
def tuples(self):
|
||||
refs = [(self.get_url(x), self.get_label(x)) for x in self.value]
|
||||
intids = getUtility(IIntIds)
|
||||
catalog = getUtility(ICatalog)
|
||||
try:
|
||||
doc_intid = intids.getId(self.context)
|
||||
except KeyError:
|
||||
pass
|
||||
else:
|
||||
for ref in catalog.findRelations(
|
||||
{'to_id': doc_intid, 'from_attribute': 'related'}):
|
||||
tp = (ref.from_path, ref.from_object.Title())
|
||||
if tp not in refs:
|
||||
refs.append(tp)
|
||||
def get_label(self, v):
|
||||
return self.get_term(v).title
|
||||
|
||||
def get_hn(self, v):
|
||||
return self.get_term(v).value.historical_note
|
||||
|
||||
def get_sn(self, v):
|
||||
return self.get_term(v).value.scope_note
|
||||
|
||||
def dictvalues(self):
|
||||
refs = [dict(
|
||||
url=self.get_url(x),
|
||||
label=self.get_label(x),
|
||||
hn=self.get_hn(x),
|
||||
sn=self.get_sn(x),
|
||||
) for x in self.value]
|
||||
if self.display_backrefs:
|
||||
intids = getUtility(IIntIds)
|
||||
catalog = getUtility(ICatalog)
|
||||
try:
|
||||
doc_intid = intids.getId(self.context)
|
||||
except KeyError:
|
||||
pass
|
||||
else:
|
||||
for ref in catalog.findRelations(
|
||||
{'to_id': doc_intid,
|
||||
'from_attribute': self.from_attribute}):
|
||||
tp = dict(
|
||||
url=ref.from_path,
|
||||
label=ref.from_object.Title(),
|
||||
hn=ref.from_object.historical_note,
|
||||
sn=ref.from_object.scope_note
|
||||
)
|
||||
if tp not in refs:
|
||||
refs.append(tp)
|
||||
return refs
|
||||
|
||||
|
||||
@adapter(IRelatedThesaurusKeywords, IFormLayer)
|
||||
@implementer(IFieldWidget)
|
||||
def RelatedThesaurusKeywordsFieldWidget(field, request):
|
||||
return FieldWidget(field, RelatedThesaurusKeywordsWidget(request))
|
||||
return FieldWidget(field, RelatedThesaurusKeywordsWidget(
|
||||
request, display_backrefs=field.display_backrefs))
|
||||
|
||||
class ThesaurusPathSourceBinder(ObjPathSourceBinder):
|
||||
|
||||
|
@ -69,7 +92,8 @@ class ThesaurusPathSourceBinder(ObjPathSourceBinder):
|
|||
class RelatedThesaurusKeywords(RelationList):
|
||||
implements(IRelatedThesaurusKeywords)
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
def __init__(self, display_backrefs=False, **kwargs):
|
||||
self.display_backrefs = display_backrefs
|
||||
RelationList.__init__(self,
|
||||
value_type=RelationChoice(
|
||||
title=u'',
|
||||
|
|
Reference in New Issue