#-*- coding: UTF-8 -*-
#/usr/bin/env python3
from PyQt5 . QtCore import QFile , QIODevice , Qt , QTextStream , QUrl
from PyQt5 . QtWidgets import ( QAction , QApplication , QLineEdit , QMainWindow ,
QSizePolicy , QStyle , QTextEdit )
from PyQt5 . QtNetwork import QNetworkProxyFactory , QNetworkRequest
from PyQt5 . QtWebKitWidgets import QWebPage , QWebInspector , QWebView
#import jquery_rc
class MainWindow ( QMainWindow ) :
def __init__ ( self , url ) :
super ( MainWindow , self ) . __init__ ( )
self . progress = 0
fd = QFile ( " :/views/static/js/brython.js " )
if fd . open ( QIODevice . ReadOnly | QFile . Text ) :
self . Bryton = QTextStream ( fd ) . readAll ( )
fd . close ( )
else :
self . Brython = ' '
QNetworkProxyFactory . setUseSystemConfiguration ( True )
self . view = QWebView ( self )
self . view . load ( url )
self . view . loadFinished . connect ( self . adjustLocation )
self . view . titleChanged . connect ( self . adjustTitle )
self . view . loadProgress . connect ( self . setProgress )
self . view . loadFinished . connect ( self . finishLoading )
self . inspector = QWebInspector ( )
self . inspector . setPage ( self . view . page ( ) )
toolBar = self . addToolBar ( " Navigation " )
toolBar . addAction ( self . view . pageAction ( QWebPage . Back ) )
toolBar . addAction ( self . view . pageAction ( QWebPage . Forward ) )
toolBar . addAction ( self . view . pageAction ( QWebPage . Reload ) )
toolBar . addAction ( self . view . pageAction ( QWebPage . Stop ) )
self . setCentralWidget ( self . view )
def viewSource ( self ) :
accessManager = self . view . page ( ) . networkAccessManager ( )
request = QNetworkRequest ( self . view . url ( ) )
reply = accessManager . get ( request )
reply . finished . connect ( self . slotSourceDownloaded )
def slotSourceDownloaded ( self ) :
reply = self . sender ( )
self . textEdit = QTextEdit ( )
self . textEdit . setAttribute ( Qt . WA_DeleteOnClose )
self . textEdit . show ( )
self . textEdit . setPlainText ( QTextStream ( reply ) . readAll ( ) )
self . textEdit . resize ( 600 , 400 )
reply . deleteLater ( )
def adjustLocation ( self ) :
#self.locationEdit.setText(self.view.url().toString())
print ( " Change url " )
print ( self . view . url ( ) . toString ( ) )
#elf.view.load(self.view.url())
def changeLocation ( self ) :
#url = QUrl.fromUserInput(self.locationEdit.text())
self . view . load ( url )
self . view . setFocus ( )
def adjustTitle ( self ) :
if 0 < self . progress < 100 :
self . setWindowTitle ( " %s ( %s %% ) " % ( self . view . title ( ) , self . progress ) )
else :
self . setWindowTitle ( self . view . title ( ) )
def setProgress ( self , p ) :
self . progress = p
self . adjustTitle ( )
def finishLoading ( self ) :
self . progress = 100
self . adjustTitle ( )
self . view . page ( ) . mainFrame ( ) . evaluateJavaScript ( self . Brython )
def highlightAllLinks ( self ) :
code = """ $( ' a ' ).each(
function ( ) {
$ ( this ) . css ( ' background-color ' , ' yellow ' )
}
) """
self . view . page ( ) . mainFrame ( ) . evaluateJavaScript ( code )
def rotateImages ( self , invert ) :
if invert :
code = """
$ ( ' img ' ) . each (
function ( ) {
$ ( this ) . css ( ' -webkit-transition ' , ' -webkit-transform 2s ' ) ;
$ ( this ) . css ( ' -webkit-transform ' , ' rotate(180deg) ' )
}
) """
else :
code = """
$ ( ' img ' ) . each (
function ( ) {
$ ( this ) . css ( ' -webkit-transition ' , ' -webkit-transform 2s ' ) ;
$ ( this ) . css ( ' -webkit-transform ' , ' rotate(0deg) ' )
}
) """
self . view . page ( ) . mainFrame ( ) . evaluateJavaScript ( code )
def removeGifImages ( self ) :
code = " $( ' [src*=gif] ' ).remove() "
self . view . page ( ) . mainFrame ( ) . evaluateJavaScript ( code )
def removeInlineFrames ( self ) :
code = " $( ' iframe ' ).remove() "
self . view . page ( ) . mainFrame ( ) . evaluateJavaScript ( code )
def removeObjectElements ( self ) :
code = " $( ' object ' ).remove() "
self . view . page ( ) . mainFrame ( ) . evaluateJavaScript ( code )
def removeEmbeddedElements ( self ) :
code = " $( ' embed ' ).remove() "
self . view . page ( ) . mainFrame ( ) . evaluateJavaScript ( code )
if __name__ == ' __main__ ' :
import sys
app = QApplication ( sys . argv )
if len ( sys . argv ) > 1 :
url = QUrl ( sys . argv [ 1 ] )
else :
url = QUrl ( ' http://localhost:8000 ' )
browser = MainWindow ( url )
browser . show ( )
sys . exit ( app . exec_ ( ) )