Replace ajax-loader.gif spinner with a bar
[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 helpers do
51   def base_href
52     url = request.scheme + "://"
53     url << request.host
54     if request.scheme == "https" && request.port != 443 ||
55         request.scheme == "http" && request.port != 80
56       url << ":#{request.port}"
57     end
58     url << request.script_name
59     "#{url}/"
60   end
61 end
62
63 __END__
64
65 @@ layout
66 %html
67   %head
68     %title coquelicot
69     %base{ :href => base_href }
70     %link{ :rel => 'stylesheet', :href => "style.css", :type => 'text/css',
71            :media => "screen, projection" }
72     %script{ :type => 'text/javascript', :src => 'javascripts/jquery.min.js' }
73     %script{ :type => 'text/javascript', :src => 'javascripts/jquery.lightBoxFu.js' }
74     %script{ :type => 'text/javascript', :src => 'javascripts/jquery.uploadProgress.js' }
75     %script{ :type => 'text/javascript', :src => 'javascripts/coquelicot.js' }
76   %body
77     #container
78       = yield
79
80 @@ index
81 %h1 Upload!
82 - unless @error.nil?
83   .error= @error
84 %form#upload{ :enctype => 'multipart/form-data',
85               :action  => 'upload', :method => 'post' }
86   .field
87     %input{ :type => 'file', :name => 'file' }
88   .field
89     %input{ :type => 'submit', :value => 'Send file' }
90
91 @@ ready
92 %h1 Pass this on!
93 .url
94   %a{ :href => @url }= @url
95
96 @@ style
97 $green: #00ff26
98
99 body
100   background-color: $green
101   font-family: Georgia
102   color: darkgreen
103
104 a, a:visited
105   text-decoration: underline
106   color: white
107
108 .error
109   background-color: red
110   color: white
111   border: black solid 1px
112
113 #progress
114   margin: 8px
115   width: 220px
116   height: 19px
117
118 #progressbar
119   background: url('images/ajax-loader.gif') no-repeat
120   width: 0px
121   height: 19px