1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
from gi.repository import WebKit
from gi.repository import Gdk
from gi.repository import GObject
class _WebView(WebKit.WebView):
__gsignals__ = {
'touch-change-page': (GObject.SignalFlags.RUN_FIRST, GObject.TYPE_NONE,
([bool])),
}
def __init__(self, only_to_measure=False):
WebKit.WebView.__init__(self)
self._only_to_measure = only_to_measure
def setup_touch(self):
self.get_window().set_events(self.get_window().get_events() |
Gdk.EventMask.TOUCH_MASK)
self.connect('event', self.__event_cb)
def __event_cb(self, widget, event):
if event.type == Gdk.EventType.TOUCH_BEGIN:
x = event.touch.x
view_width = widget.get_allocation().width
if x > view_width * 3 / 4:
self.emit('touch-change-page', True)
elif x < view_width * 1 / 4:
self.emit('touch-change-page', False)
def get_page_height(self):
'''
Gets height (in pixels) of loaded (X)HTML page.
This is done via javascript at the moment
'''
hide_scrollbar_js = ''
if self._only_to_measure:
hide_scrollbar_js = \
'document.documentElement.style.overflow = "hidden";'
js = 'document.documentElement.style.margin = "50px";' + \
'oldtitle=document.title;' + \
'if (document.body == null) {' + \
'document.title = 0} else {' + \
hide_scrollbar_js + \
'document.title=Math.max(document.body.scrollHeight, ' + \
'document.body.offsetHeight,document.documentElement.clientHeight,' + \
'document.documentElement.scrollHeight, ' + \
'document.documentElement.offsetHeight)};'
self.execute_script(js)
ret = self.get_main_frame().get_title()
js = 'document.title=oldtitle;'
self.execute_script(js)
try:
return int(ret)
except ValueError:
return 0
def add_bottom_padding(self, incr):
'''
Adds incr pixels of padding to the end of the loaded (X)HTML page.
This is done via javascript at the moment
'''
js = ('var newdiv = document.createElement("div");' + \
'newdiv.style.height = "%dpx";document.body.appendChild(newdiv);' \
% incr)
self.execute_script(js)
def highlight_next_word(self):
'''
Highlight next word (for text to speech)
'''
self.execute_script('highLightNextWord();')
def go_to_link(self, id_link):
self.execute_script('window.location.href = "%s";' % id_link)
def get_vertical_position_element(self, id_link):
'''
Get the vertical position of a element, in pixels
'''
# remove the first '#' char
id_link = id_link[1:]
js = "oldtitle = document.title;" \
"obj = document.getElementById('%s');" \
"var top = 0;" \
"if(obj.offsetParent) {" \
" while(1) {" \
" top += obj.offsetTop;" \
" if(!obj.offsetParent) {break;};" \
" obj = obj.offsetParent;" \
" };" \
"}" \
"else if(obj.y) { top += obj.y; };" \
"document.title=top;" % id_link
self.execute_script(js)
ret = self.get_main_frame().get_title()
js = 'document.title=oldtitle;'
self.execute_script(js)
try:
return int(ret)
except ValueError:
return 0
|