diff --git a/gluon/html.py b/gluon/html.py
index 1806f427..e677d9bb 100644
--- a/gluon/html.py
+++ b/gluon/html.py
@@ -1482,8 +1482,11 @@ class A(DIV):
def xml(self):
if not self.components and self['_href']:
self.append(self['_href'])
- if not self['_disable_with']:
- self['_data-w2p_disable_with'] = 'default'
+ disable_needed = ['callback', 'cid', 'delete', 'component', 'target']
+ disable_needed = any((self[attr] for attr in disable_needed))
+ if disable_needed:
+ self['_data-w2p_disable_with'] = self['_disable_with'] or 'default'
+ self['_disable_with'] = None
if self['callback'] and not self['_id']:
self['_id'] = web2py_uuid()
if self['delete']:
@@ -2518,7 +2521,7 @@ def test():
>>> from validators import *
>>> print DIV(A('click me', _href=URL(a='a', c='b', f='c')), BR(), HR(), DIV(SPAN("World"), _class='unknown')).xml()
-
+
>>> print DIV(UL("doc","cat","mouse")).xml()
>>> print DIV(UL("doc", LI("cat", _class='feline'), 18)).xml()
diff --git a/gluon/tests/test_html.py b/gluon/tests/test_html.py
index 8272adbd..a5668da3 100644
--- a/gluon/tests/test_html.py
+++ b/gluon/tests/test_html.py
@@ -69,8 +69,50 @@ class TestBareHelpers(unittest.TestCase):
'')
def testA(self):
- self.assertEqual(A('<>', _a='1', _b='2').xml(),
- '<>')
+ self.assertEqual(
+ A('<>', _a='1', _b='2').xml(),
+ '<>'
+ )
+ self.assertEqual(
+ A('a', cid='b').xml(),
+ 'a'
+ )
+ self.assertEqual(
+ A('a', callback='b', _id='c').xml(),
+ 'a'
+ )
+ self.assertEqual(
+ A('a', delete='tr').xml(),
+ 'a'
+ )
+ self.assertEqual(
+ A('a', _id='b', target='').xml(),
+ 'a'
+ )
+ self.assertEqual(
+ A('a', component='b').xml(),
+ 'a'
+ )
+ self.assertEqual(
+ A('a', _id='b', callback='c', noconfirm=True).xml(),
+ 'a'
+ )
+ self.assertEqual(
+ A('a', cid='b').xml(),
+ 'a'
+ )
+ self.assertEqual(
+ A('a', cid='b', _disable_with='processing...').xml(),
+ 'a'
+ )
+ self.assertEqual(
+ A('a', callback='b', delete='tr', noconfirm=True, _id='c').xml(),
+ 'a'
+ )
+ self.assertEqual(
+ A('a', callback='b', delete='tr', confirm='Are you sure?', _id='c').xml(),
+ 'a'
+ )
def testB(self):
self.assertEqual(B('<>', _a='1', _b='2').xml(),
@@ -237,7 +279,7 @@ class TestBareHelpers(unittest.TestCase):
class TestData(unittest.TestCase):
def testAdata(self):
- self.assertEqual(A('<>', data=dict(abc='', cde='standard'), _a='1', _b='2').xml(),'<>')
+ self.assertEqual(A('<>', data=dict(abc='', cde='standard'), _a='1', _b='2').xml(),'<>')
if __name__ == '__main__':