You are here: Home > Latest news from Darcs > Renders images in wiki pages

Revision 20080729214208-9043f-efe1a1...

Renders images in wiki pages

app/helpers/application_helper.rb
lib/wiki_link_handler.rb
lib/wiki_renderer.rb
test/fixtures/images.yml
test/fixtures/images_revisions.yml
test/fixtures/pages.yml
test/fixtures/revisions.yml
test/functional/wiki_controller_test.rb
test/unit/wiki_link_handler_test.rb
test/unit/wiki_renderer_test.rb

Changes to application_helper.rb

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

Changes to wiki_link_handler.rb

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

Changes to wiki_renderer.rb

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

Changes to images.yml

 
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

Changes to images_revisions.yml

 
image_inclusion_one:
1
 
  image_id: 1
2
 
  revision_id: 26
3
 
4

Changes to pages.yml

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

Changes to revisions.yml

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

Changes to wiki_controller_test.rb

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

Changes to wiki_link_handler_test.rb

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

Changes to wiki_renderer_test.rb

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