[Testbot] Plone 4.3 - Python 2.6 - Build # 2501 - Fixed! - 0 failure(s)
jenkins at plone.org
jenkins at plone.org
Fri Oct 24 08:30:57 UTC 2014
-------------------------------------------------------------------------------
Plone 4.3 - Python 2.6 - Build # 2501 - Fixed!
-------------------------------------------------------------------------------
http://jenkins.plone.org/job/plone-4.3-python-2.6/2501/
-------------------------------------------------------------------------------
CHANGES
-------------------------------------------------------------------------------
Repository: plone.formwidget.contenttree
Branch: refs/heads/master
Date: 2014-03-23T20:23:51-07:00
Author: David Glick (davisagli) <david at glicksoftware.com>
Commit: https://github.com/plone/plone.formwidget.contenttree/commit/9c94e6b493a5a6f825e78969a64ac1008d625d5f
Merge pull request #15 from gyst/diazofix
work around bizarro Diazo encoding bug
Files changed:
M plone/formwidget/contenttree/widget.py
diff --git a/plone/formwidget/contenttree/widget.py b/plone/formwidget/contenttree/widget.py
index 00b6694..79ba05b 100644
--- a/plone/formwidget/contenttree/widget.py
+++ b/plone/formwidget/contenttree/widget.py
@@ -176,7 +176,7 @@ def js_extra(self):
return """\
$('#%(id)s-widgets-query').each(function() {
- if($(this).siblings('input.searchButton').length > 0) { return; }
+ if($(this).siblings('input.searchButton').length != 0) { return; }
$(document.createElement('input'))
.attr({
'type': 'button',
Repository: plone.formwidget.contenttree
Branch: refs/heads/master
Date: 2014-03-26T11:04:05+01:00
Author: Guido Stevens (gyst) <guido.stevens at cosent.net>
Commit: https://github.com/plone/plone.formwidget.contenttree/commit/c7bf6ba828dd639109a2003f555aeae0a5b81dde
Update HISTORY.txt
Files changed:
M docs/HISTORY.txt
diff --git a/docs/HISTORY.txt b/docs/HISTORY.txt
index ba3366a..e6fdbf8 100644
--- a/docs/HISTORY.txt
+++ b/docs/HISTORY.txt
@@ -4,6 +4,9 @@ Changelog
1.0.8 (unreleased)
------------------
+* Work around bizarro Diazo encoding bug
+ [gyst]
+
1.0.7 (2013-06-30)
------------------
Repository: plone.formwidget.contenttree
Branch: refs/heads/master
Date: 2014-08-26T00:17:55+02:00
Author: Gil Forcada (gforcada) <gforcada at gnome.org>
Commit: https://github.com/plone/plone.formwidget.contenttree/commit/f6b9a6d6657f001b3299b6b4f8d048604163c90c
Whitespaces cleanup
Files changed:
M plone/formwidget/contenttree/TODO.txt
diff --git a/plone/formwidget/contenttree/TODO.txt b/plone/formwidget/contenttree/TODO.txt
index 901bab8..d884495 100644
--- a/plone/formwidget/contenttree/TODO.txt
+++ b/plone/formwidget/contenttree/TODO.txt
@@ -18,9 +18,9 @@ Tags: [x] Plone
[x] Zope
[x] Python
[Search... ]
- | autocomplete |
- | autocomplete |
- | autocomplete |
+ | autocomplete |
+ | autocomplete |
+ | autocomplete |
|______________|
@@ -30,9 +30,9 @@ Tags: [x] Document 1
[x] Document 2
[x] Image 1
[Search... ] [Browse...]
- | autocomplete |
- | autocomplete |
- | autocomplete |
+ | autocomplete |
+ | autocomplete |
+ | autocomplete |
|______________|
Clicking [Browse...] gives you a lightbox-style (ie. not a real window)
@@ -57,7 +57,7 @@ Other notes:
- Multiselect is still hard, but for now: if multiselect is supported, the
buttons are: [Add] and [Close], if it's single-select, they are [Add] and
[Cancel].
-
- - Adding an item in the multiselect case shows a "Item X added" status
+
+ - Adding an item in the multiselect case shows a "Item X added" status
message, but doesn't close the window. Adding in the single-select case
closes the window.
\ No newline at end of file
Repository: plone.formwidget.contenttree
Branch: refs/heads/master
Date: 2014-10-20T18:57:01+02:00
Author: Robert Niederreiter (rnixx) <office at squarewave.at>
Commit: https://github.com/plone/plone.formwidget.contenttree/commit/3467922b0dde3f362ddd19f9e6eb8ea4aa96c26f
housekeeping
Files changed:
M plone/formwidget/contenttree/jquery-contenttree/contenttree.js
M plone/formwidget/contenttree/widget.py
diff --git a/plone/formwidget/contenttree/jquery-contenttree/contenttree.js b/plone/formwidget/contenttree/jquery-contenttree/contenttree.js
index 891187b..57fa2e3 100755
--- a/plone/formwidget/contenttree/jquery-contenttree/contenttree.js
+++ b/plone/formwidget/contenttree/jquery-contenttree/contenttree.js
@@ -3,8 +3,11 @@ if(jQuery) (function($){
$.extend($.fn, {
showDialog: function() {
- $(document.body).append($(document.createElement("div")).addClass("contenttreeWindowBlocker"))
- this[0].oldparent = $(this).parent()[0]; // store old parent element
+ $(document.body)
+ .append($(document.createElement("div"))
+ .addClass("contenttreeWindowBlocker"));
+ // store old parent element
+ this[0].oldparent = $(this).parent()[0];
$(".contenttreeWindowBlocker").before(this);
$(this).show();
$(this).width($(window).width() * 0.75);
@@ -14,16 +17,22 @@ if(jQuery) (function($){
'top': $(window).height() * 0.125
});
},
+
contentTreeAdd: function() {
var contenttree_window = (this).parents(".contenttreeWindow");
- var input_box = $('#'+ contenttree_window[0].id.replace(/-contenttree-window$/,"-widgets-query"));
+ var input_box = $('#'+ contenttree_window[0].id
+ .replace(/-contenttree-window$/,"-widgets-query"));
contenttree_window.find('.navTreeCurrentItem > a').each(function () {
- formwidget_autocomplete_new_value(input_box,$(this).attr('href'),$.trim($(this).text()));
+ formwidget_autocomplete_new_value(
+ input_box,
+ $(this).attr('href'),
+ $.trim($(this).text())
+ );
});
-
$(this).contentTreeCancel();
input_box.parents('.datagridwidget-cell').triggerHandler('change');
},
+
contentTreeCancel: function() {
$(".contenttreeWindowBlocker").remove();
var popup = $(this).parents(".contenttreeWindow");
@@ -31,46 +40,75 @@ if(jQuery) (function($){
$(popup[0].oldparent).append(popup);
popup[0].oldparent = null;
},
- contentTree: function(o, h) {
+ contentTree: function(o, h) {
// Defaults
- if(!o) var o = {};
- if(o.script == undefined) o.script = 'fetch';
+ if (!o) {
+ var o = {};
+ }
+ if (o.script == undefined) {
+ o.script = 'fetch';
+ }
- if(o.folderEvent == undefined) o.folderEvent = 'click';
- if(o.selectEvent == undefined) o.selectEvent = 'click';
+ if (o.folderEvent == undefined) {
+ o.folderEvent = 'click';
+ }
+ if (o.selectEvent == undefined) {
+ o.selectEvent = 'click';
+ }
- if(o.expandSpeed == undefined) o.expandSpeed = -1;
- if(o.collapseSpeed == undefined) o.collapseSpeed = -1;
+ if (o.expandSpeed == undefined) {
+ o.expandSpeed = -1;
+ }
+ if (o.collapseSpeed == undefined) {
+ o.collapseSpeed = -1;
+ }
- if(o.multiFolder == undefined) o.multiFolder = true;
- if(o.multiSelect == undefined) o.multiSelect = false;
+ if (o.multiFolder == undefined) {
+ o.multiFolder = true;
+ }
+ if (o.multiSelect == undefined) {
+ o.multiSelect = false;
+ }
function loadTree(c, t, r) {
$(c).addClass('wait');
- $.post(o.script, { href: t, rel: r}, function(data) {
+ $.post(o.script, {href: t, rel: r}, function(data) {
$(c).removeClass('wait').append(data);
- $(c).find('ul:hidden').slideDown({ duration: o.expandSpeed });
+ $(c).find('ul:hidden').slideDown({
+ duration: o.expandSpeed
+ });
bindTree(c);
});
}
function handleFolderEvent() {
var li = $(this).parent();
- if(li.hasClass('collapsed')) {
- if(!o.multiFolder) {
- li.parent().find('ul:visible').slideUp({ duration: o.collapseSpeed });
- li.parent().find('li.navTreeFolderish').removeClass('expanded').addClass('collapsed');
+ if (li.hasClass('collapsed')) {
+ if (!o.multiFolder) {
+ li.parent().find('ul:visible').slideUp({
+ duration: o.collapseSpeed
+ });
+ li.parent().find('li.navTreeFolderish')
+ .removeClass('expanded')
+ .addClass('collapsed');
}
- if(li.find('ul').length == 0)
- loadTree(li, escape($(this).attr('href')), escape($(this).attr('rel')));
+ if (li.find('ul').length == 0)
+ loadTree(
+ li,
+ escape($(this).attr('href')),
+ escape($(this).attr('rel'))
+ );
else
- li.find('ul:hidden').slideDown({ duration: o.expandSpeed });
-
+ li.find('ul:hidden').slideDown({
+ duration: o.expandSpeed
+ });
li.removeClass('collapsed').addClass('expanded');
} else {
- li.find('ul').slideUp({ duration: o.collapseSpeed });
+ li.find('ul').slideUp({
+ duration: o.collapseSpeed
+ });
li.removeClass('expanded').addClass('collapsed');
}
return false;
@@ -80,11 +118,15 @@ if(jQuery) (function($){
var li = $(this).parent();
var selected = true;
var root = $(this).parents('ul.navTree');
- if(!li.hasClass('navTreeCurrentItem')) {
- var multi_key = ((event.ctrlKey) || (navigator.userAgent.toLowerCase().indexOf('macintosh') != -1 && event.metaKey));
-
- if(!o.multiSelect || !multi_key) {
- root.find('li.navTreeCurrentItem').removeClass('navTreeCurrentItem');
+ if (!li.hasClass('navTreeCurrentItem')) {
+ var multi_key = (
+ (event.ctrlKey) ||
+ (navigator.userAgent.toLowerCase()
+ .indexOf('macintosh') != -1 && event.metaKey));
+
+ if (!o.multiSelect || !multi_key) {
+ root.find('li.navTreeCurrentItem')
+ .removeClass('navTreeCurrentItem');
}
li.addClass('navTreeCurrentItem');
@@ -100,15 +142,23 @@ if(jQuery) (function($){
function bindTree(t) {
$(t).find('li.navTreeFolderish a').unbind(o.folderEvent);
$(t).find('li.selectable a').unbind(o.selectEvent);
- $(t).find('li a').bind('click', function() { return false; });
- $(t).find('li.navTreeFolderish a').bind(o.folderEvent, handleFolderEvent);
- $(t).find('li.selectable a').bind(o.selectEvent, handleSelectEvent);
+ $(t).find('li a').bind('click', function() {
+ return false;
+ });
+ $(t).find('li.navTreeFolderish a').bind(
+ o.folderEvent,
+ handleFolderEvent
+ );
+ $(t).find('li.selectable a').bind(
+ o.selectEvent,
+ handleSelectEvent
+ );
}
if ($(this).children('ul.navTree').length <= 0) {
- $(this).each(function() {
- loadTree(this, o.rootUrl, 0);
- });
+ $(this).each(function() {
+ loadTree(this, o.rootUrl, 0);
+ });
}
}
diff --git a/plone/formwidget/contenttree/widget.py b/plone/formwidget/contenttree/widget.py
index 79ba05b..25a34c2 100644
--- a/plone/formwidget/contenttree/widget.py
+++ b/plone/formwidget/contenttree/widget.py
@@ -3,8 +3,11 @@
from Acquisition.interfaces import IAcquirer
from zope.browserpage.viewpagetemplatefile import ViewPageTemplateFile
-from zope.interface import implementsOnly, implementer
+from zope.interface import implementsOnly
+from zope.interface import implementer
from zope.component import getMultiAdapter
+from zope.pagetemplate.interfaces import IPageTemplate
+from zope.schema.vocabulary import SimpleTerm
from zope.i18n import translate
import z3c.form.interfaces
@@ -110,6 +113,52 @@ def __call__(self):
return self.fragment_template(children=children, level=int(level))
+ADDITIONAL_JS = """\
+$('#%(id)s-widgets-query').each(function() {
+ if ($(this).siblings('input.searchButton').length != 0) {
+ return;
+ }
+ var input = document.createElement('input');
+ $(input)
+ .attr({
+ 'type': 'button',
+ 'value': '%(button_val)s'
+ })
+ .addClass('searchButton')
+ .click(function () {
+ var parent = $(this).parents("*[id$='-autocomplete']");
+ var window = parent.siblings("*[id$='-contenttree-window']");
+ window.showDialog('%(url)s', %(expandSpeed)d);
+ $('#' + parent.attr('id').replace(
+ 'autocomplete', 'contenttree')).contentTree({
+ script: '%(url)s',
+ folderEvent: '%(folderEvent)s',
+ selectEvent: '%(selectEvent)s',
+ expandSpeed: %(expandSpeed)d,
+ collapseSpeed: %(collapseSpeed)s,
+ multiFolder: %(multiFolder)s,
+ multiSelect: %(multiSelect)s,
+ rootUrl: '%(rootUrl)s'
+ },
+ function(event, selected, data, title) {
+ });
+ })
+ .insertAfter($(this));
+});
+$('#%(id)s-contenttree-window').find('.contentTreeAdd')
+ .unbind('click')
+ .click(function () {
+ $(this).contentTreeAdd();
+});
+$('#%(id)s-contenttree-window').find('.contentTreeCancel')
+ .unbind('click')
+ .click(function () {
+ $(this).contentTreeCancel();
+});
+$('#%(id)s-widgets-query').after(" ");
+"""
+
+
class ContentTreeBase(Explicit):
implementsOnly(IContentTreeWidget)
@@ -172,67 +221,29 @@ def js_extra(self):
source = self.bound_source
form_url = self.request.getURL()
url = "%s/++widget++%s/@@contenttree-fetch" % (form_url, self.name)
-
- return """\
-
- $('#%(id)s-widgets-query').each(function() {
- if($(this).siblings('input.searchButton').length != 0) { return; }
- $(document.createElement('input'))
- .attr({
- 'type': 'button',
- 'value': '%(button_val)s'
- })
- .addClass('searchButton')
- .click( function () {
- var parent = $(this).parents("*[id$='-autocomplete']")
- var window = parent.siblings("*[id$='-contenttree-window']")
- window.showDialog('%(url)s', %(expandSpeed)d);
- $('#' + parent.attr('id').replace('autocomplete', 'contenttree')).contentTree(
- {
- script: '%(url)s',
- folderEvent: '%(folderEvent)s',
- selectEvent: '%(selectEvent)s',
- expandSpeed: %(expandSpeed)d,
- collapseSpeed: %(collapseSpeed)s,
- multiFolder: %(multiFolder)s,
- multiSelect: %(multiSelect)s,
- rootUrl: '%(rootUrl)s'
- },
- function(event, selected, data, title) {
- // alert(event + ', ' + selected + ', ' + data + ', ' + title);
- }
- );
- }).insertAfter($(this));
- });
- $('#%(id)s-contenttree-window').find('.contentTreeAdd').unbind('click').click(function () {
- $(this).contentTreeAdd();
- });
- $('#%(id)s-contenttree-window').find('.contentTreeCancel').unbind('click').click(function () {
- $(this).contentTreeCancel();
- });
- $('#%(id)s-widgets-query').after(" ");
-
- """ % dict(url=url,
- id=self.name.replace('.', '-'),
- folderEvent=self.folderEvent,
- selectEvent=self.selectEvent,
- expandSpeed=self.expandSpeed,
- collapseSpeed=self.collapseSpeed,
- multiFolder=str(self.multiFolder).lower(),
- multiSelect=str(self.multi_select).lower(),
- rootUrl=source.navigation_tree_query['path']['query'],
- name=self.name,
- klass=self.klass,
- title=self.title,
- button_val=translate(
- _(u'label_contenttree_browse', default=u'browse...'),
- context=self.request))
+ return ADDITIONAL_JS % dict(
+ url=url,
+ id=self.name.replace('.', '-'),
+ folderEvent=self.folderEvent,
+ selectEvent=self.selectEvent,
+ expandSpeed=self.expandSpeed,
+ collapseSpeed=self.collapseSpeed,
+ multiFolder=str(self.multiFolder).lower(),
+ multiSelect=str(self.multi_select).lower(),
+ rootUrl=source.navigation_tree_query['path']['query'],
+ name=self.name,
+ klass=self.klass,
+ title=self.title,
+ button_val=translate(
+ _(u'label_contenttree_browse', default=u'browse...'),
+ context=self.request
+ ),
+ )
class ContentTreeWidget(ContentTreeBase, AutocompleteSelectionWidget):
"""ContentTree widget that allows single selection.
"""
-
klass = u"contenttree-widget"
display_template = ViewPageTemplateFile('display_single.pt')
@@ -240,7 +251,6 @@ class ContentTreeWidget(ContentTreeBase, AutocompleteSelectionWidget):
class MultiContentTreeWidget(ContentTreeBase, AutocompleteMultiSelectionWidget):
"""ContentTree widget that allows multiple selection
"""
-
klass = u"contenttree-widget"
multi_select = True
display_template = ViewPageTemplateFile('display_multiple.pt')
Repository: plone.formwidget.contenttree
Branch: refs/heads/master
Date: 2014-10-20T18:58:34+02:00
Author: Robert Niederreiter (rnixx) <office at squarewave.at>
Commit: https://github.com/plone/plone.formwidget.contenttree/commit/bf0f6cba57ec4424d348d989da37da69f4398e9e
Implement ``renderForValue`` on ``ContentTreeBase`` in order to make single valued relation fields work.
Files changed:
M docs/HISTORY.txt
M plone/formwidget/contenttree/widget.py
diff --git a/docs/HISTORY.txt b/docs/HISTORY.txt
index e6fdbf8..394ddc5 100644
--- a/docs/HISTORY.txt
+++ b/docs/HISTORY.txt
@@ -4,6 +4,10 @@ Changelog
1.0.8 (unreleased)
------------------
+* Implement ``renderForValue`` on ``ContentTreeBase`` in order to make
+ single valued relation fields work.
+ [rnixx]
+
* Work around bizarro Diazo encoding bug
[gyst]
diff --git a/plone/formwidget/contenttree/widget.py b/plone/formwidget/contenttree/widget.py
index 25a34c2..be2ea62 100644
--- a/plone/formwidget/contenttree/widget.py
+++ b/plone/formwidget/contenttree/widget.py
@@ -216,6 +216,24 @@ def render(self):
else:
return self.input_template(self)
+ def renderForValue(self, value):
+ try:
+ return super(ContentTreeBase, self).renderForValue(value)
+ except LookupError, e:
+ if value != z3c.form.widget.SequenceWidget.noValueToken:
+ raise e
+ item = {
+ 'id': '%s-0' % self.id,
+ 'name': self.name,
+ 'value': '',
+ 'checked': 'checked',
+ }
+ template = getMultiAdapter(
+ (self.context, self.request, self.form, self.field, self),
+ IPageTemplate, name=self.mode + '_single'
+ )
+ return template(self, item)
+
def js_extra(self):
# Get bound source to extract path
source = self.bound_source
Repository: plone.formwidget.contenttree
Branch: refs/heads/master
Date: 2014-10-22T09:31:04+02:00
Author: Robert Niederreiter (rnixx) <office at squarewave.at>
Commit: https://github.com/plone/plone.formwidget.contenttree/commit/b4f6081701deb4cdfb82bba4667e6f672a6afb1c
resolve
Files changed:
M docs/HISTORY.txt
M setup.py
diff --git a/docs/HISTORY.txt b/docs/HISTORY.txt
index 394ddc5..49deaae 100644
--- a/docs/HISTORY.txt
+++ b/docs/HISTORY.txt
@@ -1,13 +1,16 @@
Changelog
=========
-1.0.8 (unreleased)
+1.0.9 (unreleased)
------------------
* Implement ``renderForValue`` on ``ContentTreeBase`` in order to make
single valued relation fields work.
[rnixx]
+1.0.8 (2014-10-21)
+------------------
+
* Work around bizarro Diazo encoding bug
[gyst]
diff --git a/setup.py b/setup.py
index 982e0bb..59f6159 100644
--- a/setup.py
+++ b/setup.py
@@ -1,7 +1,7 @@
from setuptools import setup, find_packages
import os
-version = '1.0.8.dev0'
+version = '1.0.9.dev0'
setup(name='plone.formwidget.contenttree',
version=version,
Repository: plone.formwidget.contenttree
Branch: refs/heads/master
Date: 2014-10-24T09:20:04+02:00
Author: Philip Bauer (pbauer) <bauer at starzel.de>
Commit: https://github.com/plone/plone.formwidget.contenttree/commit/8da81da2429b4251c6c1ee86ad36196f6a560dec
Merge pull request #17 from plone/rnixx_single_valued_relation_field
Rnixx single valued relation field
Files changed:
M docs/HISTORY.txt
M plone/formwidget/contenttree/jquery-contenttree/contenttree.js
M plone/formwidget/contenttree/widget.py
diff --git a/docs/HISTORY.txt b/docs/HISTORY.txt
index 2fce632..49deaae 100644
--- a/docs/HISTORY.txt
+++ b/docs/HISTORY.txt
@@ -4,8 +4,9 @@ Changelog
1.0.9 (unreleased)
------------------
-- Nothing changed yet.
-
+* Implement ``renderForValue`` on ``ContentTreeBase`` in order to make
+ single valued relation fields work.
+ [rnixx]
1.0.8 (2014-10-21)
------------------
diff --git a/plone/formwidget/contenttree/jquery-contenttree/contenttree.js b/plone/formwidget/contenttree/jquery-contenttree/contenttree.js
index 891187b..57fa2e3 100755
--- a/plone/formwidget/contenttree/jquery-contenttree/contenttree.js
+++ b/plone/formwidget/contenttree/jquery-contenttree/contenttree.js
@@ -3,8 +3,11 @@ if(jQuery) (function($){
$.extend($.fn, {
showDialog: function() {
- $(document.body).append($(document.createElement("div")).addClass("contenttreeWindowBlocker"))
- this[0].oldparent = $(this).parent()[0]; // store old parent element
+ $(document.body)
+ .append($(document.createElement("div"))
+ .addClass("contenttreeWindowBlocker"));
+ // store old parent element
+ this[0].oldparent = $(this).parent()[0];
$(".contenttreeWindowBlocker").before(this);
$(this).show();
$(this).width($(window).width() * 0.75);
@@ -14,16 +17,22 @@ if(jQuery) (function($){
'top': $(window).height() * 0.125
});
},
+
contentTreeAdd: function() {
var contenttree_window = (this).parents(".contenttreeWindow");
- var input_box = $('#'+ contenttree_window[0].id.replace(/-contenttree-window$/,"-widgets-query"));
+ var input_box = $('#'+ contenttree_window[0].id
+ .replace(/-contenttree-window$/,"-widgets-query"));
contenttree_window.find('.navTreeCurrentItem > a').each(function () {
- formwidget_autocomplete_new_value(input_box,$(this).attr('href'),$.trim($(this).text()));
+ formwidget_autocomplete_new_value(
+ input_box,
+ $(this).attr('href'),
+ $.trim($(this).text())
+ );
});
-
$(this).contentTreeCancel();
input_box.parents('.datagridwidget-cell').triggerHandler('change');
},
+
contentTreeCancel: function() {
$(".contenttreeWindowBlocker").remove();
var popup = $(this).parents(".contenttreeWindow");
@@ -31,46 +40,75 @@ if(jQuery) (function($){
$(popup[0].oldparent).append(popup);
popup[0].oldparent = null;
},
- contentTree: function(o, h) {
+ contentTree: function(o, h) {
// Defaults
- if(!o) var o = {};
- if(o.script == undefined) o.script = 'fetch';
+ if (!o) {
+ var o = {};
+ }
+ if (o.script == undefined) {
+ o.script = 'fetch';
+ }
- if(o.folderEvent == undefined) o.folderEvent = 'click';
- if(o.selectEvent == undefined) o.selectEvent = 'click';
+ if (o.folderEvent == undefined) {
+ o.folderEvent = 'click';
+ }
+ if (o.selectEvent == undefined) {
+ o.selectEvent = 'click';
+ }
- if(o.expandSpeed == undefined) o.expandSpeed = -1;
- if(o.collapseSpeed == undefined) o.collapseSpeed = -1;
+ if (o.expandSpeed == undefined) {
+ o.expandSpeed = -1;
+ }
+ if (o.collapseSpeed == undefined) {
+ o.collapseSpeed = -1;
+ }
- if(o.multiFolder == undefined) o.multiFolder = true;
- if(o.multiSelect == undefined) o.multiSelect = false;
+ if (o.multiFolder == undefined) {
+ o.multiFolder = true;
+ }
+ if (o.multiSelect == undefined) {
+ o.multiSelect = false;
+ }
function loadTree(c, t, r) {
$(c).addClass('wait');
- $.post(o.script, { href: t, rel: r}, function(data) {
+ $.post(o.script, {href: t, rel: r}, function(data) {
$(c).removeClass('wait').append(data);
- $(c).find('ul:hidden').slideDown({ duration: o.expandSpeed });
+ $(c).find('ul:hidden').slideDown({
+ duration: o.expandSpeed
+ });
bindTree(c);
});
}
function handleFolderEvent() {
var li = $(this).parent();
- if(li.hasClass('collapsed')) {
- if(!o.multiFolder) {
- li.parent().find('ul:visible').slideUp({ duration: o.collapseSpeed });
- li.parent().find('li.navTreeFolderish').removeClass('expanded').addClass('collapsed');
+ if (li.hasClass('collapsed')) {
+ if (!o.multiFolder) {
+ li.parent().find('ul:visible').slideUp({
+ duration: o.collapseSpeed
+ });
+ li.parent().find('li.navTreeFolderish')
+ .removeClass('expanded')
+ .addClass('collapsed');
}
- if(li.find('ul').length == 0)
- loadTree(li, escape($(this).attr('href')), escape($(this).attr('rel')));
+ if (li.find('ul').length == 0)
+ loadTree(
+ li,
+ escape($(this).attr('href')),
+ escape($(this).attr('rel'))
+ );
else
- li.find('ul:hidden').slideDown({ duration: o.expandSpeed });
-
+ li.find('ul:hidden').slideDown({
+ duration: o.expandSpeed
+ });
li.removeClass('collapsed').addClass('expanded');
} else {
- li.find('ul').slideUp({ duration: o.collapseSpeed });
+ li.find('ul').slideUp({
+ duration: o.collapseSpeed
+ });
li.removeClass('expanded').addClass('collapsed');
}
return false;
@@ -80,11 +118,15 @@ if(jQuery) (function($){
var li = $(this).parent();
var selected = true;
var root = $(this).parents('ul.navTree');
- if(!li.hasClass('navTreeCurrentItem')) {
- var multi_key = ((event.ctrlKey) || (navigator.userAgent.toLowerCase().indexOf('macintosh') != -1 && event.metaKey));
-
- if(!o.multiSelect || !multi_key) {
- root.find('li.navTreeCurrentItem').removeClass('navTreeCurrentItem');
+ if (!li.hasClass('navTreeCurrentItem')) {
+ var multi_key = (
+ (event.ctrlKey) ||
+ (navigator.userAgent.toLowerCase()
+ .indexOf('macintosh') != -1 && event.metaKey));
+
+ if (!o.multiSelect || !multi_key) {
+ root.find('li.navTreeCurrentItem')
+ .removeClass('navTreeCurrentItem');
}
li.addClass('navTreeCurrentItem');
@@ -100,15 +142,23 @@ if(jQuery) (function($){
function bindTree(t) {
$(t).find('li.navTreeFolderish a').unbind(o.folderEvent);
$(t).find('li.selectable a').unbind(o.selectEvent);
- $(t).find('li a').bind('click', function() { return false; });
- $(t).find('li.navTreeFolderish a').bind(o.folderEvent, handleFolderEvent);
- $(t).find('li.selectable a').bind(o.selectEvent, handleSelectEvent);
+ $(t).find('li a').bind('click', function() {
+ return false;
+ });
+ $(t).find('li.navTreeFolderish a').bind(
+ o.folderEvent,
+ handleFolderEvent
+ );
+ $(t).find('li.selectable a').bind(
+ o.selectEvent,
+ handleSelectEvent
+ );
}
if ($(this).children('ul.navTree').length <= 0) {
- $(this).each(function() {
- loadTree(this, o.rootUrl, 0);
- });
+ $(this).each(function() {
+ loadTree(this, o.rootUrl, 0);
+ });
}
}
diff --git a/plone/formwidget/contenttree/widget.py b/plone/formwidget/contenttree/widget.py
index 79ba05b..be2ea62 100644
--- a/plone/formwidget/contenttree/widget.py
+++ b/plone/formwidget/contenttree/widget.py
@@ -3,8 +3,11 @@
from Acquisition.interfaces import IAcquirer
from zope.browserpage.viewpagetemplatefile import ViewPageTemplateFile
-from zope.interface import implementsOnly, implementer
+from zope.interface import implementsOnly
+from zope.interface import implementer
from zope.component import getMultiAdapter
+from zope.pagetemplate.interfaces import IPageTemplate
+from zope.schema.vocabulary import SimpleTerm
from zope.i18n import translate
import z3c.form.interfaces
@@ -110,6 +113,52 @@ def __call__(self):
return self.fragment_template(children=children, level=int(level))
+ADDITIONAL_JS = """\
+$('#%(id)s-widgets-query').each(function() {
+ if ($(this).siblings('input.searchButton').length != 0) {
+ return;
+ }
+ var input = document.createElement('input');
+ $(input)
+ .attr({
+ 'type': 'button',
+ 'value': '%(button_val)s'
+ })
+ .addClass('searchButton')
+ .click(function () {
+ var parent = $(this).parents("*[id$='-autocomplete']");
+ var window = parent.siblings("*[id$='-contenttree-window']");
+ window.showDialog('%(url)s', %(expandSpeed)d);
+ $('#' + parent.attr('id').replace(
+ 'autocomplete', 'contenttree')).contentTree({
+ script: '%(url)s',
+ folderEvent: '%(folderEvent)s',
+ selectEvent: '%(selectEvent)s',
+ expandSpeed: %(expandSpeed)d,
+ collapseSpeed: %(collapseSpeed)s,
+ multiFolder: %(multiFolder)s,
+ multiSelect: %(multiSelect)s,
+ rootUrl: '%(rootUrl)s'
+ },
+ function(event, selected, data, title) {
+ });
+ })
+ .insertAfter($(this));
+});
+$('#%(id)s-contenttree-window').find('.contentTreeAdd')
+ .unbind('click')
+ .click(function () {
+ $(this).contentTreeAdd();
+});
+$('#%(id)s-contenttree-window').find('.contentTreeCancel')
+ .unbind('click')
+ .click(function () {
+ $(this).contentTreeCancel();
+});
+$('#%(id)s-widgets-query').after(" ");
+"""
+
+
class ContentTreeBase(Explicit):
implementsOnly(IContentTreeWidget)
@@ -167,72 +216,52 @@ def render(self):
else:
return self.input_template(self)
+ def renderForValue(self, value):
+ try:
+ return super(ContentTreeBase, self).renderForValue(value)
+ except LookupError, e:
+ if value != z3c.form.widget.SequenceWidget.noValueToken:
+ raise e
+ item = {
+ 'id': '%s-0' % self.id,
+ 'name': self.name,
+ 'value': '',
+ 'checked': 'checked',
+ }
+ template = getMultiAdapter(
+ (self.context, self.request, self.form, self.field, self),
+ IPageTemplate, name=self.mode + '_single'
+ )
+ return template(self, item)
+
def js_extra(self):
# Get bound source to extract path
source = self.bound_source
form_url = self.request.getURL()
url = "%s/++widget++%s/@@contenttree-fetch" % (form_url, self.name)
-
- return """\
-
- $('#%(id)s-widgets-query').each(function() {
- if($(this).siblings('input.searchButton').length != 0) { return; }
- $(document.createElement('input'))
- .attr({
- 'type': 'button',
- 'value': '%(button_val)s'
- })
- .addClass('searchButton')
- .click( function () {
- var parent = $(this).parents("*[id$='-autocomplete']")
- var window = parent.siblings("*[id$='-contenttree-window']")
- window.showDialog('%(url)s', %(expandSpeed)d);
- $('#' + parent.attr('id').replace('autocomplete', 'contenttree')).contentTree(
- {
- script: '%(url)s',
- folderEvent: '%(folderEvent)s',
- selectEvent: '%(selectEvent)s',
- expandSpeed: %(expandSpeed)d,
- collapseSpeed: %(collapseSpeed)s,
- multiFolder: %(multiFolder)s,
- multiSelect: %(multiSelect)s,
- rootUrl: '%(rootUrl)s'
- },
- function(event, selected, data, title) {
- // alert(event + ', ' + selected + ', ' + data + ', ' + title);
- }
- );
- }).insertAfter($(this));
- });
- $('#%(id)s-contenttree-window').find('.contentTreeAdd').unbind('click').click(function () {
- $(this).contentTreeAdd();
- });
- $('#%(id)s-contenttree-window').find('.contentTreeCancel').unbind('click').click(function () {
- $(this).contentTreeCancel();
- });
- $('#%(id)s-widgets-query').after(" ");
-
- """ % dict(url=url,
- id=self.name.replace('.', '-'),
- folderEvent=self.folderEvent,
- selectEvent=self.selectEvent,
- expandSpeed=self.expandSpeed,
- collapseSpeed=self.collapseSpeed,
- multiFolder=str(self.multiFolder).lower(),
- multiSelect=str(self.multi_select).lower(),
- rootUrl=source.navigation_tree_query['path']['query'],
- name=self.name,
- klass=self.klass,
- title=self.title,
- button_val=translate(
- _(u'label_contenttree_browse', default=u'browse...'),
- context=self.request))
+ return ADDITIONAL_JS % dict(
+ url=url,
+ id=self.name.replace('.', '-'),
+ folderEvent=self.folderEvent,
+ selectEvent=self.selectEvent,
+ expandSpeed=self.expandSpeed,
+ collapseSpeed=self.collapseSpeed,
+ multiFolder=str(self.multiFolder).lower(),
+ multiSelect=str(self.multi_select).lower(),
+ rootUrl=source.navigation_tree_query['path']['query'],
+ name=self.name,
+ klass=self.klass,
+ title=self.title,
+ button_val=translate(
+ _(u'label_contenttree_browse', default=u'browse...'),
+ context=self.request
+ ),
+ )
class ContentTreeWidget(ContentTreeBase, AutocompleteSelectionWidget):
"""ContentTree widget that allows single selection.
"""
-
klass = u"contenttree-widget"
display_template = ViewPageTemplateFile('display_single.pt')
@@ -240,7 +269,6 @@ class ContentTreeWidget(ContentTreeBase, AutocompleteSelectionWidget):
class MultiContentTreeWidget(ContentTreeBase, AutocompleteMultiSelectionWidget):
"""ContentTree widget that allows multiple selection
"""
-
klass = u"contenttree-widget"
multi_select = True
display_template = ViewPageTemplateFile('display_multiple.pt')
-------------------------------------------------------------------------------
More information about the Testbot
mailing list