diff --git a/browser/common.py b/browser/common.py
index ae5bac9..5ac05ae 100644
--- a/browser/common.py
+++ b/browser/common.py
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2011 Helmut Merz helmutm@cy55.de
+# Copyright (c) 2012 Helmut Merz helmutm@cy55.de
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -58,6 +58,7 @@ from cybertools.relation.interfaces import IRelationRegistry
from cybertools.stateful.interfaces import IStateful
from cybertools.text import mimetypes
from cybertools.typology.interfaces import IType, ITypeManager
+from cybertools.util.jeep import Jeep
from loops.browser.util import normalizeForUrl
from loops.common import adapted, baseObject
from loops.config.base import DummyOptions
@@ -74,7 +75,7 @@ from loops.versioning.interfaces import IVersionable
concept_macros = ViewPageTemplateFile('concept_macros.pt')
-conceptMacrosTemplate = concept_macros #
+conceptMacrosTemplate = concept_macros
resource_macros = ViewPageTemplateFile('resource_macros.pt')
@@ -84,14 +85,28 @@ class NameField(schema.ASCIILine):
super(NameField, self)._validate(value)
+class ViewMode(object):
+
+ def __init__(self, name='view', title=None, url=None, active=False,
+ description=u''):
+ self.name = name
+ self.title = title
+ self.url = url
+ self.active = active
+ self.description = description
+
+ @property
+ def cssClass(self):
+ return self.active and u'active' or u'inactive'
+
+
class IAddForm(Interface):
name = NameField(
title=_(u'Object name'),
description=_(u'Name of the object - will be used for addressing the '
- 'object via a URL; should therefore be unique within '
- 'the container and not contain special characters')
- )
+ u'object via a URL; should therefore be unique within '
+ u'the container and not contain special characters'))
class AddForm(form.AddForm):
@@ -115,6 +130,7 @@ class BaseView(GenericView, I18NView):
actions = {}
icon = None
+ modeName = 'view'
def __init__(self, context, request):
super(BaseView, self).__init__(context, request)
@@ -148,6 +164,9 @@ class BaseView(GenericView, I18NView):
def breadcrumbs(self):
return []
+ def viewModes(self):
+ return Jeep()
+
@Lazy
def name(self):
return getName(self.context)
diff --git a/browser/node.py b/browser/node.py
index 864b5aa..6dcfd35 100644
--- a/browser/node.py
+++ b/browser/node.py
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2011 Helmut Merz helmutm@cy55.de
+# Copyright (c) 2012 Helmut Merz helmutm@cy55.de
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -48,10 +48,11 @@ from cybertools.browser.action import Action
from cybertools.browser.view import GenericView
from cybertools.stateful.interfaces import IStateful
from cybertools.typology.interfaces import IType, ITypeManager
+from cybertools.util.jeep import Jeep
from cybertools.xedit.browser import ExternalEditorView
from loops.browser.action import actions, DialogAction
from loops.common import adapted, AdapterBase
-from loops.i18n.browser import i18n_macros
+from loops.i18n.browser import i18n_macros, LanguageInfo
from loops.interfaces import IConcept, IResource, IDocument, IMediaAsset, INode
from loops.interfaces import IViewConfiguratorSchema
from loops.resource import MediaAsset
@@ -113,6 +114,11 @@ class NodeView(BaseView):
data.extend(self.virtualTarget.breadcrumbs())
return data
+ def viewModes(self):
+ if self.virtualTarget:
+ return self.virtualTarget.viewModes()
+ return Jeep()
+
def recordAccess(self, viewName=''):
target = self.virtualTargetObject
targetUid = target is not None and util.getUidForObject(target) or ''
@@ -911,6 +917,15 @@ class NodeTraverser(ItemTraverser):
# we'll use the target object in the node's context
viewAnnotations['target'] = target
return self.context
+ target = viewAnnotations.get('target')
+ if target is not None: # name may be a view name for target
+ langInfo = LanguageInfo(self.context, request)
+ adTarget = adapted(target, langInfo)
+ view = component.queryMultiAdapter((adTarget, request), name=name)
+ if view is not None:
+ viewAnnotations['targetView'] = view
+ view.logInfo('NodeTraverser:targetView = %r' % view)
+ return self.context
obj = super(NodeTraverser, self).publishTraverse(request, name)
return obj
diff --git a/browser/node_macros.pt b/browser/node_macros.pt
index 5470efe..72472e9 100644
--- a/browser/node_macros.pt
+++ b/browser/node_macros.pt
@@ -240,6 +240,21 @@
+
+
+
+
+