Sha256: ef4cbf7aabb90413f5f1015af3e14cc2cc026e41b483a8bf03bad0cdd910583b

Contents?: true

Size: 1.35 KB

Versions: 2

Compression:

Stored size: 1.35 KB

Contents

require 'webkit2-gtk'

module MDV
  # Markdown viewer window class
  class MarkdownViewer
    attr_reader :file

    def initialize(file)
      @file = file
      setup_gui
      reload
      connect_signals
      @win.show_all
    end

    private

    def connect_signals
      connect_key_press_event_signal
      connect_destroy_signal
    end

    def connect_destroy_signal
      @win.signal_connect('destroy') { Gtk.main_quit }
    end

    def connect_key_press_event_signal
      @win.signal_connect 'key-press-event' do |_wdg, evt, _ud|
        handle_key(evt) if evt.state.control_mask?
        false
      end
    end

    def handle_key(evt)
      case evt.keyval
      when 'q'.ord
        @win.destroy
      when 'r'.ord
        reload
      end
    end

    def setup_gui
      @win = Gtk::Window.new :toplevel
      @win.set_default_geometry 700, 500

      @win.add scrolled_window
    end

    def scrolled_window
      @scr ||= Gtk::ScrolledWindow.new(nil, nil).tap do |it|
        it.add web_view
      end
    end

    def web_view
      @wv ||= WebKit2Gtk::WebView.new
    end

    def fullpath
      @fullpath ||= File.expand_path(file, Dir.pwd)
    end

    def base_uri
      @base_uri ||= "file://#{fullpath}"
    end

    def html
      GitHub::Markup.render(fullpath)
    end

    def reload
      web_view.load_html html, base_uri
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
mdv-0.3.1 lib/mdv/markdown_viewer.rb
mdv-0.3.0 lib/mdv/markdown_viewer.rb