diff --git a/README.txt b/README.txt index c4d8838..b8629f7 100755 --- a/README.txt +++ b/README.txt @@ -618,8 +618,11 @@ End-user Forms The browser.form and related modules provide additional support for forms that are shown in the end-user interface. +Creating an object +------------------ + >>> from loops.browser.form import CreateObjectForm, CreateObject, ResourceNameChooser - >>> form = CreateObjectForm(m112, TestRequest) + >>> form = CreateObjectForm(m112, TestRequest()) >>> from loops.interfaces import INote, ITypeConcept >>> from loops.type import TypeConcept @@ -631,8 +634,8 @@ that are shown in the end-user interface. >>> ITypeConcept(note_tc).typeInterface = INote >>> component.provideAdapter(ResourceNameChooser) - >>> request = TestRequest(form={'form.title': 'Test Note', - ... 'form.type': '.loops/concepts/note'}) + >>> request = TestRequest(form={'form.title': u'Test Note', + ... 'form.type': u'.loops/concepts/note'}) >>> view = NodeView(m112, request) >>> cont = CreateObject(view, request) >>> cont.update() @@ -640,15 +643,15 @@ that are shown in the end-user interface. >>> sorted(resources.keys()) [...u'test_note'...] >>> resources['test_note'].title - 'Test Note' + u'Test Note' If there is a concept selected in the combo box we assign this to the newly created object: >>> from loops import util >>> topicUid = util.getUidForObject(topic) - >>> request = TestRequest(form={'form.title': 'Test Note', - ... 'form.type': '.loops/concepts/note', + >>> request = TestRequest(form={'form.title': u'Test Note', + ... 'form.type': u'.loops/concepts/note', ... 'form.concept.search.text_selected': str(topicUid)}) >>> view = NodeView(m112, request) >>> cont = CreateObject(view, request) @@ -660,6 +663,21 @@ created object: >>> sorted(t.__name__ for t in note.getConcepts()) [u'note', u'topic'] +Editing an object +----------------- + + >>> from loops.browser.form import EditObjectForm, EditObject + >>> m112.target = resources['test_note'] + >>> form = EditObjectForm(m112, TestRequest()) + + >>> request = TestRequest(form={'form.title': u'Test Note - changed'}) + >>> view = NodeView(m112, request) + >>> cont = EditObject(view, request) + >>> cont.update() + True + >>> resources['test_note'].title + u'Test Note - changed' + Import/Export ============= diff --git a/browser/form.py b/browser/form.py index 4e03714..d60f077 100644 --- a/browser/form.py +++ b/browser/form.py @@ -37,8 +37,9 @@ from zope.publisher.interfaces import BadRequest from cybertools.ajax import innerHtml from cybertools.browser.form import FormController from cybertools.typology.interfaces import IType -from loops.interfaces import IResourceManager, INote +from loops.interfaces import IResourceManager, INote, IDocument from loops.browser.node import NodeView +from loops.browser.concept import ConceptRelationView from loops.resource import Resource from loops.type import ITypeConcept from loops import util @@ -54,6 +55,7 @@ class ObjectForm(NodeView): def setUp(self): self.setUpWidgets() + # TODO: such stuff should depend on self.typeInterface self.widgets['data'].height = 3 def __call__(self): @@ -67,6 +69,7 @@ class CreateObjectForm(ObjectForm, Form): title = _(u'Create Resource, Type = ') form_action = 'create_resource' + dialog_name = 'create' @property def form_fields(self): @@ -76,9 +79,16 @@ class CreateObjectForm(ObjectForm, Form): ifc = ITypeConcept(t).typeInterface else: ifc = INote + self.typeInterface = ifc return FormFields(ifc) +class InnerForm(CreateObjectForm): + + @property + def macro(self): return self.template.macros['fields'] + + class EditObjectForm(ObjectForm, EditForm): @property @@ -86,26 +96,26 @@ class EditObjectForm(ObjectForm, EditForm): title = _(u'Edit Resource') form_action = 'edit_resource' + dialog_name = 'edit' @Lazy def typeInterface(self): - return IType(self.context).typeInterface + return IType(self.context).typeInterface or IDocument @property def form_fields(self): return FormFields(self.typeInterface) + @property + def assignments(self): + for c in self.context.getConceptRelations(): + yield ConceptRelationView(c, self.request) + def __init__(self, context, request): super(EditObjectForm, self).__init__(context, request) self.context = self.virtualTargetObject -class InnerForm(ObjectForm): - - @property - def macro(self): return self.template.macros['fields'] - - class CreateObject(FormController): @Lazy diff --git a/browser/form_macros.pt b/browser/form_macros.pt index 7a83407..65aa458 100644 --- a/browser/form_macros.pt +++ b/browser/form_macros.pt @@ -5,7 +5,7 @@
+ |
Edit Information Object @@ -20,8 +20,9 @@ Assign Concept(s) |
+ Concept Assignments |
|
---|