コードで奇妙なゆがみを経験することなくコードブロックを表示できるようにする単純なパーシャルを作成しようとしています。
だから私は部分的にこれをしました:
<% lang ||= "" %>
<% language = "lang='#{lang}'" %>
<div class="codebox">
<% if title %>
<h3><%= title %></h3>
<% end %>
<pre <%= language %>><%=text.unindent%></pre>
</div>
そして、これは文字列のインデントを解除するためのlibにあります(非常に素晴らしいSOの提案に感謝します):
class String
def unindent; gsub(/^#{scan(/^\s+/).min}/, "") end
end
次に、これを実行して、非常に小さなコードボックスを取得できます。
<%= render partial: 'pre', locals: { title: "example.html", lang: 'html', text: "
<div class='cl' style='text-align:center'>
<div class='collapse-group'>
<!-- Title, always viewable -->
<a class='bundle' href='#'>'Click here to expand'</a>
<div class='collapse'>
<!-- The content to be hidden or shown -->
</div>
</div>
</div>
"} %>
これはこれに変わります:
私がたくさんのerbを入れない限り、それは魅力のように機能します。エラープロデューサーの例(内容はあまり関連性がありません。「文字列」が一重引用符であるのに対し、内のすべての引用符が二重であることを確認しました):
<%= render partial: 'pre', locals: { title: "example.html", lang: 'html', text: '
<% sub ||= "" %>
<% term ||= "(expand)" %>
<% style ||= "" %>
<div class="cl" style="text-align:center">
<div class="collapse-group">
<<%=tag%> class="squeeze" style=<%="#{style}"%>>
<%=title%>
<% if sub != "" %>
<small><%= sub %></small>
<% end %>
<a class="bundle" href="#"><%= term %></a>
</<%=tag%>>
<div class="collapse">
' } %>
いずれにせよ、これらの引用符の中に入れているのは100%リテラル文字であるとhtmlに伝えることができますか?">"と">"と"%"などを個別にエスケープしてみましたが、これは厄介な(そして効果のない)パスであり、下がらないことを望んでいます。
上記のように見せたいものの例: