class Sgfa::Web::Base
Shared utilities for Web
classes to inherit
Constants
- HtmlBody
- HtmlMessage
- HtmlPage
Public Instance Methods
_escape(txt)
click to toggle source
Escape URL
# File lib/sgfa/web/base.rb, line 167 def _escape(txt) Rack::Utils.escape(txt) end
_escape_html(txt)
click to toggle source
Escape HTML
# File lib/sgfa/web/base.rb, line 160 def _escape_html(txt) Rack::Utils.escape_html(txt) end
_escape_path(txt)
click to toggle source
Escape URL using only percent encoding
# File lib/sgfa/web/base.rb, line 174 def _escape_path(txt) Rack::Utils.escape_path(txt) end
_escape_un(txt)
click to toggle source
Unescape URL
# File lib/sgfa/web/base.rb, line 181 def _escape_un(txt) Rack::Utils.unescape(txt) end
_link_pages(cur, per, max, link, query)
click to toggle source
Generate page navigation
# File lib/sgfa/web/base.rb, line 99 def _link_pages(cur, per, max, link, query) pages = (per-1 + max) / per txt = '' if query qs = '?' query.each{ |nam, val| qs << '%s=%s' %[_escape(nam), _escape(val)] } else qs = '' end # previous and first if cur > 1 txt << "<a href='%s/%d%s'>Prev</a> — " % [link, cur-1, qs] txt << "<a href='%s/1%s'>First</a> — " % [link, qs] else txt << "Prev — First — " end # numbers PageNavNums.each do |num| val = cur + num next if val < 1 || val > pages if num == 0 txt << "%d " % cur else txt << "<a href='%s/%d%s'>%d</a> " % [link, val, qs, val] end end # last & next if cur < pages txt << "— <a href='%s/%d%s'>Last</a> " % [link, pages, qs] txt << "— <a href='%s/%s%s'>Next</a>" % [link, cur+1, qs] else txt << "— Last — Next" end return PageNav % txt end
_trans(env)
click to toggle source
Create a binder transaction
# File lib/sgfa/web/base.rb, line 188 def _trans(env) tr = { :user => env['sgfa.user'], :groups => env['sgfa.groups'] } tr[:jacket] = env['sgfa.jacket.name'] if env['sgfa.jacket.name'] return tr end
response(env)
click to toggle source
Generate a response HTML page
# File lib/sgfa/web/base.rb, line 53 def response(env) # response code code = case env['sgfa.status'] when :badreq; 400 when :ok; 200 when :notfound; 404 when :deny; 402 when :conflict; 409 when :servererror; 500 else; raise 'Response not set' end # returning a file if env['sgfa.file'] return [code, env['sgfa.headers'], env['sgfa.file']] end # build the page and headers body = HtmlBody % env['sgfa.html'] msg = env['sgfa.message'] ? (HtmlMessage % env['sgfa.message']) : '' html = HtmlPage % [ env['sgfa.title'], env['sgfa.css'], env['sgfa.title'], _escape_html(env['sgfa.user']), env['sgfa.navbar'], msg, body ] head = { 'Content-Type' => 'text/html; charset=utf-8', 'Content-Length' => html.bytesize.to_s, } return [code, head, [html]] end