add jquery dateinput to dateWidget and dateRangeWidget

This commit is contained in:
Thomas Clement Mogensen 2013-04-25 13:44:45 +02:00
parent e1ce2ee6b9
commit 313e28101d
3 changed files with 58 additions and 7 deletions

View File

@ -10,7 +10,8 @@
sortable_indexes config/sortable_indexes;
addindexselected python:request.has_key('addindex') and request.addindex != '';
addoperatorselected python:request.has_key('addoperator') and request.addoperator != ''">
<script tal:replace="structure widget/js"/>
<tal:counter tal:define="dummy python:request.set('querystringwidgetcounter', 0)"/>
<tal:row repeat="row rows">
<div class="criteria"
@ -59,17 +60,17 @@
</dd>
</dl>
<input class="querywidget queryvalue dateWidget"
<input class="querywidget queryvalue dateWidget date"
autocomplete="off" type="text" name="form.widgets.query.v:records"
tal:attributes="name python:str(fieldName)+'.v:records'; value python:row['v']"
tal:condition="python:indexes[row.i]['operators'][row.o]['widget'] == 'DateWidget'"/>
<div class="querywidget queryvalue dateRangeWidget"
tal:condition="python:indexes[row.i]['operators'][row.o]['widget'] == 'DateRangeWidget'">
<input autocomplete="off" type="text" name="form.widgets.query.v:records:list"
<input class="date" autocomplete="off" type="text" name="form.widgets.query.v:records:list"
tal:attributes="name python:str(fieldName)+'.v:records:list'; value python:row['v'][0]"/>
<span> and </span>
<input autocomplete="off" type="text" name="form.widgets.query.v:records:list"
<input class="date" autocomplete="off" type="text" name="form.widgets.query.v:records:list"
tal:attributes="name python:str(fieldName)+'.v:records:list'; value python:row['v'][1]"/>
</div>
@ -140,6 +141,7 @@
<div class="querywidget queryvalue dateWidget"
tal:condition="python:indexes[request.form['addindex']]['operators'][request.form['addoperator']]['widget'] == 'DateWidget'">
<input autocomplete="off" type="text" class="queryvalue" tal:attributes="name python:str(fieldName)+'.v:records';" name="form.widgets.query.v:records" />
</div>
<div class="querywidget queryvalue dateRangeWidget"

View File

@ -74,7 +74,7 @@
'type': 'text',
'name': fname + '.v:records'
})
.addClass('querywidget queryvalue dateWidget');
.addClass('querywidget queryvalue dateWidget date');
case 'DateRangeWidget':
return $(document.createElement('div'))
.addClass('querywidget dateRangeWidget')
@ -84,7 +84,7 @@
'type': 'text',
'name': fname + '.v:records:list'
})
.addClass('queryvalue')
.addClass('queryvalue date')
)
.append($(document.createElement('span'))
.html(' and ')
@ -95,7 +95,7 @@
'type': 'text',
'name': fname + '.v:records:list'
})
.addClass('queryvalue')
.addClass('queryvalue date')
);
case 'RelativeDateWidget':
return $(document.createElement('div'))
@ -184,6 +184,21 @@
}
};
$.querywidget.updateWidget = function (node) {
if (typeof(node) === "undefined") {
node = $('.querywidget');
}
if ($().dateinput) {
$(node).parents('.criteria').find('.date').dateinput({change: function() { $.querywidget.updateSearch();}, firstDay: 1,selectors: true, trigger: false, yearRange: [-10, 10]}).unbind('change')
.bind('onShow', function (event) {
var trigger_offset = $(this).next().offset();
$(this).data('dateinput').getCalendar().offset(
{top: trigger_offset.top+20, left: trigger_offset.left}
);
});
}
};
$.querywidget.updateSearch = function () {
var context_url = (function() {
var baseUrl, pieces;
@ -259,6 +274,7 @@
// Init
$.querywidget.init();
// We need two keep two fields for each sorting field ('#sort_on',
// '#sort_reversed'). The query results preview that calls
// '@@querybuilder_html_results' in plone.app.querystring expects a
@ -343,6 +359,8 @@
$(this).children('input').val(), fname));
});
$.querywidget.updateSearch();
$.querywidget.updateWidget();
});
});
@ -367,6 +385,7 @@
var querywidget = $(this).parent(".criteria").children('.querywidget');
if ((widget !== $.querywidget.getCurrentWidget(querywidget)) || (widget === 'MultipleSelectionWidget')) {
querywidget.replaceWith($.querywidget.createWidget(widget, index, fname));
$.querywidget.updateWidget($(this).parent(".criteria").children('.querywidget'));
}
$.querywidget.updateSearch();
});
@ -379,8 +398,10 @@
var querywidget = $(this).parent().children('.querywidget');
if (widget !== $.querywidget.getCurrentWidget(querywidget)) {
querywidget.replaceWith($.querywidget.createWidget(widget, index, fname));
$.querywidget.updateWidget($(this).parent().children('.querywidget'));
}
$.querywidget.updateSearch();
});
$('#sort_on,#sort_order').live('change', function () {

View File

@ -16,6 +16,7 @@ from plone.registry.interfaces import IRegistry
class QueryStringWidget(Widget):
implements(IQueryStringWidget)
calendar_type = 'gregorian'
klass = u'querystring-widget'
input_template = ViewPageTemplateFile('input.pt')
@ -54,6 +55,33 @@ class QueryStringWidget(Widget):
name='display_query_results')(**options)
def js(self):
language = getattr(self.request, 'LANGUAGE', 'en')
calendar = self.request.locale.dates.calendars[self.calendar_type]
localize = 'jQuery.tools.dateinput.localize("' + language + '", {'
localize += 'months: "%s",' % ','.join(calendar.getMonthNames())
localize += 'shortMonths: "%s",' % ','.join(calendar.getMonthAbbreviations())
# calendar tool's number of days is off by one from jquery tools'
localize += 'days: "%s",' % ','.join(
[calendar.getDayNames()[6]] + calendar.getDayNames()[:6])
localize += 'shortDays: "%s"' % ','.join(
[calendar.getDayAbbreviations()[6]] +
calendar.getDayAbbreviations()[:6])
localize += '});'
defaultlang = 'jQuery.tools.dateinput.conf.lang = "%s";' % language
return '''
<script type="text/javascript">
jQuery(document).ready(function() {
if (jQuery().dateinput) {
%(localize)s
%(defaultlang)s
}
});
</script>''' % dict(defaultlang=defaultlang, localize=localize)
@implementer(z3c.form.interfaces.IFieldWidget)
def QueryStringFieldWidget(field, request):
return FieldWidget(field, QueryStringWidget(request))