Class: Nwiki::Frontend::App
- Inherits:
-
Object
- Object
- Nwiki::Frontend::App
- Defined in:
- lib/nwiki/frontend/app.rb
Constant Summary collapse
- TEMPLATE =
-> (wiki, page_title, html) { erb = ERB.new <<EOS <!DOCTYPE HTML> <html> <head> <title><%= page_title %><%= wiki.title %></title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="alternate" type="application/atom+xml" title="ATOM Feed" href="/articles.xml"> <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.3.0/css/bootstrap.min.css"> <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.3.0/css/bootstrap-theme.min.css"> </head> <body> <div class="container"> <div class="row"> <div class="col-md-12"><h1><a href="/articles/"><%= wiki.title %></a></h1></div> </div> <div class="row"> <div class="col-md-12"><h2"><small><%= wiki.subtitle %></small></h2></div> </div> <div class="row"> <div class="col-md-12"> <%= html %> </div> </div> </div> <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script src="//netdna.bootstrapcdn.com/bootstrap/3.3.0/js/bootstrap.min.js"></script> </body> </html> EOS erb.result(binding).force_encoding("UTF-8") }
- FILE_CONVERTER =
-> (wiki, template, file, env) { path = Rack::Utils.unescape(env["PATH_INFO"]) return file unless Nwiki::Utils.orgfile?(path) page_title = Nwiki::Utils.page_title(path) file.force_encoding("UTF-8") html = Orgmode::Parser.new(file, offset: 1).to_html template.call(wiki, page_title, html) }.curry
- DIRECTORY_CONVERTER =
-> (wiki, template, file, env) { path = Rack::Utils.unescape(env["PATH_INFO"]) if path == '/' page_title = Nwiki::Utils.page_title(path) html = wiki.find_directory("/").to_html template.call(wiki, page_title, html) else page_title = Nwiki::Utils.page_title(path) list = dirs. each { |d| d.force_encoding("UTF-8") }. map { |e| Nwiki::Utils.strip_org(e) }. map { |e| %Q!<li><a href="#{e.gsub('#', '%23')}">#{e}</a></li>! } html = "<ul><li><a href=\"../\">../</a></li>#{list.join}</ul>" template.call(wiki, page_title, html) end }.curry
Instance Method Summary collapse
- #call(env) ⇒ Object
-
#initialize(git_repo_path) ⇒ App
constructor
A new instance of App.
Constructor Details
#initialize(git_repo_path) ⇒ App
Returns a new instance of App.
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/nwiki/frontend/app.rb', line 74 def initialize git_repo_path wiki = Core::Wiki.new git_repo_path @builder = Rack::Builder.new { map '/' do run Top.new git_repo_path end map '/articles.xml' do run Feed.new git_repo_path, articles_path: '/articles' end map '/articles' do use Rack::Rewrite do rewrite %r{^(.*)$}, '$1.org', if: -> (env) { path = Rack::Utils.unescape(env["PATH_INFO"]) path !~ /\/$/ && File.extname(path) !~ /(png|jpg|gif)/ } end run Rack::Git::File.new git_repo_path, file_converter: FILE_CONVERTER.call(wiki, TEMPLATE), directory_converter: DIRECTORY_CONVERTER.call(wiki, TEMPLATE) end } end |
Instance Method Details
#call(env) ⇒ Object
98 99 100 |
# File 'lib/nwiki/frontend/app.rb', line 98 def call env @builder.call env end |