lib/spiderfw/templates/blocks/attr_if.rb in spiderfw-0.5.7 vs lib/spiderfw/templates/blocks/attr_if.rb in spiderfw-0.5.9
- old
+ new
@@ -4,20 +4,26 @@
# *sp:attr-if*
# Adds an attribute if a condition holds
# Example:
# <div sp:attr-if="@my_condition,class,coolDiv"></div>
+ # The attribute's value can be a scene variable, but not an expression: so
+ # <div sp:attr-if"@my_condition,attr_name,@attr_value" /> is valid, but
+ # <div sp:attr-if"@my_condition,attr_name,@attr_value_start+@attr_value_end" /> is not
class AttrIf < Block
def compile(options={})
init = ""
- attr_if = @el.attributes['sp:attr-if']
+ attr_if = @el.get_attribute('sp:attr-if')
@el.remove_attribute('sp:attr-if')
@el.set_attribute("tmp-attr-if", attr_if)
compiled = Spider::TemplateBlocks.parse_element(@el, @allowed_blocks, @template).compile(options)
c, init = compiled.run_code, compiled.init_code
cond, name, val = attr_if.split(',')
+ if val && val.strip[0].chr == '@'
+ val = "'+#{var_to_scene(val)}+'"
+ end
cond = vars_to_scene(cond)
full_attr = val ? "#{name}=\"#{val}\"" : "#{name}"
replace = "'+"+"( (#{cond}) ? '#{full_attr}' : '' )"+"+'"
# debug("ATTR IF REPLACe")
c.sub!('tmp-attr-if="'+attr_if+'"', replace)
\ No newline at end of file