diff --git a/README.txt b/README.txt
index 33e81d3..b903314 100755
--- a/README.txt
+++ b/README.txt
@@ -465,6 +465,14 @@ Node Views
... print item.url, view.selected(item)
http://127.0.0.1/loops/views/m1/m11 True
+A NodeView provides an itemNum attribute that may be used to count elements
+appearing on a page. Thus a template may construct unique ids for elements.
+
+ >>> view.itemNum
+ 1
+ >>> view.itemNum
+ 2
+
There is an openEditWindow() method that returns a JavaScript call for
opening a new browser window for editing; but only if the view is
editable:
diff --git a/browser/common.py b/browser/common.py
index 6a735b8..ff3eb86 100644
--- a/browser/common.py
+++ b/browser/common.py
@@ -169,7 +169,6 @@ class BaseView(object):
@Lazy
def uniqueId(self):
return zapi.getUtility(IRelationRegistry).getUniqueIdForObject(self.context)
- #return zapi.getUtility(IIntIds).getId(self.context)
@Lazy
def editable(self):
@@ -182,7 +181,8 @@ class BaseView(object):
@Lazy
def xeditable(self):
- return getattr(self.context, 'contentType', '').startswith('text/')
+ return self.request.principal.id == 'rootadmin'
+ #return getattr(self.context, 'contentType', '').startswith('text/')
class LoopsTerms(object):
diff --git a/browser/concept_macros.pt b/browser/concept_macros.pt
index c6824c3..ffe1a9e 100644
--- a/browser/concept_macros.pt
+++ b/browser/concept_macros.pt
@@ -13,8 +13,7 @@
-
+
diff --git a/browser/node.pt b/browser/node.pt
index 238f9f5..2fe2b51 100644
--- a/browser/node.pt
+++ b/browser/node.pt
@@ -1,4 +1,4 @@
-
+
@@ -13,6 +13,14 @@
controller.macros.register('js', resourceName='ajax.dojo/dojo.js');" />
+
+
+
+
+
diff --git a/browser/node.py b/browser/node.py
index fe107fb..91393d1 100644
--- a/browser/node.py
+++ b/browser/node.py
@@ -31,7 +31,7 @@ from zope.app.container.browser.contents import JustContents
from zope.app.container.browser.adding import ContentAdding
from zope.app.event.objectevent import ObjectCreatedEvent, ObjectModifiedEvent
from zope.app.pagetemplate import ViewPageTemplateFile
-from zope.app.intid.interfaces import IIntIds
+#from zope.app.intid.interfaces import IIntIds
from zope.dottedname.resolve import resolve
from zope.event import notify
from zope.formlib.namedtemplate import NamedTemplate
@@ -51,15 +51,13 @@ from loops.browser.concept import ConceptView
class NodeView(BaseView):
+ _itemNum = 0
+
template = NamedTemplate('loops.node_macros')
@Lazy
def macro(self):
return self.template.macros['content']
- #macroName = self.request.get('loops.viewName')
- #if not macroName:
- # macroName = self.context.viewName or 'content'
- #return self.template.macros[macroName]
@Lazy
def view(self):
@@ -95,6 +93,11 @@ class NodeView(BaseView):
return [NodeView(child, self.request)
for child in self.context.getPageItems()]
+ @property
+ def itemNum(self):
+ self._itemNum += 1
+ return self._itemNum
+
@Lazy
def nodeType(self):
return self.context.nodeType
@@ -139,13 +142,13 @@ class NodeView(BaseView):
@Lazy
def bodyMacro(self):
- # ?TODO: replace by: return self.target.macroName
+ # TODO: replace by: return self.target.macroName
target = self.targetObject
if target is None or IDocument.providedBy(target):
return 'textbody'
if IConcept.providedBy(target):
return 'conceptbody'
- if IMediaAsset.providedBy(target) and target.contentType.startswith('image/'):
+ if IResource.providedBy(target) and target.contentType.startswith('image/'):
return 'imagebody'
return 'filebody'
@@ -223,12 +226,39 @@ class NodeView(BaseView):
return targetView()
return u''
- def targetId(self):
+ @Lazy
+ def virtualTarget(self):
target = self.request.annotations.get('loops.view', {}).get('target')
if target is None:
target = self.targetObject
+ return target
+
+ @Lazy
+ def targetId(self):
+ target = self.virtualTarget
if target is not None:
- return zapi.getUtility(IIntIds).getId(target)
+ return BaseView(target, self.request).uniqueId
+ #return target.uniqueId
+ #return zapi.getUtility(IIntIds).getId(target)
+
+ @Lazy
+ def virtualTargetUrl(self):
+ targetId = self.targetId
+ if targetId is not None:
+ return '%s/.target%s' % (self.url, targetId)
+
+ @Lazy
+ def realTargetUrl(self):
+ target = self.virtualTarget
+ if target is not None:
+ return BaseView(target, self.request).url
+
+ @Lazy
+ def richEditable(self):
+ target = self.virtualTarget
+ if target is None:
+ return False
+ return canWrite(target, 'title')
class ListPages(NodeView):
diff --git a/browser/node_macros.pt b/browser/node_macros.pt
index aea1bd3..a569075 100644
--- a/browser/node_macros.pt
+++ b/browser/node_macros.pt
@@ -5,28 +5,45 @@
-
+
+
+
-
-