diff --git a/browser/common.py b/browser/common.py index 4c86927..9f94e3c 100644 --- a/browser/common.py +++ b/browser/common.py @@ -40,6 +40,7 @@ from zope.schema.vocabulary import SimpleTerm from zope.security import canAccess, canWrite from zope.security.proxy import removeSecurityProxy +from cybertools.browser.view import GenericView from cybertools.relation.interfaces import IRelationRegistry from cybertools.typology.interfaces import IType from loops.interfaces import IView @@ -80,13 +81,12 @@ class EditForm(BaseEditForm): return parentUrl + '/contents.html' -class BaseView(object): +class BaseView(GenericView): def __init__(self, context, request): - #self.context = context # TODO: get rid of removeSecurityProxy() call + super(BaseView, self).__init__(context, request) self.context = removeSecurityProxy(context) - self.request = request self.setSkin(self.loopsRoot.skinName) def setSkin(self, skinName): @@ -97,16 +97,6 @@ class BaseView(object): applySkin(self.request, skin) self.skin = skin - _controller = None - def setController(self, controller): - self._controller = controller - # this is also the place to register special macros with the controller - if getattr(controller, 'skinName', None): - self.setSkin(controller.skinName.value) - controller.skin = self.skin - def getController(self): return self._controller - controller = property(getController, setController) - @Lazy def modified(self): """ get date/time of last modification @@ -186,18 +176,17 @@ class BaseView(object): @Lazy def inlineEditingActive(self): + return False 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') + return self.inlineEditingActive and canWrite(self.context, 'title') def inlineEdit(self, id): - return 'return inlineEdit("%s")' %id + return 'return inlineEdit("%s", "")' % id class LoopsTerms(object): diff --git a/browser/configure.zcml b/browser/configure.zcml index ae45b33..b7ed096 100644 --- a/browser/configure.zcml +++ b/browser/configure.zcml @@ -16,6 +16,15 @@ + + + + + + + + tal:define="dummy python: controller.macros.register('css', + identifier='loops.css', resourceName='loops.css', media='all'); + dummy python: controller.macros.register('js', + identifier='loops.js', resourceName='loops.js'); + dummy python: controller.macros.register('js', + identifier='dojo.js', resourceName='ajax.dojo/dojo.js');" /> - @@ -35,9 +35,9 @@

Navigation

- + condition="nocall:item">
diff --git a/browser/node.py b/browser/node.py index 41f84ce..596c713 100644 --- a/browser/node.py +++ b/browser/node.py @@ -41,6 +41,7 @@ from zope.security.proxy import removeSecurityProxy from cybertools.ajax import innerHtml from cybertools.browser import configurator +from cybertools.browser.view import GenericView from cybertools.typology.interfaces import ITypeManager from loops.interfaces import IConcept, IResource, IDocument, IMediaAsset, INode from loops.interfaces import IViewConfiguratorSchema @@ -60,12 +61,19 @@ class NodeView(BaseView): def macro(self): return self.template.macros['content'] + def setupController(self): + cm = self.controller.macros + cm.register('css', identifier='loops.css', + resourceName='loops.css', media='all') + cm.register('js', identifier='loops.js', resourceName='loops.js') + cm.register('js', identifier='dojo.js', resourceName='ajax.dojo/dojo.js') + @Lazy def view(self): viewName = self.request.get('loops.viewName') or self.context.viewName if viewName: - adapter = component.queryMultiAdapter((self.context, self.request), - interface.Interface, name=viewName) + adapter = component.queryMultiAdapter( + (self.context, self.request), name=viewName) if adapter is not None: return adapter return self @@ -265,11 +273,13 @@ class NodeView(BaseView): target = self.virtualTarget return target and target.inlineEditable or False + def inlineEdit(self, id): + return 'return inlineEdit("%s", "%s/inline_save")' % (id, self.virtualTargetUrl) # inner HTML views class InlineEdit(NodeView): - """ Provides inline editor as inner HTML - OBSOLETE, use as an example only!""" + """ Provides inline editor as inner HTML""" @Lazy def macro(self): @@ -282,6 +292,10 @@ class InlineEdit(NodeView): def body(self): return self.virtualTargetObject.data + def save(self): + target = self.virtualTargetObject + target.data = self.request.form['editorContent'] + # special (named) views for nodes diff --git a/browser/node_macros.pt b/browser/node_macros.pt index 596c529..f3283b7 100644 --- a/browser/node_macros.pt +++ b/browser/node_macros.pt @@ -23,8 +23,8 @@ tal:content="structure body"> The body
-