class Mathjax_Renderer::RendererServer

Public Instance Methods

add_content(content, added_margin, extra_style = '') click to toggle source
# File lib/mathjax_renderer/renderer.rb, line 125
def add_content(content, added_margin, extra_style = '')
  digest = Digest::SHA1.hexdigest(content)
  path = "/#{digest}.html"
  server.mount_proc path do |_, res|
    res.body = response(content, added_margin, extra_style)
  end

  path
end
ensure_started!() click to toggle source
# File lib/mathjax_renderer/renderer.rb, line 155
def ensure_started!
  if start!
    Thread.start do
      require 'webrick'
      mathjax_dir = Gem::Specification.find_by_name("rails-assets-MathJax").gem_dir

      self.server = WEBrick::HTTPServer.new(:Port => 0, :DocumentRoot => "#{mathjax_dir}/app/assets",:AccessLog => [], :Logger => WEBrick::Log::new('/dev/null', 7))

      server.mount '/javascripts/MathJax/fonts', WEBrick::HTTPServlet::FileHandler, "#{mathjax_dir}/app/assets/fonts/MathJax/fonts"

      begin
        server.start
      ensure
        server.shutdown
      end
    end
  end
  def server_started?
    require 'net/http'
    uri = URI("http://localhost:#{port}/javascripts/MathJax/MathJax.js")

    req = Net::HTTP::Get.new(uri)
    res = Net::HTTP.start(uri.hostname, uri.port) {|http|
      http.read_timeout = 1
      http.request(req)
    }

    res.is_a?(Net::HTTPSuccess)
  rescue
    false
  end

  sleep 0.1 until server_started?
end
port() click to toggle source
# File lib/mathjax_renderer/renderer.rb, line 135
def port
  server.config[:Port]
end
response(content, added_margin, extra_style) click to toggle source
# File lib/mathjax_renderer/renderer.rb, line 139
    def response(content, added_margin, extra_style)
      "
        <html><head>
      <script type='text/x-mathjax_renderer-config'>
          MathJax.Hub.Config({
            messageStyle: 'none',
            showMathMenu:false
          });
      </script>
      <script type='text/javascript'
            src='javascripts/MathJax/MathJax.js?config=TeX-AMS-MML_HTMLorMML'></script>
<style>.MathJax{position:absolute!important;margin:#{added_margin}px!important;}
#{extra_style}</style>
</head><body>#{content}</body></html>"
    end
server_started?() click to toggle source
# File lib/mathjax_renderer/renderer.rb, line 172
def server_started?
  require 'net/http'
  uri = URI("http://localhost:#{port}/javascripts/MathJax/MathJax.js")

  req = Net::HTTP::Get.new(uri)
  res = Net::HTTP.start(uri.hostname, uri.port) {|http|
    http.read_timeout = 1
    http.request(req)
  }

  res.is_a?(Net::HTTPSuccess)
rescue
  false
end

Private Instance Methods

server() click to toggle source
# File lib/mathjax_renderer/renderer.rb, line 192
def server
  @@server
end
server=(server) click to toggle source
# File lib/mathjax_renderer/renderer.rb, line 196
def server=(server)
  @@server = server
end
start!() click to toggle source
# File lib/mathjax_renderer/renderer.rb, line 202
def start!
  @@started.make_true
end