Fix Content-Type for /style.css
[coquelicot.git] / coquelicot.rb
1 require 'sinatra'
2 require 'haml'
3
4 enable :inline_templates
5
6 def uploaded_file(file)
7   "#{options.root}/files/#{file}"
8 end
9
10 get '/style.css' do
11   content_type 'text/css', :charset => 'utf-8'
12   sass :style
13 end
14
15 get '/' do
16   haml :index
17 end
18
19 get '/ready/:name' do |name|
20   path = uploaded_file(name)
21   unless File.exists? path then
22     return 404
23   end
24   base = request.url.gsub(/\/ready\/[^\/]*$/, '')
25   @url = "#{base}/#{name}"
26   haml :ready
27 end
28
29 get '/:name' do |name|
30   path = uploaded_file(name)
31   unless File.exists? path then
32     return 404
33   end
34   send_file path
35 end
36
37 post '/upload' do
38   if params[:file] then
39     tmpfile = params[:file][:tempfile]
40     name = params[:file][:filename]
41   end
42   if tmpfile.nil? || name.nil? then
43     @error = "No file selected"
44     return haml(:index)
45   end
46   FileUtils::cp(tmpfile.path, uploaded_file(name))
47   redirect "ready/#{name}"
48 end
49
50 __END__
51
52 @@ layout
53 %html
54   %head
55     %title coquelicot
56     %link{ :rel => 'stylesheet', :href => "#{request.script_name}/style.css", :type => 'text/css',
57            :media => "screen, projection" }
58   %body
59     #container
60       = yield
61
62 @@ index
63 %h1 Upload!
64 - unless @error.nil?
65   .error= @error
66 %form#upload{ :enctype => 'multipart/form-data',
67               :action  => 'upload', :method => 'post' }
68   .field
69     %input{ :type => 'file', :name => 'file' }
70   .field
71     %input{ :type => 'submit', :value => 'Send file' }
72
73 @@ ready
74 %h1 Pass this on!
75 .url
76   %a{ :href => @url }= @url
77
78 @@ style
79 $green: #00ff26
80
81 body
82   background-color: $green
83   font-family: Georgia
84   color: darkgreen
85
86 a, a:visited
87   text-decoration: underline
88   color: white
89
90 .error
91   background-color: red
92   color: white
93   border: black solid 1px