r13625 - in MoreFieldsAndWidgets/archetypes.referencebrowserwidget/branches/livesearch/src/archetypes/referencebrowserwidget: . browser skins/referencebrowser
"Emmanuel Masker" <[email protected]> Wed, 11 May 2011 14:58:15 +0000
| Newsgroups | gmane.comp.web.zope.plone.archetypes.cvs |
|---|---|
| Message-ID | <[email protected]> |
Author: emasker
Date: Wed May 11 14:58:15 2011
New Revision: 13625
Modified:
MoreFieldsAndWidgets/archetypes.referencebrowserwidget/branches/livesearch/src/archetypes/referencebrowserwidget/browser/popup.pt
MoreFieldsAndWidgets/archetypes.referencebrowserwidget/branches/livesearch/src/archetypes/referencebrowserwidget/browser/view.py
MoreFieldsAndWidgets/archetypes.referencebrowserwidget/branches/livesearch/src/archetypes/referencebrowserwidget/skins/referencebrowser/referencebrowser.js
MoreFieldsAndWidgets/archetypes.referencebrowserwidget/branches/livesearch/src/archetypes/referencebrowserwidget/widget.py
Log:
savepoint: first step for inplace add of content type
Modified: MoreFieldsAndWidgets/archetypes.referencebrowserwidget/branches/livesearch/src/archetypes/referencebrowserwidget/browser/popup.pt
==============================================================================
--- MoreFieldsAndWidgets/archetypes.referencebrowserwidget/branches/livesearch/src/archetypes/referencebrowserwidget/browser/popup.pt (original)
+++ MoreFieldsAndWidgets/archetypes.referencebrowserwidget/branches/livesearch/src/archetypes/referencebrowserwidget/browser/popup.pt Wed May 11 14:58:15 2011
@@ -11,6 +11,7 @@
tal:define="fieldName view/fieldName;
multiValued view/multiValued;
fieldRealName view/fieldRealName;
+ editForm view/getEditForm;
at_obj nocall:view/at_obj;
widget nocall:view/widget;
title python:widget.Label(at_obj);
@@ -100,10 +101,12 @@
tal:attributes="value fieldRealName" />
<input type="hidden" name="at_url" value=""
tal:attributes="value view/at_url" />
+ <input type="hidden" name="startup_directory" value=""
+ tal:attributes="value view/startup_url" />
<input type="hidden" name="multiValued" value=""
tal:attributes="value multiValued" />
<input type="hidden" name="close_window" value=""
- tal:attributes="value view/close_window" />
+ tal:attributes="value view/close_window" />
</form>
<!-- actual list of objects, either searchresults or folder contents -->
<tal:block tal:define="batch view/getResult;">
@@ -150,8 +153,16 @@
</div>
<!-- object list -->
- <p tal:condition="not:view/has_queryresults"
- i18n:translate="referencebrowser_no_items_found">No items found.</p>
+ <p tal:condition="not:view/has_queryresults">
+
+ <span i18n:translate="referencebrowser_no_items_found">No items found.</span>
+ <form method="post"
+ tal:condition="view/getPermissionToAdd"
+ tal:attributes="action request/getURL"
+ id="add">
+ <input type="submit" name="add" value="ajouter"/>
+ </form>
+ </p>
<table class="group" width="100%" cellspacing="0" cellpadding="2"
tal:condition="batch">
Modified: MoreFieldsAndWidgets/archetypes.referencebrowserwidget/branches/livesearch/src/archetypes/referencebrowserwidget/browser/view.py
==============================================================================
--- MoreFieldsAndWidgets/archetypes.referencebrowserwidget/branches/livesearch/src/archetypes/referencebrowserwidget/browser/view.py (original)
+++ MoreFieldsAndWidgets/archetypes.referencebrowserwidget/branches/livesearch/src/archetypes/referencebrowserwidget/browser/view.py Wed May 11 14:58:15 2011
@@ -6,6 +6,7 @@
from zope.component import getAdapter
from zope.component import getMultiAdapter, queryMultiAdapter
from zope.formlib import namedtemplate
+from zope.publisher.interfaces.browser import IBrowserView
from Acquisition import aq_inner
from Acquisition import aq_base
@@ -92,6 +93,13 @@
context = aq_inner(self.context)
return urllib.quote('/'.join(context.getPhysicalPath()))
+ def getDestinationDirectoryToAdd (self, field):
+ """ Return the URL where item has to add. """
+ widget = field.widget
+ directory = widget.getDestinationDirectoryToAdd(self.context, field)
+ return utils.getStartupDirectory(self.context, directory)
+
+
class QueryCatalogView(BrowserView):
@@ -163,6 +171,8 @@
super(ReferenceBrowserPopup, self).__init__(context, request)
self.at_url = urllib.quote(request.get('at_url'))
+ #XXX very bad way to compute startup
+ self.startup_url = "/".join(self.at_url.split('/')[:-3])
self.fieldName = request.get('fieldName')
self.fieldRealName = request.get('fieldRealName')
self.search_text = request.get('searchValue', '')
@@ -314,3 +324,31 @@
assert self._updated
item = aq_base(item)
return getattr(item, 'Title', '') or getattr(item, 'getId', '')
+
+ def getPermissionToAdd(self):
+ """ return the permission flag to add an item """
+ return self.widget.permission_to_add_item
+
+ def getEditForm(self):
+ """return edit form for Architect object"""
+ urltool = getToolByName(self.context, "portal_url")
+ portal = urltool.getPortalObject()
+ try:
+ architect = portal.invokeFactory("Architect", "tmp_archi")
+ except:
+ pass
+ archi = getattr(portal, "tmp_archi")
+ #template = getMultiAdapter((self.context, self.request),
+ #name="architect_edit")
+ #archiEdit = getMultiAdapter((archi, self.request,), IBrowserView)
+ return archi.base_edit()
+ def getEditUrl(self):
+ urltool = getToolByName(self.context, "portal_url")
+ portal = urltool.getPortalObject()
+ try:
+ architect = portal.invokeFactory("Architect", "tmp_archi")
+ except:
+ pass
+ archi = getattr(portal, "tmp_archi")
+ return archi.absolute_url()+"/edit"
+
Modified: MoreFieldsAndWidgets/archetypes.referencebrowserwidget/branches/livesearch/src/archetypes/referencebrowserwidget/skins/referencebrowser/referencebrowser.js
==============================================================================
--- MoreFieldsAndWidgets/archetypes.referencebrowserwidget/branches/livesearch/src/archetypes/referencebrowserwidget/skins/referencebrowser/referencebrowser.js (original)
+++ MoreFieldsAndWidgets/archetypes.referencebrowserwidget/branches/livesearch/src/archetypes/referencebrowserwidget/skins/referencebrowser/referencebrowser.js Wed May 11 14:58:15 2011
@@ -22,10 +22,18 @@
var fieldname = wrap.find('input[name=fieldName]').attr('value');
check_referenced_items(fieldname);
});
+
},
onLoad: function() {
widget_id = this.getTrigger().attr('rel').substring(6);
disablecurrentrelations(widget_id);
+ var overlay = this.getOverlay()
+ var wrap = overlay.find('.addeditform');
+ wrap.prepOverlay({
+ subtype: 'ajax',
+ filter: '#content>*',
+ formselector: 'form'
+ });
}});
// the breadcrumb-links and the links of the 'tree'-navigati on
@@ -119,9 +127,27 @@
refreshOverlay(wrap, srcfilter, '');
return false;
});
+
+ //the edit form
+ jq('form#add').live('click',
+ function(event) {
+ var target = jq(this);
+ var src = target.parents('form').attr('action');
+ var wrap = target.parents('.overlaycontent');
+ var startup = wrap.find('input[name=startup_directory]').attr('value');
+ var srcfilter = startup + '/createObject?type_name=Architect #content';
+ pushToHistory(wrap.data('srcfilter'));
+ wrap.data('srcfilter', srcfilter);
+ wrap.load(srcfilter, function() {
+ ploneFormTabbing.initialize();
+ });
+ //refreshOverlay(wrap, srcfilter, '');
+ return false;
+ });
});
+
function disablecurrentrelations (widget_id) {
jq('ul#' + widget_id + ' :input').each(
function (intIndex) {
Modified: MoreFieldsAndWidgets/archetypes.referencebrowserwidget/branches/livesearch/src/archetypes/referencebrowserwidget/widget.py
==============================================================================
--- MoreFieldsAndWidgets/archetypes.referencebrowserwidget/branches/livesearch/src/archetypes/referencebrowserwidget/widget.py (original)
+++ MoreFieldsAndWidgets/archetypes.referencebrowserwidget/branches/livesearch/src/archetypes/referencebrowserwidget/widget.py Wed May 11 14:58:15 2011
@@ -39,7 +39,10 @@
'popup_width': 500,
'popup_height': 550,
'popup_name': 'popup',
- 'wild_card_search' : False
+ 'wild_card_search' : False,
+ 'permission_to_add_item' : False,
+ 'destination_directory_to_add' : '',
+ 'destination_directory_to_add_method' : ''
})
# for documentation of properties see: README.txt
@@ -75,6 +78,36 @@
return directory
+ security.declarePublic('getDestinationDirectoryToAdd')
+ def getDestinationDirectoryToAdd(self, instance, field):
+ """get widget destination directory to add an item
+ """
+ url_tool = instance.restrictedTraverse('@@plone_tools').url()
+ basepath = '/'.join(url_tool.getRelativeContentPath(instance))
+ directory = ''
+ if getattr(self, 'destination_directory_to_add', None):
+ # First check that the method exists and isn't inherited.
+ method = getattr(aq_base(instance), self.startup_directory_method,
+ False)
+ if method:
+ # Then get the method again, but with acquisition context this
+ # time:
+ method = getattr(instance, self.destination_directory_to_add_method, False)
+ if callable(method):
+ method = method()
+
+ directory = method
+
+ elif getattr(self, 'destination_directory_to_add', None):
+ directory = self.destination_directory_to_add
+ if not directory.startswith('/'):
+ directory = '/'.join([basepath, directory])
+
+ else:
+ directory = basepath
+
+ return directory
+
security.declarePublic('getBaseQuery')
def getBaseQuery(self, instance, field):
"""Return base query to use for content search
@@ -156,5 +189,7 @@
'boolean', ReferenceBrowserWidget)
registerPropertyType('wild_card_search',
'boolean', ReferenceBrowserWidget)
-
+registerPropertyType('permission_to_add',
+ 'boolean', ReferenceBrowserWidget)
+registerPropertyType('destination_directory_to_add', 'string', ReferenceBrowserWidget)
------------------------------------------------------------------------------
Achieve unprecedented app performance and reliability
What every C/C++ and Fortran developer should know.
Learn how Intel has extended the reach of its next-generation tools
to help boost performance applications - inlcuding clusters.
http://p.sf.net/sfu/intel-dev2devmay