Changesets can be listed by changeset number.
The Git repository is here.
- Revision:
- 344
- Log:
Massive changeset which brings the old, ROOL customised Instiki
version up to date, but without any ROOL customisations in this
latest checked-in version (which is 0.19.1). This is deliberate,
so that it's easy to see the changes made for the ROOL version
in a subsequent changeset. The 'app/views/shared' directory is not
part of Instiki but is kept to maintain the change history with
updated ROOL customisations, some of which involve the same files
in that same directory.
- Author:
- rool
- Date:
- Sat Mar 19 19:52:13 +0000 2011
- Size:
- 6321 Bytes
1 | require 'instiki_stringsupport' |
2 | |
3 | class AbstractUrlGenerator |
4 | |
5 | def initialize(controller) |
6 | raise 'Controller cannot be nil' if controller.nil? |
7 | @controller = controller |
8 | end |
9 | |
10 | # Create a link for the given page (or file) name and link text based |
11 | # on the render mode in options and whether the page (file) exists |
12 | # in the web. |
13 | def make_link(current_web, asked_name, web, text = nil, options = {}) |
14 | @web = current_web |
15 | mode = (options[:mode] || :show).to_sym |
16 | link_type = (options[:link_type] || :show).to_sym |
17 | |
18 | if (link_type == :show) |
19 | page_exists = web.has_page?(asked_name) |
20 | known_page = page_exists || web.has_redirect_for?(asked_name) |
21 | if known_page && !page_exists |
22 | name = web.page_that_redirects_for(asked_name).name |
23 | else |
24 | name = asked_name |
25 | end |
26 | else |
27 | name = asked_name |
28 | known_page = web.has_file?(name) |
29 | description = web.description(name) |
30 | description = description.unescapeHTML.escapeHTML if description |
31 | end |
32 | if (text == asked_name) |
33 | text = description || text |
34 | else |
35 | text = text || description |
36 | end |
37 | text = (text || WikiWords.separate(asked_name)).unescapeHTML.escapeHTML |
38 | |
39 | case link_type |
40 | when :show |
41 | page_link(mode, name, text, web.address, known_page) |
42 | when :file |
43 | file_link(mode, name, text, web.address, known_page, description) |
44 | when :pic |
45 | pic_link(mode, name, text, web.address, known_page) |
46 | when :audio |
47 | media_link(mode, name, text, web.address, known_page, 'audio') |
48 | when :video |
49 | media_link(mode, name, text, web.address, known_page, 'video') |
50 | when :delete |
51 | delete_link(mode, name, web.address, known_page) |
52 | else |
53 | raise "Unknown link type: #{link_type}" |
54 | end |
55 | end |
56 | |
57 | def url_for(hash = {}) |
58 | @controller.url_for hash |
59 | end |
60 | end |
61 | |
62 | class UrlGenerator < AbstractUrlGenerator |
63 | |
64 | private |
65 | |
66 | def file_link(mode, name, text, web_address, known_file, description) |
67 | case mode |
68 | when :export |
69 | if known_file |
70 | %{<a class="existingWikiWord" title="#{description}" href="files/#{CGI.escape(name)}">#{text}</a>} |
71 | else |
72 | %{<span class="newWikiWord">#{text}</span>} |
73 | end |
74 | when :publish |
75 | if known_file |
76 | href = @controller.url_for :controller => 'file', :web => web_address, :action => 'file', |
77 | :id => name, :only_path => true |
78 | %{<a class="existingWikiWord" title="#{description}" href="#{href}">#{text}</a>} |
79 | else |
80 | %{<span class="newWikiWord">#{text}</span>} |
81 | end |
82 | else |
83 | href = @controller.url_for :controller => 'file', :web => web_address, :action => 'file', |
84 | :id => name, :only_path => true |
85 | if known_file |
86 | %{<a class="existingWikiWord" title="#{description}" href="#{href}">#{text}</a>} |
87 | else |
88 | %{<span class="newWikiWord">#{text}<a href="#{href}">?</a></span>} |
89 | end |
90 | end |
91 | end |
92 | |
93 | def page_link(mode, name, text, web_address, known_page) |
94 | case mode |
95 | when :export |
96 | if known_page |
97 | %{<a class="existingWikiWord" href="#{CGI.escape(name)}.#{html_ext}">#{text}</a>} |
98 | else |
99 | %{<span class="newWikiWord">#{text}</span>} |
100 | end |
101 | when :publish |
102 | if known_page |
103 | wikilink_for(mode, name, text, web_address) |
104 | else |
105 | %{<span class="newWikiWord">#{text}</span>} |
106 | end |
107 | else |
108 | if known_page |
109 | wikilink_for(mode, name, text, web_address) |
110 | else |
111 | href = @controller.url_for :controller => 'wiki', :web => web_address, :action => 'new', |
112 | :id => name, :only_path => true |
113 | %{<span class="newWikiWord">#{text}<a href="#{href}">?</a></span>} |
114 | end |
115 | end |
116 | end |
117 | |
118 | def pic_link(mode, name, text, web_address, known_pic) |
119 | href = @controller.url_for :controller => 'file', :web => web_address, :action => 'file', |
120 | :id => name, :only_path => true |
121 | case mode |
122 | when :export |
123 | if known_pic |
124 | %{<img alt="#{text}" src="files/#{CGI.escape(name)}" />} |
125 | else |
126 | %{<img alt="#{text}" src="no image" />} |
127 | end |
128 | when :publish |
129 | if known_pic |
130 | %{<img alt="#{text}" src="#{href}" />} |
131 | else |
132 | %{<span class="newWikiWord">#{text}</span>} |
133 | end |
134 | else |
135 | if known_pic |
136 | %{<img alt="#{text}" src="#{href}" />} |
137 | else |
138 | %{<span class="newWikiWord">#{text}<a href="#{href}">?</a></span>} |
139 | end |
140 | end |
141 | end |
142 | |
143 | def media_link(mode, name, text, web_address, known_media, media_type) |
144 | href = @controller.url_for :controller => 'file', :web => web_address, :action => 'file', |
145 | :id => name, :only_path => true |
146 | case mode |
147 | when :export |
148 | if known_media |
149 | %{<#{media_type} src="files/#{CGI.escape(name)}" controls="controls">#{text}</#{media_type}>} |
150 | else |
151 | text |
152 | end |
153 | when :publish |
154 | if known_media |
155 | %{<#{media_type} src="#{href}" controls="controls">#{text}</#{media_type}>} |
156 | else |
157 | %{<span class="newWikiWord">#{text}</span>} |
158 | end |
159 | else |
160 | if known_media |
161 | %{<#{media_type} src="#{href}" controls="controls">#{text}</#{media_type}>} |
162 | else |
163 | %{<span class="newWikiWord">#{text}<a href="#{href}">?</a></span>} |
164 | end |
165 | end |
166 | end |
167 | |
168 | def delete_link(mode, name, web_address, known_file) |
169 | href = @controller.url_for :controller => 'file', :web => web_address, |
170 | :action => 'delete', :id => name, :only_oath => true |
171 | if mode == :show and known_file |
172 | %{<span class="deleteWikiWord"><a href="#{href}">Delete #{name}</a></span>} |
173 | else |
174 | %{<span class="deleteWikiWord">[[#{name}:delete]]</span>} |
175 | end |
176 | end |
177 | |
178 | private |
179 | |
180 | def wikilink_for(mode, name, text, web_address) |
181 | web = Web.find_by_address(web_address) |
182 | action = web.published? && (web != @web || [:publish, :s5].include?(mode) ) ? 'published' : 'show' |
183 | href = @controller.url_for :controller => 'wiki', :web => web_address, :action => action, |
184 | :id => name, :only_path => true |
185 | title = web == @web ? '' : %{ title="#{web_address}"} |
186 | %{<a class="existingWikiWord" href="#{href}"#{title}>#{text}</a>} |
187 | end |
188 | |
189 | def html_ext |
190 | @html_ext ||= @controller.method(:html_ext).call |
191 | # Why method().call ? A Ruby 1.9.2preview1 bug: |
192 | # http://redmine.ruby-lang.org/issues/show/1802 |
193 | end |
194 | end |