Let mobile form declare if/how to auto-focus a field
and for mobile ordering, auto-focus the "units" field when editing a row
This commit is contained in:
parent
6b3e645c12
commit
634a93061b
|
@ -330,7 +330,7 @@ class Form(object):
|
||||||
|
|
||||||
def __init__(self, fields=None, schema=None, request=None, mobile=False, readonly=False, readonly_fields=[],
|
def __init__(self, fields=None, schema=None, request=None, mobile=False, readonly=False, readonly_fields=[],
|
||||||
model_instance=None, model_class=None, nodes={}, enums={}, labels={}, renderers=None,
|
model_instance=None, model_class=None, nodes={}, enums={}, labels={}, renderers=None,
|
||||||
hidden={}, widgets={}, defaults={}, validators={}, required={}, helptext={},
|
hidden={}, widgets={}, defaults={}, validators={}, required={}, helptext={}, focus_spec=None,
|
||||||
action_url=None, cancel_url=None):
|
action_url=None, cancel_url=None):
|
||||||
|
|
||||||
self.fields = None
|
self.fields = None
|
||||||
|
@ -362,6 +362,7 @@ class Form(object):
|
||||||
self.validators = validators or {}
|
self.validators = validators or {}
|
||||||
self.required = required or {}
|
self.required = required or {}
|
||||||
self.helptext = helptext or {}
|
self.helptext = helptext or {}
|
||||||
|
self.focus_spec = focus_spec
|
||||||
self.action_url = action_url
|
self.action_url = action_url
|
||||||
self.cancel_url = cancel_url
|
self.cancel_url = cancel_url
|
||||||
|
|
||||||
|
@ -717,6 +718,8 @@ class Form(object):
|
||||||
# TODO: deprecate / remove the latter option here
|
# TODO: deprecate / remove the latter option here
|
||||||
if self.auto_disable_save or self.auto_disable:
|
if self.auto_disable_save or self.auto_disable:
|
||||||
context['form_kwargs']['class_'] = 'autodisable'
|
context['form_kwargs']['class_'] = 'autodisable'
|
||||||
|
if self.focus_spec:
|
||||||
|
context['form_kwargs']['data-focus'] = self.focus_spec
|
||||||
context['request'] = self.request
|
context['request'] = self.request
|
||||||
context['readonly_fields'] = self.readonly_fields
|
context['readonly_fields'] = self.readonly_fields
|
||||||
context['render_field_readonly'] = self.render_field_readonly
|
context['render_field_readonly'] = self.render_field_readonly
|
||||||
|
|
|
@ -50,7 +50,8 @@ $(document).on('autocompleteitemselected', function(event, uuid) {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Automatically set focus to certain fields, on various pages
|
* Automatically set focus to certain fields, on various pages
|
||||||
* TODO: this should accept selector params instead of hard-coding..?
|
* TODO: should be letting the form declare a "focus spec" instead, to avoid
|
||||||
|
* hard-coding these field names below!
|
||||||
*/
|
*/
|
||||||
function setfocus() {
|
function setfocus() {
|
||||||
var el = null;
|
var el = null;
|
||||||
|
@ -73,6 +74,21 @@ $(document).on('pageshow', function() {
|
||||||
|
|
||||||
setfocus();
|
setfocus();
|
||||||
|
|
||||||
|
// if current page has form, which has declared a "focus spec", then try to
|
||||||
|
// set focus accordingly
|
||||||
|
var form = $('.ui-page-active form');
|
||||||
|
if (form) {
|
||||||
|
var spec = form.data('focus');
|
||||||
|
if (spec) {
|
||||||
|
var input = $(spec);
|
||||||
|
if (input) {
|
||||||
|
if (input.is(':visible')) {
|
||||||
|
input.focus();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -5,15 +5,7 @@
|
||||||
|
|
||||||
<%def name="page_title()">${h.link_to(index_title, index_url)} » ${h.link_to(parent_title, parent_url)} » ${h.link_to(instance_title, instance_url)} » Edit</%def>
|
<%def name="page_title()">${h.link_to(index_title, index_url)} » ${h.link_to(parent_title, parent_url)} » ${h.link_to(instance_title, instance_url)} » Edit</%def>
|
||||||
|
|
||||||
## TODO: this should not be necessary, correct?
|
|
||||||
## <%def name="buttons()">
|
|
||||||
## <br />
|
|
||||||
## ${h.submit('create', form.update_label)}
|
|
||||||
## ${h.link_to("Cancel", form.cancel_url, class_='ui-btn ui-corner-all')}
|
|
||||||
## </%def>
|
|
||||||
|
|
||||||
<div class="form-wrapper">
|
<div class="form-wrapper">
|
||||||
## ${form.render(buttons=capture(self.buttons))|n}
|
|
||||||
${form.render()|n}
|
${form.render()|n}
|
||||||
</div><!-- form-wrapper -->
|
</div><!-- form-wrapper -->
|
||||||
|
|
||||||
|
|
|
@ -321,6 +321,12 @@ class OrderingBatchView(PurchasingBatchView):
|
||||||
data['mode_title'] = self.enum.PURCHASE_BATCH_MODE[mode].capitalize()
|
data['mode_title'] = self.enum.PURCHASE_BATCH_MODE[mode].capitalize()
|
||||||
return self.render_to_response('create', data, mobile=True)
|
return self.render_to_response('create', data, mobile=True)
|
||||||
|
|
||||||
|
def configure_mobile_row_form(self, f):
|
||||||
|
super(OrderingBatchView, self).configure_mobile_row_form(f)
|
||||||
|
if self.editing:
|
||||||
|
# TODO: probably should take `allow_cases` into account here...
|
||||||
|
f.focus_spec = '[name="units_ordered"]'
|
||||||
|
|
||||||
def download_excel(self):
|
def download_excel(self):
|
||||||
"""
|
"""
|
||||||
Download ordering batch as Excel spreadsheet.
|
Download ordering batch as Excel spreadsheet.
|
||||||
|
|
Loading…
Reference in a new issue