-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.rb
More file actions
79 lines (62 loc) · 1.8 KB
/
app.rb
File metadata and controls
79 lines (62 loc) · 1.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# coding: utf-8
require 'uri'
require 'find'
module Project
class App < Sinatra::Base
configure :development do
Bundler.require :development
register Sinatra::Reloader
Slim::Engine.set_default_options :pretty => true
set :scss, :views => 'assets/scss', :style => :expanded
end
configure :production do
set :scss, :views => 'assets/scss', :style => :compressed
end
set :views, :markdown => 'views/md', :slim => 'views', :default => 'views'
helpers do
def find_template(views, name, engine, &block)
_, folder = views.detect { |k,v| engine == Tilt[k] }
folder ||= views[:default]
super(folder, name, engine, &block)
end
end
before do
@jquery_version = '2.1.1'
@site_title = 'Sinatra Markdown Wiki'
end
get '/css/:name.css' do
scss params[:name].to_sym
end
get '/' do
markdown_file_paths = Dir.glob('views/md/*.md')
@markdown_files = markdown_file_paths.map { |f| URI.unescape(File.basename(f, '.md')) }
slim :index
end
post '/pages' do
@title = params[:page_title]
@body = params[:page_body]
filename = URI.escape(@title)
open(File.join('views', 'md', "#{filename}.md"), 'w') do |f|
f.write @body
end
redirect "/#{filename}"
end
not_found do
is_edit_mode = request.path[-5..-1] == '/edit'
@title = request.path[1..-1].split('/').first
begin
@body = open(File.join('views', 'md', "#{@title}.md")) { |f| f.read }
rescue Errno::ENOENT
slim :new_page
else
@filename = @title
@title = URI.unescape(@title).force_encoding('utf-8')
if is_edit_mode
slim :edit_page
else
slim :show_page
end
end
end
end
end