home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2009 September / maximum-cd-2009-09.iso / DiscContents / digsby_setup.exe / lib / gui / browser / webkit / webkitwindow.pyo (.txt) < prev   
Encoding:
Python Compiled Bytecode  |  2009-02-26  |  5.8 KB  |  151 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. from __future__ import with_statement
  5. import wx
  6. import sys
  7. from collections import defaultdict
  8. from logging import getLogger
  9. log = getLogger('webkitwindow')
  10. from util import traceguard
  11. from threading import currentThread
  12. from gui.browser import jsconsole
  13.  
  14. try:
  15.     import webview
  16.     WebView = webview.WebView
  17. except ImportError:
  18.     from traceback import print_exc
  19.     print_exc()
  20.     
  21.     class WebKitWindow(wx.Panel):
  22.         pass
  23.  
  24.  
  25.  
  26. class WebKitWindow(WebView):
  27.     
  28.     def __init__(self, parent, initialContents = '', contentPath = 'file:///c:/', url = None, **opts):
  29.         WebView.__init__(self, parent, size = wx.Size(200, 200), **opts)
  30.         self.jsqueue = []
  31.         self.ExternalLinks = True
  32.         Bind = self.Bind
  33.         Bind(webview.EVT_WEBVIEW_LOAD, self.OnStateChanged)
  34.         Bind(webview.EVT_WEBVIEW_BEFORE_LOAD, self.OnBeforeLoad)
  35.         Bind(webview.EVT_WEBVIEW_CONSOLE_MESSAGE, self.OnConsoleMessage)
  36.         self.urltriggers = defaultdict(list)
  37.         if initialContents and url is not None:
  38.             raise ValueError('please specify initialContents or url, but not both')
  39.         
  40.         if url is not None:
  41.             self.LoadURL(url)
  42.         else:
  43.             self.SetPageSource(initialContents, 'file:///')
  44.  
  45.     
  46.     def OnConsoleMessage(self, e):
  47.         jsconsole.on_message(e.GetMessage(), e.GetLineNumber(), e.GetSourceID())
  48.  
  49.     
  50.     def SetPageSource(self, source, baseUrl):
  51.         del self.jsqueue[:]
  52.         self._js_paused = True
  53.         WebView.SetPageSource(self, source, baseUrl)
  54.  
  55.     
  56.     def RunScript(self, s):
  57.         if self._js_paused:
  58.             log.debug('delaying execution of JS')
  59.             self.jsqueue.append(s)
  60.         else:
  61.             return self._runscript(s)
  62.  
  63.     
  64.     def AppendToPage(self, content):
  65.         escaped = content.replace('\n', '\\\n').replace('"', '\\"')
  66.         self.RunScript('appendMessage("%s");' % escaped)
  67.  
  68.     
  69.     def ScrollToBottom(self):
  70.         self.RunScript('window.scroll(0, 10000000);')
  71.  
  72.     
  73.     def OnStateChanged(self, e):
  74.         e.Skip()
  75.         state = e.GetState()
  76.         if state == webview.WEBVIEW_LOAD_NEGOTIATING:
  77.             log.debug('WEBVIEW_LOAD_NEGOTIATING')
  78.             self._pause_javascript()
  79.         elif state == webview.WEBVIEW_LOAD_DOC_COMPLETED:
  80.             log.debug('WEBVIEW_LOAD_DOC_COMPLETED, calling _execute_delayed_javascript')
  81.             self._execute_delayed_javascript()
  82.         
  83.  
  84.     
  85.     def _pause_javascript(self):
  86.         self._js_paused = True
  87.  
  88.     
  89.     def _execute_delayed_javascript(self):
  90.         self._js_paused = False
  91.         if self.jsqueue:
  92.             log.info('done loading, executing %d JS calls', len(self.jsqueue))
  93.         
  94.         for n, script in enumerate(self.jsqueue):
  95.             val = self._runscript(script)
  96.             if val != 'undefined':
  97.                 log.info('result %d: %r' % (n, val))
  98.                 continue
  99.         
  100.         del self.jsqueue[:]
  101.  
  102.     
  103.     def _runscript(self, s):
  104.         log.debug_s('running script:')
  105.         log.debug_s(repr(s))
  106.         return WebView.RunScript(self, s)
  107.  
  108.     
  109.     def OnBeforeLoad(self, e):
  110.         type = e.GetNavigationType()
  111.         e.Skip()
  112.         if type == webview.WEBVIEW_NAV_LINK_CLICKED:
  113.             url = e.GetURL()
  114.             callback = self.urltriggers.get(url, None)
  115.             if callback is not None:
  116.                 traceguard.__enter__()
  117.                 
  118.                 try:
  119.                     callback()
  120.                 finally:
  121.                     pass
  122.  
  123.                 e.Cancel()
  124.             
  125.             if self.ExternalLinks and not url.startswith('javascript'):
  126.                 wx.LaunchDefaultBrowser(url)
  127.                 e.Cancel()
  128.             
  129.         
  130.  
  131.     
  132.     def OnURL(self, url, callback):
  133.         if not hasattr(callback, '__call__'):
  134.             raise TypeError('OnURL takes a callable')
  135.         
  136.         self.urltriggers[url].append(callback)
  137.  
  138.     
  139.     def SetHTML(self, contents, baseUrl = 'file:///'):
  140.         self.SetPageSource(contents, baseUrl)
  141.  
  142.     HTML = property(webview.WebView.GetPageSource, SetHTML)
  143.     Title = property(webview.WebView.GetPageTitle, webview.WebView.SetPageTitle)
  144.     
  145.     def EditSource(self):
  146.         EditSource = EditSource
  147.         import gui.browser.webkit.webkiteditsource
  148.         return EditSource(self)
  149.  
  150.  
  151.