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