# HG changeset patch # User Julien Cristau # Date 1447932345 -3600 # Node ID 011730a4af734a4e7a38cc352c2bff3c0324a715 # Parent ea1d92b677b5c971ea12490dcc9324654a80491f [web] remove next_tabindex() It's hard to see it work reliably in view of multiple server processes. If something like that is needed it should probably be built on the client (js) side. diff -r ea1d92b677b5 -r 011730a4af73 cubicweb/web/data/cubicweb.edition.js --- a/cubicweb/web/data/cubicweb.edition.js Wed Nov 23 17:19:51 2016 +0100 +++ b/cubicweb/web/data/cubicweb.edition.js Thu Nov 19 12:25:45 2015 +0100 @@ -9,7 +9,7 @@ //============= Eproperty form functions =====================================// /** - * .. function:: setPropValueWidget(varname, tabindex) + * .. function:: setPropValueWidget(varname) * * called on CWProperty key selection: * - get the selected value @@ -17,16 +17,15 @@ * - fill associated div with the returned html * * * `varname`, the name of the variable as used in the original creation form - * * `tabindex`, the tabindex that should be set on the widget */ -function setPropValueWidget(varname, tabindex) { +function setPropValueWidget(varname) { var key = firstSelected(document.getElementById('pkey-subject:' + varname)); if (key) { var args = { fname: 'prop_widget', pageid: pageid, - arg: $.map([key.value, varname, tabindex], JSON.stringify) + arg: $.map([key.value, varname], JSON.stringify) }; cw.jqNode('div:value-subject:' + varname).loadxhtml(AJAX_BASE_URL, args, 'post'); } diff -r ea1d92b677b5 -r 011730a4af73 cubicweb/web/formwidgets.py --- a/cubicweb/web/formwidgets.py Wed Nov 23 17:19:51 2016 +0100 +++ b/cubicweb/web/formwidgets.py Thu Nov 19 12:25:45 2015 +0100 @@ -125,9 +125,6 @@ :attr:`setdomid` flag telling if HTML DOM identifier should be set on input. - :attr:`settabindex` - flag telling if HTML tabindex attribute of inputs should be set. - :attr:`suffix` string to use a suffix when generating input, to ease usage as a sub-widgets (eg widget used by another widget) @@ -157,21 +154,17 @@ needs_js = () needs_css = () setdomid = True - settabindex = True suffix = None # does this widget expect a vocabulary vocabulary_widget = False - def __init__(self, attrs=None, setdomid=None, settabindex=None, suffix=None): + def __init__(self, attrs=None, setdomid=None, suffix=None): if attrs is None: attrs = {} self.attrs = attrs if setdomid is not None: # override class's default value self.setdomid = setdomid - if settabindex is not None: - # override class's default value - self.settabindex = settabindex if suffix is not None: self.suffix = suffix @@ -202,14 +195,11 @@ def attributes(self, form, field): """Return HTML attributes for the widget, automatically setting DOM - identifier and tabindex when desired (see :attr:`setdomid` and - :attr:`settabindex` attributes) + identifier when desired (see :attr:`setdomid` attribute) """ attrs = dict(self.attrs) if self.setdomid: attrs['id'] = field.dom_id(form, self.suffix) - if self.settabindex and 'tabindex' not in attrs: - attrs['tabindex'] = form._cw.next_tabindex() if 'placeholder' in attrs: attrs['placeholder'] = form._cw._(attrs['placeholder']) return attrs @@ -386,7 +376,6 @@ """ type = 'hidden' setdomid = False # by default, don't set id attribute on hidden input - settabindex = False class ButtonInput(Input): @@ -996,8 +985,6 @@ attrs = dict(self.attrs) if self.setdomid: attrs['id'] = field.dom_id(form) - if self.settabindex and 'tabindex' not in attrs: - attrs['tabindex'] = req.next_tabindex() # ensure something is rendered inputs = [u'
', req._('i18n_bookmark_url_path'), @@ -1008,8 +995,6 @@ u''] if self.setdomid: attrs['id'] = field.dom_id(form, 'fqs') - if self.settabindex: - attrs['tabindex'] = req.next_tabindex() attrs.setdefault('cols', 60) attrs.setdefault('onkeyup', 'autogrow(this)') inputs += [tags.textarea(fqs, name=fqsqname, **attrs), @@ -1057,9 +1042,9 @@ css_class = 'validateButton' def __init__(self, label=stdmsgs.BUTTON_OK, attrs=None, - setdomid=None, settabindex=None, + setdomid=None, name='', value='', onclick=None, cwaction=None): - super(Button, self).__init__(attrs, setdomid, settabindex) + super(Button, self).__init__(attrs, setdomid) if isinstance(label, tuple): self.label = label[0] self.icon = label[1] @@ -1085,8 +1070,6 @@ attrs['name'] = self.name if self.setdomid: attrs['id'] = self.name - if self.settabindex and 'tabindex' not in attrs: - attrs['tabindex'] = form._cw.next_tabindex() if self.icon: img = tags.img(src=form._cw.uiprops[self.icon], alt=self.icon) else: diff -r ea1d92b677b5 -r 011730a4af73 cubicweb/web/request.py --- a/cubicweb/web/request.py Wed Nov 23 17:19:51 2016 +0100 +++ b/cubicweb/web/request.py Thu Nov 19 12:25:45 2015 +0100 @@ -215,13 +215,6 @@ """ return self.set_varmaker() - def next_tabindex(self): - nextfunc = self.get_page_data('nexttabfunc') - if nextfunc is None: - nextfunc = Counter(1) - self.set_page_data('nexttabfunc', nextfunc) - return nextfunc() - def set_varmaker(self): varmaker = self.get_page_data('rql_varmaker') if varmaker is None: diff -r ea1d92b677b5 -r 011730a4af73 cubicweb/web/test/unittest_form.py --- a/cubicweb/web/test/unittest_form.py Wed Nov 23 17:19:51 2016 +0100 +++ b/cubicweb/web/test/unittest_form.py Thu Nov 19 12:25:45 2015 +0100 @@ -200,20 +200,20 @@ def test_richtextfield_1(self): with self.admin_access.web_request() as req: req.use_fckeditor = lambda: False - self._test_richtextfield(req, ''' ''' + ('\n' if HAS_TAL else '') + ''' -''') +''') def test_richtextfield_2(self): with self.admin_access.web_request() as req: req.use_fckeditor = lambda: True - self._test_richtextfield(req, '') + self._test_richtextfield(req, '') def test_filefield(self): @@ -229,11 +229,11 @@ data=Binary(b'new widgets system')) form = FFForm(req, redirect_path='perdu.com', entity=file) self.assertMultiLineEqual(self._render_entity_field(req, 'data', form), - ''' + ''' show advanced fields
@@ -253,17 +253,17 @@ data=Binary(b'new widgets system')) form = EFFForm(req, redirect_path='perdu.com', entity=file) self.assertMultiLineEqual(self._render_entity_field(req, 'data', form), - ''' + ''' show advanced fields
detach attached file

You can either submit a new file using the browse button above, or choose to remove already uploaded file by checking the "detach attached file" check-box, or edit file content online with the widget below.

-''' % {'eid': file.eid}) +''' % {'eid': file.eid}) def _modified_tzdatenaiss(self, eid, datestr, timestr): ctx = {'tzdatenaiss-subjectdate:%d' % eid: datestr, @@ -297,9 +297,9 @@ with self.admin_access.web_request() as req: form = PFForm(req, redirect_path='perdu.com', entity=req.user) self.assertMultiLineEqual(self._render_entity_field(req, 'upassword', form), - ''' + '''
- +   confirm password''' % {'eid': req.user.eid}) diff -r ea1d92b677b5 -r 011730a4af73 cubicweb/web/test/unittest_formwidgets.py --- a/cubicweb/web/test/unittest_formwidgets.py Wed Nov 23 17:19:51 2016 +0100 +++ b/cubicweb/web/test/unittest_formwidgets.py Thu Nov 19 12:25:45 2015 +0100 @@ -38,7 +38,7 @@ def test_bitselect_widget(self): field = formfields.guess_field(self.schema['CWAttribute'], self.schema['ordernum']) field.choices = [('un', '1',), ('deux', '2',)] - widget = formwidgets.BitSelect(settabindex=False) + widget = formwidgets.BitSelect() req = fake.FakeRequest(form={'ordernum-subject:A': ['1', '2']}) form = mock(_cw=req, formvalues={}, edited_entity=mock(eid='A'), form_previous_values=()) @@ -62,7 +62,7 @@ field = form.field_by_name('bool') widget = field.widget self.assertMultiLineEqual(widget._render(form, field, None), - '') diff -r ea1d92b677b5 -r 011730a4af73 cubicweb/web/test/unittest_reledit.py --- a/cubicweb/web/test/unittest_reledit.py Wed Nov 23 17:19:51 2016 +0100 +++ b/cubicweb/web/test/unittest_reledit.py Thu Nov 19 12:25:45 2015 +0100 @@ -73,13 +73,13 @@
- +
- - + +
@@ -108,23 +108,23 @@
- +
- +
- +
- - + +
@@ -152,7 +152,7 @@
- @@ -160,8 +160,8 @@
- - + +
diff -r ea1d92b677b5 -r 011730a4af73 cubicweb/web/views/autoform.py --- a/cubicweb/web/views/autoform.py Wed Nov 23 17:19:51 2016 +0100 +++ b/cubicweb/web/views/autoform.py Thu Nov 19 12:25:45 2015 +0100 @@ -565,9 +565,9 @@ w(u'') w(u'' % eid) w(u'') - w(u' + ''' % (not self.cw_propval('visible') and 'hidden' or '', - req.build_url('view'), xml_escape(rql), req._('full text or RQL query'), req.next_tabindex())) + req.build_url('view'), xml_escape(rql), req._('full text or RQL query'))) if req.search_state[0] != 'normal': self.w(u'' % ':'.join(req.search_state[1])) diff -r ea1d92b677b5 -r 011730a4af73 cubicweb/web/views/boxes.py --- a/cubicweb/web/views/boxes.py Wed Nov 23 17:19:51 2016 +0100 +++ b/cubicweb/web/views/boxes.py Thu Nov 19 12:25:45 2015 +0100 @@ -138,11 +138,11 @@ order = 0 formdef = u"""
- + - +
""" @@ -155,13 +155,10 @@ rql = self._cw.form.get('rql', '') else: rql = '' - tabidx1 = self._cw.next_tabindex() - tabidx2 = self._cw.next_tabindex() w(self.formdef % {'action': self._cw.build_url('view'), 'value': xml_escape(rql), - 'id': self.cw_extra_kwargs.get('domid', 'tsearch'), - 'tabindex1': tabidx1, - 'tabindex2': tabidx2}) + 'id': self.cw_extra_kwargs.get('domid', 'tsearch') + }) # boxes disabled by default ################################################### diff -r ea1d92b677b5 -r 011730a4af73 cubicweb/web/views/cwproperties.py --- a/cubicweb/web/views/cwproperties.py Wed Nov 23 17:19:51 2016 +0100 +++ b/cubicweb/web/views/cwproperties.py Thu Nov 19 12:25:45 2015 +0100 @@ -315,9 +315,8 @@ def render(self, form, renderer): wdg = self.get_widget(form) # pylint: disable=E1101 - wdg.attrs['tabindex'] = form._cw.next_tabindex() - wdg.attrs['onchange'] = "javascript:setPropValueWidget('%s', %s)" % ( - form.edited_entity.eid, form._cw.next_tabindex()) + wdg.attrs['onchange'] = "javascript:setPropValueWidget('%s')" % ( + form.edited_entity.eid) return wdg.render(form, self, renderer) def vocabulary(self, form): @@ -335,10 +334,8 @@ """ widget = PlaceHolderWidget - def render(self, form, renderer=None, tabindex=None): + def render(self, form, renderer=None): wdg = self.get_widget(form) - if tabindex is not None: - wdg.attrs['tabindex'] = tabindex return wdg.render(form, self, renderer) def form_init(self, form): @@ -422,7 +419,7 @@ @ajaxfunc(output_type='xhtml') -def prop_widget(self, propkey, varname, tabindex=None): +def prop_widget(self, propkey, varname): """specific method for CWProperty handling""" entity = self._cw.vreg['etypes'].etype_class('CWProperty')(self._cw) entity.eid = varname @@ -431,7 +428,7 @@ form.build_context() vfield = form.field_by_name('value', 'subject') renderer = formrenderers.FormRenderer(self._cw) - return vfield.render(form, renderer, tabindex=tabindex) \ + return vfield.render(form, renderer) \ + renderer.render_help(form, vfield) _afs = uicfg.autoform_section diff -r ea1d92b677b5 -r 011730a4af73 doc/book/devweb/edition/dissection.rst --- a/doc/book/devweb/edition/dissection.rst Wed Nov 23 17:19:51 2016 +0100 +++ b/doc/book/devweb/edition/dissection.rst Thu Nov 19 12:25:45 2015 +0100 @@ -107,14 +107,14 @@ + type="text" value="let us write more doc" /> ... (description field omitted) ... - @@ -126,7 +126,7 @@ - @@ -134,7 +134,7 @@ - @@ -180,7 +180,7 @@    -