Wiki links to files point to the appropriate actions (file, pic)

This commit is contained in:
Alexey Verkhovsky 2005-01-22 16:38:33 +00:00
parent c30989c7eb
commit e6c32bafc6
6 changed files with 47 additions and 34 deletions

View file

@ -11,6 +11,13 @@ module WikiChunk
# another wiki page. # another wiki page.
class WikiLink < Chunk::Abstract class WikiLink < Chunk::Abstract
attr_reader :page_name, :link_text, :link_type
def initialize(*args)
super
@link_type = 'show'
end
def self.apply_to(content) def self.apply_to(content)
content.gsub!( self.pattern ) do |matched_text| content.gsub!( self.pattern ) do |matched_text|
chunk = self.new($~) chunk = self.new($~)
@ -31,11 +38,10 @@ module WikiChunk
# By default, no escaped text # By default, no escaped text
def escaped_text() nil end def escaped_text() nil end
# Delimit the link text with markers to replace later unless # Replace link with a mask, but if the word is escaped, then don't replace it
# the word is escaped. In that case, just return the link text def mask(content) escaped_text || "#{pre_mask}#{link_text}#{post_mask}" end
def mask(content) escaped_text || pre_mask + link_text + post_mask end
def regexp() /#{pre_mask}(.*)?#{post_mask}/ end def regexp() /#{pre_mask}(.*)#{post_mask}/ end
def revert(content) content.sub!(regexp, text) end def revert(content) content.sub!(regexp, text) end
@ -45,7 +51,7 @@ module WikiChunk
def unmask(content) def unmask(content)
return nil if escaped_text return nil if escaped_text
return self if content.sub!(regexp) do |match| return self if content.sub!(regexp) do |match|
content.page_link(page_name, $1) content.page_link(page_name, $1, link_type)
end end
end end
@ -64,8 +70,6 @@ module WikiChunk
WIKI_WORD WIKI_WORD
end end
attr_reader :page_name
def initialize(match_data) def initialize(match_data)
super(match_data) super(match_data)
@textile_link_suffix, @escape, @page_name = match_data[1..3] @textile_link_suffix, @escape, @page_name = match_data[1..3]
@ -94,18 +98,10 @@ module WikiChunk
def self.pattern() WIKI_LINK end def self.pattern() WIKI_LINK end
attr_reader :page_name, :link_text, :link_type
def initialize(match_data) def initialize(match_data)
super(match_data) super(match_data)
@textile_link_suffix, @page_name = match_data[1..2] @textile_link_suffix, @page_name = match_data[1..2]
# defaults
@link_type = 'show'
@link_text = @page_name @link_text = @page_name
separate_link_type separate_link_type
separate_alias separate_alias
end end

View file

@ -48,18 +48,23 @@ class Web
page = pages[name] page = pages[name]
text = text || WikiWords.separate(name) text = text || WikiWords.separate(name)
link = CGI.escape(name) link = CGI.escape(name)
link_type = options[:link_type] || :show
case options[:mode] case options[:mode]
when :export when :export
if page then "<a class=\"existingWikiWord\" href=\"#{link}.html\">#{text}</a>" if page then "<a class=\"existingWikiWord\" href=\"#{link}.html\">#{text}</a>"
else "<span class=\"newWikiWord\">#{text}</span>" end else "<span class=\"newWikiWord\">#{text}</span>" end
when :publish when :publish
if page then "<a class=\"existingWikiWord\" href=\"../published/#{link}\">#{text}</a>" if page then "<a class=\"existingWikiWord\" href=\"../published/#{link}\">#{text}</a>"
else "<span class=\"newWikiWord\">#{text}</span>" end else "<span class=\"newWikiWord\">#{text}</span>" end
else
if page
"<a class=\"existingWikiWord\" href=\"../#{link_type}/#{link}\">#{text}</a>"
else else
if page then "<a class=\"existingWikiWord\" href=\"../show/#{link}\">#{text}</a>" "<span class=\"newWikiWord\">#{text}<a href=\"../#{link_type}/#{link}\">?</a></span>"
else "<span class=\"newWikiWord\">#{text}<a href=\"../show/#{link}\">?</a></span>" end end
end end
end end

View file

@ -39,9 +39,8 @@ require 'chunks/nowiki'
# UPDATED: 22nd May 2004 # UPDATED: 22nd May 2004
class WikiContent < String class WikiContent < String
PRE_ENGINE_ACTIONS = [ NoWiki, Category, Include, PRE_ENGINE_ACTIONS = [ NoWiki, Category, Include, URIChunk, LocalURIChunk, WikiChunk::Link,
URIChunk, LocalURIChunk, WikiChunk::Word ]
WikiChunk::Link, WikiChunk::Word ]
POST_ENGINE_ACTIONS = [ Literal::Pre, Literal::Tags ] POST_ENGINE_ACTIONS = [ Literal::Pre, Literal::Tags ]
DEFAULT_OPTS = { DEFAULT_OPTS = {
:pre_engine_actions => PRE_ENGINE_ACTIONS, :pre_engine_actions => PRE_ENGINE_ACTIONS,
@ -76,7 +75,8 @@ class WikiContent < String
end end
# Call @web.page_link using current options. # Call @web.page_link using current options.
def page_link(name, text) def page_link(name, text, link_type)
@options[:link_type] = link_type || :show
@web.make_link(name, text, @options) @web.make_link(name, text, @options)
end end

View file

@ -210,6 +210,18 @@ class RevisionTest < Test::Unit::TestCase
"today</ins></p>", @page.revisions.last.display_diff "today</ins></p>", @page.revisions.last.display_diff
end end
def test_link_to_file
assert_markup_parsed_as(
'<p><span class="newWikiWord">doc.pdf<a href="../file/doc.pdf">?</a></span></p>',
'[[doc.pdf:file]]')
end
def test_link_to_pic
assert_markup_parsed_as(
'<p><span class="newWikiWord">Square<a href="../pic/square.jpg">?</a></span></p>',
'[[square.jpg|Square:pic]]')
end
# TODO Remove the leading underscores from this test when upgrading to RedCloth 3.0.1; # TODO Remove the leading underscores from this test when upgrading to RedCloth 3.0.1;
# also add a test for the "Unhappy Face" problem (another interesting RedCloth bug) # also add a test for the "Unhappy Face" problem (another interesting RedCloth bug)
def __test_list_with_tildas def __test_list_with_tildas