View/Node: added 'viewer' attribute
git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@1160 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
		
							parent
							
								
									35de5b434a
								
							
						
					
					
						commit
						3a5281b047
					
				
					 8 changed files with 64 additions and 29 deletions
				
			
		| 
						 | 
				
			
			@ -25,7 +25,7 @@ $Id$
 | 
			
		|||
from zope.app import zapi
 | 
			
		||||
from zope.app.catalog.interfaces import ICatalog
 | 
			
		||||
from zope.app.dublincore.interfaces import ICMFDublinCore
 | 
			
		||||
from zope.app.event.objectevent import ObjectCreatedEvent
 | 
			
		||||
from zope.app.event.objectevent import ObjectCreatedEvent, ObjectModifiedEvent
 | 
			
		||||
from zope.app.form.browser.interfaces import ITerms
 | 
			
		||||
from zope.app.pagetemplate import ViewPageTemplateFile
 | 
			
		||||
from zope.cachedescriptors.property import Lazy
 | 
			
		||||
| 
						 | 
				
			
			@ -144,24 +144,25 @@ class ConceptConfigureView(ConceptView):
 | 
			
		|||
        type = ITypeManager(self.context).getType(token)
 | 
			
		||||
        factory = type.factory
 | 
			
		||||
        container = type.defaultContainer
 | 
			
		||||
        concept = factory(title)
 | 
			
		||||
        concept = removeSecurityProxy(factory(title))
 | 
			
		||||
        container[name] = concept
 | 
			
		||||
        if IConcept.providedBy(concept):
 | 
			
		||||
            concept.conceptType = type.typeProvider
 | 
			
		||||
        notify(ObjectCreatedEvent(removeSecurityProxy(concept)))
 | 
			
		||||
        notify(ObjectCreatedEvent(concept))
 | 
			
		||||
        notify(ObjectModifiedEvent(concept))
 | 
			
		||||
        assignAs = self.request.get('assignAs', 'child')
 | 
			
		||||
        predicate = request.get('create.predicate') or None
 | 
			
		||||
        if predicate:
 | 
			
		||||
            predicate = removeSecurityProxy(
 | 
			
		||||
                            self.loopsRoot.loopsTraverse(predicate))
 | 
			
		||||
        if assignAs == 'child':
 | 
			
		||||
            self.context.assignChild(removeSecurityProxy(concept), predicate)
 | 
			
		||||
            self.context.assignChild(concept, predicate)
 | 
			
		||||
        elif assignAs == 'parent':
 | 
			
		||||
            self.context.assignParent(removeSecurityProxy(concept), predicate)
 | 
			
		||||
            self.context.assignParent(concept, predicate)
 | 
			
		||||
        elif assignAs == 'resource':
 | 
			
		||||
            self.context.assignResource(removeSecurityProxy(concept), predicate)
 | 
			
		||||
            self.context.assignResource(concept, predicate)
 | 
			
		||||
        elif assignAs == 'concept':
 | 
			
		||||
            self.context.assignConcept(removeSecurityProxy(concept), predicate)
 | 
			
		||||
            self.context.assignConcept(concept, predicate)
 | 
			
		||||
        else:
 | 
			
		||||
            raise(BadRequest, 'Illegal assignAs parameter: %s.' % assignAs)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -388,7 +388,7 @@
 | 
			
		|||
      label="Edit Node"
 | 
			
		||||
      name="edit.html"
 | 
			
		||||
      schema="loops.interfaces.INode"
 | 
			
		||||
      fields="title description nodeType body"
 | 
			
		||||
      fields="title description nodeType viewer body"
 | 
			
		||||
      for="loops.interfaces.INode"
 | 
			
		||||
      template="edit.pt"
 | 
			
		||||
      permission="zope.ManageContent"
 | 
			
		||||
| 
						 | 
				
			
			@ -405,20 +405,13 @@
 | 
			
		|||
      add="zope.ManageContent"
 | 
			
		||||
      />
 | 
			
		||||
 | 
			
		||||
  <editform
 | 
			
		||||
      label="Configure Node"
 | 
			
		||||
  <page
 | 
			
		||||
      name="configure.html"
 | 
			
		||||
      schema="loops.interfaces.INode"
 | 
			
		||||
      fields="title description nodeType target"
 | 
			
		||||
      for="loops.interfaces.INode"
 | 
			
		||||
      template="node_target.pt"
 | 
			
		||||
      class="loops.browser.node.ConfigureView"
 | 
			
		||||
      permission="zope.ManageContent">
 | 
			
		||||
 | 
			
		||||
    <widget field="description" height="2" />
 | 
			
		||||
    <widget field="body" height="15" />
 | 
			
		||||
 | 
			
		||||
  </editform>
 | 
			
		||||
  </page>
 | 
			
		||||
 | 
			
		||||
  <menuItem
 | 
			
		||||
      for="loops.interfaces.INode"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,7 +17,7 @@
 | 
			
		|||
  <metal:body fill-slot="body">
 | 
			
		||||
    <tal:content define="item view/item;
 | 
			
		||||
                         level level|python: 1;
 | 
			
		||||
                         macro item/macro">
 | 
			
		||||
                         macro item/macro;">
 | 
			
		||||
      <metal:block use-macro="macro" />
 | 
			
		||||
    </tal:content>
 | 
			
		||||
  </metal:body>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -26,7 +26,7 @@ from zope.cachedescriptors.property import Lazy
 | 
			
		|||
from zope.app import zapi
 | 
			
		||||
from zope.app.catalog.interfaces import ICatalog
 | 
			
		||||
from zope.app.container.browser.contents import JustContents
 | 
			
		||||
from zope.app.event.objectevent import ObjectCreatedEvent
 | 
			
		||||
from zope.app.event.objectevent import ObjectCreatedEvent, ObjectModifiedEvent
 | 
			
		||||
from zope.app.pagetemplate import ViewPageTemplateFile
 | 
			
		||||
from zope.app.intid.interfaces import IIntIds
 | 
			
		||||
from zope.dottedname.resolve import resolve
 | 
			
		||||
| 
						 | 
				
			
			@ -46,7 +46,13 @@ from loops.browser.concept import ConceptView
 | 
			
		|||
class NodeView(BaseView):
 | 
			
		||||
 | 
			
		||||
    template = ViewPageTemplateFile('node_macros.pt')
 | 
			
		||||
    macro = template.macros['content']
 | 
			
		||||
 | 
			
		||||
    @Lazy
 | 
			
		||||
    def macro(self):
 | 
			
		||||
        macroName = self.request.get('viewer')
 | 
			
		||||
        if not macroName:
 | 
			
		||||
            macroName = self.context.viewer or 'content'
 | 
			
		||||
        return self.template.macros[macroName]
 | 
			
		||||
 | 
			
		||||
    @Lazy
 | 
			
		||||
    def item(self):
 | 
			
		||||
| 
						 | 
				
			
			@ -65,7 +71,11 @@ class NodeView(BaseView):
 | 
			
		|||
    def textItems(self):
 | 
			
		||||
        return [NodeView(child, self.request)
 | 
			
		||||
                    for child in self.context.getTextItems()]
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
    @Lazy
 | 
			
		||||
    def pageItems(self):
 | 
			
		||||
        return [NodeView(child, self.request)
 | 
			
		||||
                    for child in self.context.getPageItems()]
 | 
			
		||||
 | 
			
		||||
    @Lazy
 | 
			
		||||
    def nodeType(self):
 | 
			
		||||
| 
						 | 
				
			
			@ -148,8 +158,9 @@ class NodeView(BaseView):
 | 
			
		|||
        if target is None:
 | 
			
		||||
            target = self.targetObject
 | 
			
		||||
        if target is not None:
 | 
			
		||||
            name = zapi.getDefaultViewName(target, self.request)
 | 
			
		||||
            targetView = zapi.getMultiAdapter((target, self.request),
 | 
			
		||||
                    name=zapi.getDefaultViewName(target, self.request))
 | 
			
		||||
                    name=name)
 | 
			
		||||
            return targetView()
 | 
			
		||||
        return u''
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -212,6 +223,7 @@ class ConfigureView(NodeView):
 | 
			
		|||
        if IConcept.providedBy(target):
 | 
			
		||||
            target.conceptType = type.typeProvider
 | 
			
		||||
        notify(ObjectCreatedEvent(target))
 | 
			
		||||
        notify(ObjectModifiedEvent(target))
 | 
			
		||||
        self.context.target = target
 | 
			
		||||
        return True
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -84,6 +84,21 @@
 | 
			
		|||
</metal:body>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<metal:body define-macro="listpages">
 | 
			
		||||
  <div class="content-1"
 | 
			
		||||
       tal:define="onclick string:openEditWindow('${view/url}/@@edit.html')"
 | 
			
		||||
       tal:content="structure view/body"
 | 
			
		||||
       tal:attributes="ondblclick python: view.editable and onclick or ''">
 | 
			
		||||
    Listing
 | 
			
		||||
  </div><br />
 | 
			
		||||
  <div tal:repeat="item view/pageItems">
 | 
			
		||||
    <a href="#"
 | 
			
		||||
       tal:attributes="href item/url"
 | 
			
		||||
       tal:content="item/title">Item</a>
 | 
			
		||||
  </div>
 | 
			
		||||
</metal:body>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<!-- menu -->
 | 
			
		||||
 | 
			
		||||
<metal:menu define-macro="menu">
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,7 +9,9 @@
 | 
			
		|||
        <span tal:content="context/title">Concept Title</span>
 | 
			
		||||
        <a href="#"
 | 
			
		||||
           tal:condition="python: context.contentType.startswith('text')"
 | 
			
		||||
           tal:attributes="href string:${context/@@absolute_url}/external_edit">X</a>
 | 
			
		||||
           tal:attributes="href string:${context/@@absolute_url}/external_edit"
 | 
			
		||||
           ><img src="edit.gif"
 | 
			
		||||
           tal:attributes="src context/++resource++edit.gif" border="0" /></a>
 | 
			
		||||
      </h1><br />
 | 
			
		||||
      
 | 
			
		||||
      <div   tal:define="items view/concepts;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -309,13 +309,13 @@ class IView(ILoopsObject):
 | 
			
		|||
        default=u'',
 | 
			
		||||
        required=False)
 | 
			
		||||
 | 
			
		||||
    #target = Attribute('Target object that is referenced by this view')
 | 
			
		||||
    target = Attribute('Target object that is referenced by this view')
 | 
			
		||||
 | 
			
		||||
    target = schema.Choice(
 | 
			
		||||
        title=_(u'Target'),
 | 
			
		||||
        description=_(u'The target object of this view or node'),
 | 
			
		||||
        default=None,
 | 
			
		||||
        source="loops.targetSource",
 | 
			
		||||
    viewer = schema.TextLine(
 | 
			
		||||
        title=_(u'Viewer Method Specification'),
 | 
			
		||||
        description=_(u'Name, path or relative URI specifying a viewer '
 | 
			
		||||
                       '(template, macro, ...) for this object'),
 | 
			
		||||
        default=u'',
 | 
			
		||||
        required=False)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -388,6 +388,10 @@ class INode(IView, IBaseNode):
 | 
			
		|||
        """ Return True if this object is a menu item.
 | 
			
		||||
        """
 | 
			
		||||
 | 
			
		||||
    def getPageItems():
 | 
			
		||||
        """ Return the page items belonging to this object.
 | 
			
		||||
        """
 | 
			
		||||
 | 
			
		||||
    def getTextItems():
 | 
			
		||||
        """ Return the text items belonging to this object.
 | 
			
		||||
        """
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										8
									
								
								view.py
									
										
									
									
									
								
							
							
						
						
									
										8
									
								
								view.py
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -60,6 +60,11 @@ class View(object):
 | 
			
		|||
    def setDescription(self, description): self._description = description
 | 
			
		||||
    description = property(getDescription, setDescription)
 | 
			
		||||
 | 
			
		||||
    _viewer = u''
 | 
			
		||||
    def getViewer(self): return self._viewer
 | 
			
		||||
    def setViewer(self, viewer): self._viewer = viewer
 | 
			
		||||
    viewer = property(getViewer, setViewer)
 | 
			
		||||
 | 
			
		||||
    def getTarget(self):
 | 
			
		||||
        rels = getRelations(first=self, relationships=[TargetRelation])
 | 
			
		||||
        if len(rels) == 0:
 | 
			
		||||
| 
						 | 
				
			
			@ -141,6 +146,9 @@ class Node(View, OrderedContainer):
 | 
			
		|||
    def getMenuItems(self):
 | 
			
		||||
        return self.getChildNodes(['page', 'menu'])
 | 
			
		||||
 | 
			
		||||
    def getPageItems(self):
 | 
			
		||||
        return self.getChildNodes(['page', 'menu', 'info'])
 | 
			
		||||
 | 
			
		||||
    def getTextItems(self):
 | 
			
		||||
        return self.getChildNodes(['text'])
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue