home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2012 January / maximum-cd-2012-01.iso / DiscContents / digsby_setup.exe / lib / gui / browser / webkit / webkitwindow.pyo (.txt) < prev   
Encoding:
Python Compiled Bytecode  |  2011-10-05  |  8.0 KB  |  203 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.6)
  3.  
  4. from __future__ import with_statement
  5. import wx
  6. from collections import defaultdict
  7. from logging import getLogger
  8. log = getLogger('webkitwindow')
  9. from util import traceguard
  10. from util.primitives.funcs import Delegate
  11.  
  12. try:
  13.     import webview
  14.     WebView = webview.WebView
  15. except ImportError:
  16.     from traceback import print_exc
  17.     print_exc()
  18.     
  19.     class WebKitWindow(wx.Panel):
  20.         pass
  21.  
  22.  
  23. MinimumTextSizeMultiplier = 0.5
  24. MaximumTextSizeMultiplier = 3
  25. TextSizeMultiplierRatio = 1.2
  26.  
  27. class WebKitWindow(WebView):
  28.     
  29.     def __init__(self, parent, initialContents = '', contentPath = 'file:///c:/', url = None, simple_events = False, external_links = True, **opts):
  30.         super(WebKitWindow, self).__init__(parent, size = wx.Size(200, 200), **opts)
  31.         self._jsqueue_enabled = True
  32.         self.jsqueue = []
  33.         self.js_to_stderr = False
  34.         self.ExternalLinks = external_links
  35.         Bind = self.Bind
  36.         Bind(wx.EVT_CONTEXT_MENU, self._WebKitWindow__OnContextMenu)
  37.         Bind(webview.EVT_WEBVIEW_LOAD, self.OnStateChanged)
  38.         Bind(webview.EVT_WEBVIEW_BEFORE_LOAD, self.OnBeforeLoad)
  39.         setup_webview_logging = setup_webview_logging
  40.         import gui.browser.webkit
  41.         setup_webview_logging(self, 'webview')
  42.         self.urltriggers = defaultdict(list)
  43.         if initialContents and url is not None:
  44.             raise ValueError('please specify initialContents or url, but not both')
  45.         url is not None
  46.         self.OnNav = Delegate()
  47.         self.OnDoc = Delegate()
  48.         self.LoadUrl = self.LoadURL
  49.         if url is not None:
  50.             self.LoadURL(url)
  51.         else:
  52.             self.SetPageSource(initialContents, 'file:///')
  53.         self.BlockWebKitMenu = True
  54.  
  55.     
  56.     def set_jsqueue_enabled(self, enabled):
  57.         self._jsqueue_enabled = enabled
  58.  
  59.     
  60.     def set_window_open_redirects_to_browser(self, url_callback = None):
  61.         add_window_open_redirect(self, url_callback)
  62.  
  63.     
  64.     def __OnContextMenu(self, e):
  65.         if not self.BlockWebKitMenu:
  66.             e.Skip()
  67.         
  68.  
  69.     
  70.     def SetPageSource(self, source, baseUrl):
  71.         if self._jsqueue_enabled:
  72.             del self.jsqueue[:]
  73.             self._js_paused = True
  74.         
  75.         WebView.SetPageSource(self, source, baseUrl)
  76.  
  77.     
  78.     def SetPage(self, source, baseUrl = None):
  79.         if baseUrl is None:
  80.             baseUrl = 'file:///'
  81.         
  82.         return self.SetPageSource(source, baseUrl)
  83.  
  84.     
  85.     def RunScript(self, s, cb = None, immediate = False):
  86.         pass
  87.  
  88.     
  89.     def AppendToPage(self, content):
  90.         escaped = content.replace('\n', '\\\n').replace('"', '\\"')
  91.         self.RunScript('appendMessage("%s");' % escaped)
  92.  
  93.     
  94.     def ScrollToBottom(self):
  95.         self.RunScript('window.scroll(0, 10000000);')
  96.  
  97.     
  98.     def OnStateChanged(self, e):
  99.         e.Skip()
  100.         state = e.GetState()
  101.         if state == webview.WEBVIEW_LOAD_NEGOTIATING:
  102.             self._pause_javascript()
  103.         elif state == webview.WEBVIEW_LOAD_DOC_COMPLETED:
  104.             self._execute_delayed_javascript()
  105.             self.OnDoc(e.URL)
  106.         
  107.         if state == webview.WEBVIEW_LOAD_DL_COMPLETED:
  108.             self.OnNav(e.URL)
  109.         
  110.  
  111.     
  112.     def _pause_javascript(self):
  113.         self._js_paused = True
  114.  
  115.     
  116.     def _execute_delayed_javascript(self):
  117.         self._js_paused = False
  118.         for script, cb in enumerate(self.jsqueue):
  119.             val = self._runscript(script)
  120.             if val != 'undefined':
  121.                 log.debug('result %d: %r' % (n, val))
  122.             
  123.             if cb is not None:
  124.                 cb(val)
  125.                 continue
  126.         
  127.         del self.jsqueue[:]
  128.  
  129.     
  130.     def _runscript(self, s):
  131.         return WebView.RunScript(self, s)
  132.  
  133.     
  134.     def OnBeforeLoad(self, e):
  135.         type = e.GetNavigationType()
  136.         e.Skip()
  137.         if e.IsCancelled():
  138.             return None
  139.         url = e.GetURL()
  140.         if type == webview.WEBVIEW_NAV_LINK_CLICKED:
  141.             callback = self.urltriggers.get(url, None)
  142.             if self.ExternalLinks and not url.startswith('javascript'):
  143.                 wx.LaunchDefaultBrowser(url)
  144.                 e.Cancel()
  145.             
  146.         
  147.  
  148.     
  149.     def OnURL(self, url, callback):
  150.         if not hasattr(callback, '__call__'):
  151.             raise TypeError('OnURL takes a callable')
  152.         hasattr(callback, '__call__')
  153.         self.urltriggers[url].append(callback)
  154.  
  155.     
  156.     def SetHTML(self, contents, baseUrl = 'file:///'):
  157.         self.SetPageSource(contents, baseUrl)
  158.  
  159.     HTML = property(webview.WebView.GetPageSource, SetHTML)
  160.     Title = property(webview.WebView.GetPageTitle, webview.WebView.SetPageTitle)
  161.     
  162.     def EditSource(self):
  163.         EditSource = EditSource
  164.         import gui.browser.webkit.webkiteditsource
  165.         return EditSource(self)
  166.  
  167.  
  168.  
  169. def add_window_open_redirect(self, url_callback = None, blank_opens_browser = False):
  170.     if url_callback is None:
  171.         url_callback = wx.LaunchDefaultBrowser
  172.     
  173.     
  174.     class WindowOpenRedirector((wx.webview.WebView,)):
  175.         
  176.         def __init__(self):
  177.             self.frame = wx.Frame(None)
  178.             wx.webview.WebView.__init__(self, self.frame)
  179.             self.Bind(wx.webview.EVT_WEBVIEW_BEFORE_LOAD, self._WindowOpenRedirector__onbeforeload)
  180.  
  181.         
  182.         def __onbeforeload(self, e):
  183.             print '*** caught window.open(%r)' % e.URL
  184.             url_callback(e.URL)
  185.             e.Cancel()
  186.             wx.CallAfter(self.Destroy)
  187.  
  188.  
  189.     
  190.     def _on_new_window(e):
  191.         print '_on_new_window', e, e.URL
  192.         if not e.URL:
  193.             e.WebView = WindowOpenRedirector()
  194.             e.Skip(False)
  195.         elif blank_opens_browser:
  196.             url_callback(e.URL)
  197.             e.Skip(False)
  198.         else:
  199.             e.Skip()
  200.  
  201.     self.Bind(wx.webview.EVT_WEBVIEW_NEW_WINDOW, _on_new_window)
  202.  
  203.