- 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:
David Convent 2013-01-28 13:41:19 +01:00
parent d33aed941e
commit 16c7685fe7
8 changed files with 86 additions and 39 deletions

View File

@ -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>

View File

@ -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

View File

@ -19,6 +19,7 @@
<include package=".browser" />
<adapter factory=".relatedkeywords.RelatedThesaurusKeywordsFieldWidget" />
<adapter factory=".broaderkeywords.BroaderThesaurusKeywordsFieldWidget" />
<adapter factory=".equivalences.ThesaurusKeywordEquivalencesFieldWidget" />
<genericsetup:registerProfile

View File

@ -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,
)

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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'',