Renders images in wiki pages
| 77 | 77 | ||
|---|---|---|---|
| 78 | def render_wiki(text) | def render_wiki(text) | 78 |
| 79 | begin | begin | 79 |
| 80 | @renderer.render_wiki_text(text) | @renderer.render_wiki_text(text, @page) | 80 |
| 81 | rescue | rescue | 81 |
| 82 | parsing_error_box + content_tag(:pre, h(text), :class => 'wikisource') | parsing_error_box + content_tag(:pre, h(text), :class => 'wikisource') | 82 |
| 83 | end | end | 83 |
| 36 | end | end | 36 |
|---|---|---|---|
| 37 | 37 | ||
| 38 | end | end | 38 |
| 39 | |||
class PageLinkHandler | 40 | ||
def initialize(page, handler) | 41 | ||
@page, @handler = page, handler | 42 | ||
end | 43 | ||
| 44 | |||
def link_for_resource(prefix, res, options=[]) | 45 | ||
if prefix.downcase == 'image' | 46 | ||
image = @page.images.to_a.find {|img| res.downcase == img.filename.downcase} | 47 | ||
%[<img src="#{image.public_filename}" width="#{image.width}" height="#{image.height}" />] | 48 | ||
end | 49 | ||
end | 50 | ||
| 51 | |||
private | 52 | ||
| 53 | |||
def method_missing(name, *args) | 54 | ||
@handler.send(name, *args) | 55 | ||
end | 56 | ||
end | 57 |
| 28 | @html_generator.link_handler = url_generator | @html_generator.link_handler = url_generator | 28 |
|---|---|---|---|
| 29 | end | end | 29 |
| 30 | 30 | ||
| 31 | def render_wiki_text(text) | def render_wiki_text(text, page=nil) | 31 |
| 32 | localized_text = @translator.localize(text).delete("\r") | localized_text = @translator.localize(text).delete("\r") | 32 |
| 33 | wiki_to_html(localized_text) | handler = @html_generator.link_handler | 33 |
@html_generator.link_handler = PageLinkHandler.new(page, handler) unless page.nil? | 34 | ||
rendered_text = wiki_to_html(localized_text) | 35 | ||
@html_generator.link_handler = handler | 36 | ||
rendered_text | 37 | ||
| 34 | end | end | 38 |
| 35 | 39 | ||
| 36 | def render_wiki_diff(old_text, new_text) | def render_wiki_diff(old_text, new_text) | 40 |
test_image: | 1 | ||
|---|---|---|---|
id: 1 | 2 | ||
content_type: 'image/jpeg' | 3 | ||
filename: 'test.jpg' | 4 | ||
size: 115718 | 5 | ||
width: 497 | 6 | ||
height: 497 | 7 | ||
| 8 |
image_inclusion_one: | 1 | ||
|---|---|---|---|
image_id: 1 | 2 | ||
revision_id: 26 | 3 | ||
| 4 |
| 92 | kind: common | kind: common | 92 |
|---|---|---|---|
| 93 | modified_at: 2008-04-15 20:11:08 | modified_at: 2008-04-15 20:11:08 | 93 |
| 94 | 94 | ||
page_with_image: | 95 | ||
id: 18 | 96 | ||
name: PageWithImage | 97 | ||
kind: common | 98 | ||
modified_at: 2008-07-29 18:43:39 | 99 | ||
| 100 |
| 282 | text: Bob changed the text that John entered | text: Bob changed the text that John entered | 282 |
|---|---|---|---|
| 283 | position: 3 | position: 3 | 283 |
| 284 | 284 | ||
page_with_image: | 285 | ||
id: 26 | 286 | ||
page_id: 18 | 287 | ||
kind: common | 288 | ||
modified_at: 2008-07-29 18:43:39 | 289 | ||
last_editor_id: 1000001 #bob | 290 | ||
editors: "" | 291 | ||
title: Page with Image | 292 | ||
text: "[[image:test.jpg]]" | 293 | ||
position: 1 | 294 | ||
| 295 |
| 553 | assert_response :missing | assert_response :missing | 553 |
|---|---|---|---|
| 554 | end | end | 554 |
| 555 | 555 | ||
def test_renders_inline_images | 556 | ||
get :show, :page_name => pages('page_with_image').name | 557 | ||
assert_tag :img, :attributes => {:src => '/wikimages/0000/0001/test.jpg', | 558 | ||
:width => '497', :height => '497'} | 559 | ||
end | 560 | ||
| 561 | |||
| 556 | private | private | 562 |
| 557 | 563 | ||
| 558 | def log_as(user_name) | def log_as(user_name) | 564 |
| 18 | 18 | ||
|---|---|---|---|
| 19 | class WikiLinkHandlerTest < Test::Unit::TestCase | class WikiLinkHandlerTest < Test::Unit::TestCase | 19 |
| 20 | 20 | ||
| 21 | def test_delegates_generation_to_controller | def test_delegates_url_generation_to_controller | 21 |
| 22 | FlexMock.use do |cont| | FlexMock.use do |cont| | 22 |
| 23 | cont.should_receive(:server_url_for).once.returns('a'). | cont.should_receive(:server_url_for).once.returns('a'). | 23 |
| 24 | with(:controller => 'wiki', :action => 'show', :page_name => 'MyPage') | with(:controller => 'wiki', :action => 'show', :page_name => 'MyPage') | 24 |
| 20 | 20 | ||
|---|---|---|---|
| 21 | class WikiRendererTest < Test::Unit::TestCase | class WikiRendererTest < Test::Unit::TestCase | 21 |
| 22 | 22 | ||
| 23 | fixtures :pages, :revisions | fixtures :pages, :revisions, :images, :images_revisions | 23 |
| 24 | attr_reader :renderer | attr_reader :renderer | 24 |
| 25 | 25 | ||
| 26 | def setup | def setup | 26 |
| 246 more lines | |||
| 273 | renderer.render_wiki_text('Yada yada yada [[FinishedFeature]]') | renderer.render_wiki_text('Yada yada yada [[FinishedFeature]]') | 273 |
| 274 | end | end | 274 |
| 275 | 275 | ||
def test_renders_images | 276 | ||
page = pages('page_with_image') | 277 | ||
expected = "<h2><a name='My_image'></a> My image </h2>\n" + | 278 | ||
"<p><img src=\"/wikimages/0000/0001/test.jpg\" width=\"497\" height=\"497\" /></p>" | 279 | ||
assert_equal expected, renderer.render_wiki_text("== My image ==\n\n[[image:test.jpg]]", page) | 280 | ||
assert_equal expected, renderer.render_wiki_text("== My image ==\n\n[[Image:test.jpg]]", page) | 281 | ||
assert_equal expected, renderer.render_wiki_text("== My image ==\n\n[[image:Test.JPG]]", page) | 282 | ||
end | 283 | ||
| 284 | |||
| 276 | private | private | 285 |
| 277 | 286 | ||
| 278 | def url_generator; TestingWikiLinkHandler.new; end | def url_generator; TestingWikiLinkHandler.new; end | 287 |