2009/12/4 jakemiles said:
Thanks! The .chomp fixed it.
For me moving the "%>" to the next line fixed it.
No, the intention isn't to create helper functions in Java. The web
page happens to be a tutorial on Java. The helper function is a ruby
helper that appliers google's syntaxhighlighting javascript thing to
the provided block of text.
The resulting code in the view, for posterity, is:
<%= code "java", <<-"CODE".chomp
// create a panel using a GridBagLayout
JPanel panel = new JPanel (new GridBagLayout());
// three labels on the first row
panel.add (new JLabel ("One"));
panel.add (new JLabel ("Two"));
panel.add (new JLabel ("Threeeee"));
And the helper function it calls is this:
def code(lang, block)
"<script type=\"syntaxhighlighter\" class=\"brush: #{lang}\"><!
[CDATA[#{block}]]></script>"
end
This turns the provided block of code into this HTML:
<script type="syntaxhighlighter" class="brush: java"><![CDATA[
// create a panel using a GridBagLayout
JPanel panel = new JPanel (new GridBagLayout());
// three labels on the first row
panel.add (new JLabel ("One"));
panel.add (new JLabel ("Two"));
panel.add (new JLabel ("Threeeee"));
]]></script>
Which is the syntax for the syntaxhighlighter package that syntax-
highlights the code in the page andmakes it look quite sharp. The
helper will also automagically include the right javascript file for
the language of the formatted code block.
Erm, why do you need a helper function for this? Why not directly
place this in the ERB template
<script type="syntaxhighlighter" class="brush: java"><![CDATA[
// create a panel using a GridBagLayout
JPanel panel = new JPanel (new GridBagLayout());
// three labels on the first row
panel.add (new JLabel ("One"));
panel.add (new JLabel ("Two"));
panel.add (new JLabel ("Threeeee"));
]]></script>
Or even do
<%= CODE_INTRO_JAVA %>
// create a panel using a GridBagLayout
JPanel panel = new JPanel (new GridBagLayout());
// three labels on the first row
panel.add (new JLabel ("One"));
panel.add (new JLabel ("Two"));
panel.add (new JLabel ("Threeeee"));
<%= CODE_END %>
with proper definitions of both constants? What am I missing?
Kind regards
robert
PS: Please do not top post.
Ah - thanks for all the suggestions.
1) you're right, it was moving the %> to its own line that did it.
The chomp isn't necessary.
2) I'll look at the HAML approach, which seems great.
3) I didn't think of using a constant, but I wouldn't. I also always
opt for functional abstraction over a variable or constant, in case I
want to extend the behavior later without having to change all the
instances of usage.
For example, I did end up extending the functionality. It now takes a
hash of options that it passes to syntaxhighlighter, and other options
that do my own custom stuff and wrap additional html around it.
The resulting code, much cleaner than the full syntaxhighlighter html,
is this:
<%= code :brush => "java",
:code => <<-CODE
// create a panel using a GridBagLayout
JPanel panel = new JPanel (new GridBagLayout());
// three labels on the first row
panel.add (new JLabel ("One"));
panel.add (new JLabel ("Two"));
panel.add (new JLabel ("Threeeee"));
CODE
%>
And I was able to easily extend it with an option that places an image
floating to the right of the code (and changes the css class of the
syntaxhighlighter thing itself so it doesn't fill 100% of the page
width):
<%= code :brush => "java",
:image => "
http://jakemiles.smugmug.com/photos/
702110106_Wtyxg-S.jpg",
:code => <<-CODE
// create a panel using a GridBagLayout
JPanel panel = new JPanel (new GridBagLayout());
// three labels on the first row
panel.add (new JLabel ("One"));
panel.add (new JLabel ("Two"));
panel.add (new JLabel ("Threeeee"));
CODE
%>