import sys import os from unittest.mock import MagicMock sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..'))) from gi.repository import Gtk, Gdk from gajim.common import app from gajim.common import configpaths configpaths.init() from gajim.common import caps_cache from gajim.gtk.util import get_cursor from gajim.conversation_textview import ConversationTextview from gajim.gui_interface import Interface caps_cache.capscache = MagicMock() app.plugin_manager = MagicMock() app.logger = MagicMock() app.interface = Interface() change_cursor = None htmlview = ConversationTextview(None) def on_textview_motion_notify_event(widget, event): """ Change the cursor to a hand when we are over a mail or an url """ global change_cursor w = htmlview.tv.get_window(Gtk.TextWindowType.TEXT) device = w.get_display().get_device_manager().get_client_pointer() pointer = w.get_device_position(device) x = pointer[1] y = pointer[2] tags = htmlview.tv.get_iter_at_location(x, y)[1].get_tags() if change_cursor: w.set_cursor(get_cursor('XTERM')) change_cursor = None for tag in tags: try: if tag.is_anchor: w.set_cursor(get_cursor('HAND2')) change_cursor = tag except Exception: pass htmlview.tv.connect('motion_notify_event', on_textview_motion_notify_event) def handler(texttag, widget, event, iter_, kind): if event.type == Gdk.EventType.BUTTON_PRESS: pass htmlview.tv.hyperlink_handler = htmlview.hyperlink_handler htmlview.print_real_text(None, xhtml='<div>' '<span style="color: red; text-decoration:underline">Hello</span><br/>\n' ' <img src="http://images.slashdot.org/topics/topicsoftware.gif"/><br/>\n' '<span style="font-size: 500%; font-family: serif">World</span>\n' '</div>\n') htmlview.print_real_text(None, xhtml='<hr />') htmlview.print_real_text(None, xhtml=''' <body xmlns='http://www.w3.org/1999/xhtml'> <p xmlns='http://www.w3.org/1999/xhtml'>a:b <a href='http://google.com/' xmlns='http://www.w3.org/1999/xhtml'>Google </a> </p><br/> </body>''') htmlview.print_real_text(None, xhtml=''' <body xmlns='http://www.w3.org/1999/xhtml'> <p style='font-size:large'> <span style='font-style: italic'>O <span style='font-size:larger'>M</span>G</span>, I'm <span style='color:green'>green</span> with <span style='font-weight: bold'>envy</span>! </p> </body> ''') htmlview.print_real_text(None, xhtml='<hr />') htmlview.print_real_text(None, xhtml=''' <body xmlns='http://www.w3.org/1999/xhtml'> http://test.com/ testing links autolinkifying </body> ''') htmlview.print_real_text(None, xhtml='<hr />') htmlview.print_real_text(None, xhtml=''' <body xmlns='http://www.w3.org/1999/xhtml'> <p>As Emerson said in his essay <span style=' font-style: italic; background-color:cyan'>Self-Reliance</span>:</p> <p style='margin-left: 5px; margin-right: 2%'> "A foolish consistency is the hobgoblin of little minds." </p> </body> ''') htmlview.print_real_text(None, xhtml='<hr />') htmlview.print_real_text(None, xhtml=''' <body xmlns='http://www.w3.org/1999/xhtml'> <p style='text-align:center'> Hey, are you licensed to <a href='http://www.jabber.org/'>Jabber</a>? </p> <p style='text-align:right'> <img src='http://www.xmpp.org/images/psa-license.jpg' alt='A License to Jabber' width='50%' height='50%'/> </p> </body> ''') htmlview.print_real_text(None, xhtml='<hr />') htmlview.print_real_text(None, xhtml=''' <body xmlns='http://www.w3.org/1999/xhtml'> <ul style='background-color:rgb(120,140,100)'> <li> One </li> <li> Two </li> <li> Three </li> </ul><hr /><pre style="background-color:rgb(120,120,120)">def fac(n): def faciter(n,acc): if n==0: return acc return faciter(n-1, acc*n) if n<0: raise ValueError('Must be non-negative') return faciter(n,1)</pre> </body> ''') htmlview.print_real_text(None, xhtml='<hr />') htmlview.print_real_text(None, xhtml=''' <body xmlns='http://www.w3.org/1999/xhtml'> <ol style='background-color:rgb(120,140,100)'> <li> One </li> <li> Two is nested: <ul style='background-color:rgb(200,200,100)'> <li> One </li> <li style='font-size:50%'> Two </li> <li style='font-size:200%'> Three </li> <li style='font-size:9999pt'> Four </li> </ul></li> <li> Three </li></ol> </body> ''') htmlview.print_real_text(None, xhtml='<hr />') htmlview.print_real_text(None, xhtml=''' <body xmlns='http://www.w3.org/1999/xhtml'> <p> <strong> <a href='xmpp:example@example.org'>xmpp link</a> </strong>: </p> <div xmlns='http://www.w3.org/1999/xhtml'> <cite style='margin: 7px;' title='xmpp:examples@example.org'> <p> <strong>examples@example.org wrote:</strong> </p> <p>this cite - bla bla bla, smile- :-) …</p> </cite> <div> <p>some text</p> </div> </div> <p/> <p>#232/1</p> </body> ''') htmlview.print_real_text(None, xhtml='<hr />') htmlview.print_real_text(None, xhtml=''' <body xmlns='http://www.w3.org/1999/xhtml'> <br/> <img src='data:image/png;base64,R0lGODdhMAAwAPAAAAAAAP///ywAAAAAMAAw\ AAAC8IyPqcvt3wCcDkiLc7C0qwyGHhSWpjQu5yqmCYsapyuvUUlvONmOZtfzgFz\ ByTB10QgxOR0TqBQejhRNzOfkVJ+5YiUqrXF5Y5lKh/DeuNcP5yLWGsEbtLiOSp\ a/TPg7JpJHxyendzWTBfX0cxOnKPjgBzi4diinWGdkF8kjdfnycQZXZeYGejmJl\ ZeGl9i2icVqaNVailT6F5iJ90m6mvuTS4OK05M0vDk0Q4XUtwvKOzrcd3iq9uis\ F81M1OIcR7lEewwcLp7tuNNkM3uNna3F2JQFo97Vriy/Xl4/f1cf5VWzXyym7PH\ hhx4dbgYKAAA7' alt='Larry'/> </body> ''') htmlview.tv.show() sw = Gtk.ScrolledWindow() sw.set_property('hscrollbar-policy', Gtk.PolicyType.AUTOMATIC) sw.set_property('vscrollbar-policy', Gtk.PolicyType.AUTOMATIC) sw.set_property('border-width', 0) sw.add(htmlview.tv) sw.show() frame = Gtk.Frame() frame.set_shadow_type(Gtk.ShadowType.IN) frame.show() frame.add(sw) win = Gtk.Window() win.add(frame) win.set_default_size(400, 300) win.show_all() win.connect('destroy', lambda win: Gtk.main_quit()) Gtk.main()