Is there any way to add options (HTML attributes) to HAML filters?
I wanted to do something like this :
:javascript{:'data-turbolinks-eval' => 'false', :foo => 'bar'}
if(someCondition){
doSomething();
}
And the result would be :
<script 'data-turbolinks-eval'='false' 'foo'='bar'>
if(someCondition){
doSomething();
}
</script>
The closest I could get is :
%script{:'data-turbolinks-eval' => 'false', :foo => 'bar'}
if(someCondition){
doSomething();
}
The drawback is that you can't indent your JS in HAML unless you're using the :javascript filter. It's ok for a few lines, but it can get messy quickly.
I'm well aware that in most cases if you end up with a plex script in a HAML template, it means you're doing something wrong and that's not the answer I'm looking for.
Is there any way to add options (HTML attributes) to HAML filters?
I wanted to do something like this :
:javascript{:'data-turbolinks-eval' => 'false', :foo => 'bar'}
if(someCondition){
doSomething();
}
And the result would be :
<script 'data-turbolinks-eval'='false' 'foo'='bar'>
if(someCondition){
doSomething();
}
</script>
The closest I could get is :
%script{:'data-turbolinks-eval' => 'false', :foo => 'bar'}
if(someCondition){
doSomething();
}
The drawback is that you can't indent your JS in HAML unless you're using the :javascript filter. It's ok for a few lines, but it can get messy quickly.
I'm well aware that in most cases if you end up with a plex script in a HAML template, it means you're doing something wrong and that's not the answer I'm looking for.
Share Improve this question asked Jan 30, 2014 at 7:44 JimJim 1,06211 silver badges24 bronze badges1 Answer
Reset to default 9There is no way to pass extra attributes to the :javascript
filter like this. You could however use a :plain
filter along with a normal script
tag to allow indenting your javascript code:
%script{:'data-turbolinks-eval' => 'false', :foo => 'bar'}
:plain
if(someCondition()) {
doSomething();
}
produces:
<script data-turbolinks-eval='false' foo='bar'>
if(someCondition()) {
doSomething();
}
</script>