From 689b6ca34a00061a80637ea3f726dc66445010b5 Mon Sep 17 00:00:00 2001 From: helmutm Date: Sun, 13 Aug 2006 21:59:01 +0000 Subject: [PATCH] more on inline editing with dojo git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@1299 fd906abe-77d9-0310-91a1-e0d9ade77398 --- browser/common.py | 15 +++++++++++++++ browser/configure.zcml | 9 +++++++++ browser/loops.js | 8 ++++++++ browser/node.pt | 2 +- browser/node.py | 42 +++++++++++++++++++++++++++++++++--------- browser/node_macros.pt | 40 ++++++++++++++++++++++++++++++---------- search/browser.py | 21 ++++++++++----------- search/configure.zcml | 9 --------- search/search.pt | 2 +- 9 files changed, 107 insertions(+), 41 deletions(-) diff --git a/browser/common.py b/browser/common.py index ff3eb86..4c86927 100644 --- a/browser/common.py +++ b/browser/common.py @@ -184,6 +184,21 @@ class BaseView(object): return self.request.principal.id == 'rootadmin' #return getattr(self.context, 'contentType', '').startswith('text/') + @Lazy + def inlineEditingActive(self): + return self.request.principal.id == 'rootadmin' + # this may depend on system and user settings... + return True + + @Lazy + def inlineEditable(self): + if not self.inlineEditingActive: + return False + return canWrite(self.context, 'title') + + def inlineEdit(self, id): + return 'return inlineEdit("%s")' %id + class LoopsTerms(object): """ Provide the ITerms interface, e.g. for usage in selection diff --git a/browser/configure.zcml b/browser/configure.zcml index 1aa9dd7..ae45b33 100644 --- a/browser/configure.zcml +++ b/browser/configure.zcml @@ -530,6 +530,15 @@ permission="zope.View" /> + + + + + tal:condition="view/inlineEditingActive | nothing"> diff --git a/browser/node.py b/browser/node.py index 91393d1..41f84ce 100644 --- a/browser/node.py +++ b/browser/node.py @@ -39,6 +39,7 @@ from zope.proxy import removeAllProxies from zope.security import canAccess, canWrite from zope.security.proxy import removeSecurityProxy +from cybertools.ajax import innerHtml from cybertools.browser import configurator from cybertools.typology.interfaces import ITypeManager from loops.interfaces import IConcept, IResource, IDocument, IMediaAsset, INode @@ -227,19 +228,25 @@ class NodeView(BaseView): return u'' @Lazy - def virtualTarget(self): + def virtualTargetObject(self): target = self.request.annotations.get('loops.view', {}).get('target') if target is None: target = self.targetObject return target + @Lazy + def virtualTarget(self): + obj = self.virtualTargetObject + if obj is not None: + basicView = zapi.getMultiAdapter((obj, self.request)) + basicView._viewName = self.context.viewName + return basicView.view + @Lazy def targetId(self): - target = self.virtualTarget + target = self.virtualTargetObject if target is not None: return BaseView(target, self.request).uniqueId - #return target.uniqueId - #return zapi.getUtility(IIntIds).getId(target) @Lazy def virtualTargetUrl(self): @@ -249,18 +256,35 @@ class NodeView(BaseView): @Lazy def realTargetUrl(self): - target = self.virtualTarget + target = self.virtualTargetObject if target is not None: return BaseView(target, self.request).url @Lazy - def richEditable(self): + def inlineEditable(self): target = self.virtualTarget - if target is None: - return False - return canWrite(target, 'title') + return target and target.inlineEditable or False +# inner HTML views + +class InlineEdit(NodeView): + """ Provides inline editor as inner HTML - OBSOLETE, use as an example only!""" + + @Lazy + def macro(self): + return self.template.macros['inline_edit'] + + def __call__(self): + return innerHtml(self) + + @property + def body(self): + return self.virtualTargetObject.data + + +# special (named) views for nodes + class ListPages(NodeView): @Lazy diff --git a/browser/node_macros.pt b/browser/node_macros.pt index a569075..596c529 100644 --- a/browser/node_macros.pt +++ b/browser/node_macros.pt @@ -11,13 +11,10 @@ - - + itemNum view/itemNum; + id string:$itemNum.body;">
The body
-
+
+
+ Edit +
- @@ -159,7 +162,24 @@ - + + +
+
+
+ The body +
+
+
+ + + + + - - - - - -
Search results -

+