Skip to content

Commit

Permalink
add HTML view via WebKit (for ocrd-dinglehopper)
Browse files Browse the repository at this point in the history
  • Loading branch information
bertsky committed Nov 3, 2020
1 parent 958cb3d commit ebe0015
Show file tree
Hide file tree
Showing 5 changed files with 70 additions and 3 deletions.
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ PYTHONIOENCODING=utf8
SHARE_DIR=~/.local/share

deps-ubuntu:
apt install -y libcairo2-dev libgtk-3-dev libglib2.0-dev libgtksourceview-3.0-dev libgirepository1.0-dev pkg-config cmake
apt install -y libcairo2-dev libgtk-3-dev libglib2.0-dev libgtksourceview-3.0-dev libgirepository1.0-dev gir1.2-webkit2-4.0 pkg-config cmake

deps-dev:
$(PIP) --use-feature=2020-resolver install -r requirements-dev.txt
Expand Down
3 changes: 2 additions & 1 deletion ocrd_browser/view/__init__.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
from .base import View
from .registry import ViewRegistry
from .html import ViewHtml
from .images import ViewImages
from .text import ViewText
from .xml import ViewXml

__all__ = ['View', 'ViewRegistry', 'ViewImages', 'ViewText', 'ViewXml']
__all__ = ['View', 'ViewRegistry', 'ViewImages', 'ViewText', 'ViewXml', 'ViewHtml']
12 changes: 11 additions & 1 deletion ocrd_browser/view/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -249,7 +249,11 @@ class FileGroupModel(Gtk.ListStore):
def __init__(self, document: Document):
super().__init__(str, str, str, str)
for group, mime in document.file_groups_and_mimetypes:
self.append(('{}|{}'.format(group, mime), group, mime, MIME_TO_EXT.get(mime, '.???')))
if mime == 'text/html':
ext = '.html'
else:
ext = MIME_TO_EXT.get(mime, '.???')
self.append(('{}|{}'.format(group, mime), group, mime, ext))

@classmethod
def build(cls, document: Document, filter_: 'FileGroupFilter' = None) -> 'FileGroupModel':
Expand All @@ -267,6 +271,11 @@ def page_filter(model: Gtk.TreeModel, it: Gtk.TreeIter, _data: None) -> bool:
# str casts for mypy
return str(model[it][FileGroupComboBox.COLUMN_MIME]) == str(MIMETYPE_PAGE)

@staticmethod
def html_filter(model: Gtk.TreeModel, it: Gtk.TreeIter, _data: None) -> bool:
# str casts for mypy
return str(model[it][FileGroupComboBox.COLUMN_MIME]) == 'text/html'

@staticmethod
def all_filter(_model: Gtk.TreeModel, _it: Gtk.TreeIter, _data: None) -> bool:
return True
Expand All @@ -275,6 +284,7 @@ def all_filter(_model: Gtk.TreeModel, _it: Gtk.TreeIter, _data: None) -> bool:
class FileGroupFilter(Enum):
IMAGE = FileGroupModel.image_filter
PAGE = FileGroupModel.page_filter
HTML = FileGroupModel.html_filter
ALL = FileGroupModel.all_filter


Expand Down
55 changes: 55 additions & 0 deletions ocrd_browser/view/html.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
import gi
gi.require_version('WebKit2', '4.0')
from gi.repository import GObject, Gtk, WebKit2

from typing import Optional, Tuple, Any

from ocrd_browser.view import View
from ocrd_browser.view.base import FileGroupSelector, FileGroupFilter
from ocrd_browser.model import Page

GObject.type_register(WebKit2.WebView)


class ViewHtml(View):
"""
A view of the HTML+CSS annotation (as produced by ocrd-dinglehopper reports).
"""

label = 'HTML'

def __init__(self, name: str, window: Gtk.Window):
super().__init__(name, window)
self.file_group: Tuple[Optional[str], Optional[str]] = (None, 'text/html')
# noinspection PyTypeChecker
self.web_view: WebKit2.WebView = None

def build(self) -> None:
super().build()
self.add_configurator('file_group', FileGroupSelector(FileGroupFilter.HTML))

self.web_view = WebKit2.WebView()

self.scroller.add(self.web_view)

@property
def use_file_group(self) -> str:
return self.file_group[0]

def config_changed(self, name: str, value: Any) -> None:
super().config_changed(name, value)
self.reload()

def reload(self) -> None:
files = self.document.files_for_page_id(self.page_id, self.use_file_group, mimetype='text/html')
if files:
self.current = Page(self.page_id, files[0], None, [], [], None)
self.redraw()

def redraw(self) -> None:
if self.current:
self.web_view.set_tooltip_text(self.page_id)
self.web_view.load_uri('file://' + str(self.document.path(self.current.file.local_filename)))
self.web_view.show()


1 change: 1 addition & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
],
'ocrd_browser_view': [
'xml = ocrd_browser.view:ViewXml',
'html = ocrd_browser.view:ViewHtml',
'text = ocrd_browser.view:ViewText',
'images = ocrd_browser.view:ViewImages'
],
Expand Down

0 comments on commit ebe0015

Please sign in to comment.