@@ -17,8 +17,8 @@ def __init__(self, handler, context, label=None, visible=True, enabled=True,
1717 self .href = config .get ('href' , None )
1818 self .config = config
1919 self .handler = handler
20- self .visible = visible
21- self .enabled = enabled
20+ self ._visible = visible
21+ self ._enabled = enabled
2222 self .template = template or self .default_template
2323 self .context : RequestContext = context
2424 self .disable_on_click = True
@@ -56,29 +56,42 @@ def html_attrs(self):
5656 if self .disable_on_edit and "aeb-disable_on_edit" not in css_class :
5757 css_class += " aeb-disable_on_edit"
5858
59- # enabled
6059 css_class = css_class .replace ("disabled" , "" )
61- if not self .enabled :
62- css_class += " disabled "
63- elif callable ( self . enabled ) and not self . enabled ( self ) :
60+ if self .enabled :
61+ css_class += " enabled "
62+ else :
6463 css_class += " disabled"
6564
6665 attrs ['class' ] = css_class
6766 return attrs
6867
6968 def can_render (self ):
70- return self .authorized () and self .url and self .is_visible ()
69+ return self .authorized () and self .url and self .visible
70+
71+ @property
72+ def enabled (self ):
73+ if not self .context : # pragma: no cover
74+ raise ValueError ("Button not initialised." )
75+ if callable (self ._enabled ):
76+ try :
77+ return self ._enabled (self )
78+ except Exception : # pragma: no cover
79+ raise
80+ return False
7181
72- def is_visible (self ):
82+ return self ._enabled
83+
84+ @property
85+ def visible (self ):
7386 if not self .context : # pragma: no cover
7487 raise ValueError ("Button not initialised." )
75- if callable (self .visible ):
88+ if callable (self ._visible ):
7689 try :
77- return self .visible (self )
90+ return self ._visible (self )
7891 except Exception : # pragma: no cover
7992 return False
8093
81- return self .visible
94+ return self ._visible
8295
8396 @property
8497 def request (self ):
@@ -103,6 +116,8 @@ def authorized(self):
103116
104117 @property
105118 def url (self ):
119+ if not self .enabled :
120+ return '#'
106121 func = self .config .get ('get_url' , self .get_url )
107122 return func (self .context )
108123
0 commit comments