@@ -89,6 +89,49 @@ def doc_path
8989 end
9090 end
9191
92+ def title_for_page page_name
93+ page_name . split ( '_' ) . map do |w |
94+ w == "osx" ? "OS X" : w . capitalize
95+ end . join ( ' ' )
96+ end
97+
98+ def render_page
99+ begin
100+ options = {
101+ site_name : params [ :site ] ,
102+ doc_title : title_for_page ( params [ :name ] ) ,
103+ doc_path : doc_path ,
104+ back : params [ :back ] ,
105+ src : src ,
106+ }
107+
108+ case ext
109+
110+ when "md"
111+ if doc_path =~ /\. deck\. md$/ # todo: refactor
112+ # todo: render with page nav elements too
113+ slides = Deck ::Slide . split ( src )
114+ Deck ::SlideDeck . new ( :slides => slides ) . to_pretty
115+ else
116+ MarkdownPage . new ( options ) . to_html
117+ end
118+
119+ when "mw"
120+ MediaWikiPage . new ( options ) . to_html
121+
122+ when "step"
123+ StepPage . new ( options ) . to_html
124+
125+ else
126+ raise "unknown file type #{ doc_path } "
127+ end
128+
129+ rescue Errno ::ENOENT => e
130+ p e
131+ halt 404
132+ end
133+ end
134+
92135 before do
93136 expires 3600 , :public
94137 end
@@ -98,16 +141,7 @@ def doc_path
98141 end
99142
100143 get "/" do
101- redirect "/#{ default_site } "
102- end
103-
104- get "/:site" do
105- site_name = params [ :site ]
106- if sites . include? site_name
107- redirect "/#{ site_name } /#{ site_name } "
108- else
109- forward # send it on to the downstream file server
110- end
144+ redirect "/#{ default_site } /"
111145 end
112146
113147 get "/:site/:name/src" do
@@ -141,45 +175,36 @@ def doc_path
141175 end
142176 end
143177
144- get "/:site/:name" do
145- begin
146- doc_title = params [ :name ] . split ( '_' ) . map do |w |
147- w == "osx" ? "OS X" : w . capitalize
148- end . join ( ' ' )
149-
150- options = {
151- site_name : params [ :site ] ,
152- doc_title : doc_title ,
153- doc_path : doc_path ,
154- back : params [ :back ] ,
155- src : src ,
156- }
157-
158- case ext
159-
160- when "md"
161- if doc_path =~ /\. deck\. md$/ # todo: refactor
162- # todo: render with page nav elements too
163- slides = Deck ::Slide . split ( src )
164- Deck ::SlideDeck . new ( :slides => slides ) . to_pretty
165- else
166- MarkdownPage . new ( options ) . to_html
167- end
178+ get "/:site/:name/" do
179+ # remove any extraneous slash from otherwise well-formed page URLs
180+ redirect "#{ params [ :site ] } /#{ params [ :name ] } "
181+ end
168182
169- when "mw"
170- MediaWikiPage . new ( options ) . to_html
183+ get "/:site/:name" do
184+ render_page
185+ end
171186
172- when "step"
173- StepPage . new ( options ) . to_html
187+ get "/:file.:ext" do
188+ # treat root URLs with dots in them like static assets and serve them
189+ # from the downstream file server (coderay.css, jquery-1.6.1.js)
190+ forward
191+ end
174192
175- else
176- raise "unknown file type #{ doc_path } "
177- end
193+ get "/:site" do
194+ # add a slash to any URLs that contain only a site
195+ # (otherwise paths in that site's pages would resolve
196+ # relative to the root)
197+ redirect "#{ params [ :site ] } /"
198+ end
178199
179- rescue Errno ::ENOENT => e
180- p e
181- halt 404
200+ get "/:site/" do
201+ site_name = params [ :site ]
202+ if sites . include? site_name
203+ # render the site's index page
204+ params [ :name ] = site_name
205+ render_page
206+ else
207+ forward # send it on to the downstream file server
182208 end
183209 end
184210end
185-
0 commit comments