class WebView(QWebView):

    def __init__(self, parent, realpath):
        super(WebView, self).__init__(parent)
        self.mainapp = parent

        # create an obj for communicate with js
        self.jsobj = JsObj(parent)
        self.page().mainFrame().addToJavaScriptWindowObject("picota", self.jsobj)

        self._home = "file:///%s/www/remote.html" % realpath.replace("\\", "/")
        self.gohome()

        # Inspector (for debug ..)
        settings = self.page().settings()
        settings.setAttribute(settings.DeveloperExtrasEnabled, True)
        self.inspector = QWebInspector()
        self.inspector.setPage(self.page())

    def gohome(self):
        self.load(QUrl(self._home))

    def goto(self, url):
        self.load(QUrl(url))

    def eval(self, text):
        # code = json.dumps(text)
        code = text
        return self.page().mainFrame().evaluateJavaScript(code)
Exemplo n.º 2
0
class WebViewPlus(QWebView):
    """
    WebView 커스터마이징
     - inspector 추가
     - jsconsole 로그 추가
     - webview에서 document로 이벤트를 발생함.
    """

    customEvent = """
    var event = document.createEvent("CustomEvent");
    event.initCustomEvent("{type}", true, true, {detail} );
    document.dispatchEvent(event);
    """

    def __init__(self):
        super().__init__()
        self.setPage(WebPagePlus())
        self._setupInspector()

    def _setupInspector(self):
        """
        F12키를 누르면 "개발자 도구"가 노출됨
        """
        # webinspector
        self.settings().setAttribute(QWebSettings.DeveloperExtrasEnabled, True)
        self.webInspector = QWebInspector(self)
        self.webInspector.setPage(self.page())

        #Keyboard shortcuts
        shortcut = {}
        shortcut['F12'] = QShortcut(self)
        shortcut['F12'].setContext(Qt.ApplicationShortcut)
        shortcut['F12'].setKey(Qt.Key_F12)
        shortcut['F12'].activated.connect(self._toggleInspector)
        #F5 - Page reloading
        shortcut['F5'] = QShortcut(self)
        shortcut['F5'].setKey(Qt.Key_F5)
        shortcut['F5'].activated.connect(self.reload)

        # Devtools
        self.webInspector.setVisible(True)
        self.devTool = QDialog(self)
        self.devTool.setWindowTitle("Development Tool")
        self.devTool.resize(950, 400)
        layout = QGridLayout()
        layout.setContentsMargins(0,0,0,0)
        layout.addWidget(self.webInspector)
        self.devTool.setLayout(layout)

    def _toggleInspector(self):
        """
        F12키를 다시 누르면 "개발자 도구"가 사라짐
        """
        # self.webInspector.setVisible(not self.webInspector.isVisible())
        self.devTool.setVisible(not self.devTool.isVisible())

    # webview의 document에 이벤트를 발생함.
    def fireEvent(self, type, detail):
        self.page().mainFrame().evaluateJavaScript(WebViewPlus.customEvent.format(type=type, detail=detail))
Exemplo n.º 3
0
class WebPage(QWebPage):
	def __init__(self):
		super(WebPage, self).__init__()
		self.inspector = QWebInspector()
		self.inspector.setPage(self)
		self.inspector.resize(1024, 400)
		diskCache = QNetworkDiskCache(self)
		diskCache.setCacheDirectory(assets.fs.dataPath() + '/Cache')
		self.networkAccessManager().setCache(diskCache)
		self.networkAccessManager().setCookieJar(assets.dataJar)

	def acceptNavigationRequest(self, frame, request, type):
		if(type == QWebPage.NavigationTypeLinkClicked):
			url = request.url().toString()
			if(frame == self.mainFrame()):
				self.view().load(url)
				return False
			elif frame == None:
				# self.createWindow(QWebPage.WebBrowserWindow, url)
				webbrowser.open(request.url().toString())
				return False
		return QWebPage.acceptNavigationRequest(self, frame, request, type)

	# def downloadRequested(self, request):
	# 	print(request)

	def findText(self, text):
		return super(WebPage, self).findText(text, QWebPage.FindBackward)

	def showInspector(self):
		self.inspector.show()
		self.inspector.activateWindow()

	def hideInspector(self):
		self.inspector.close()

	def createWindow(self, type, url = None):
		from window import Window
		window = Window(self.view().parentWidget(), url, isDialog = (type == QWebPage.WebModalDialog))
		return window.webView.page()

	def javaScriptAlert(self, frame, msg):
		QMessageBox.information(self.view().parentWidget(), None, msg)

	def javaScriptConfirm(self, frame, msg):
		return QMessageBox.question(self.view().parentWidget(), None, msg) == QMessageBox.Yes

	# There is a bug in PyQt
	# def javaScriptPrompt(self, frame, msg, defaultValue):
	# 	result = QInputDialog.getText(self.view().parentWidget(), None, msg)
	# 	return (result[1], result[0])

	def close(self):
		self.hideInspector()
		assets.dataJar.save()
Exemplo n.º 4
0
class WebInspector(QDialog):

    def __init__(self, parent, page):
        QDialog.__init__(self, parent)
        self.setWindowFlags(self.windowFlags() | Qt.WindowMinMaxButtonsHint)
        self.setWindowTitle(_('Inspect book code'))
        self.setWindowIcon(QIcon(I('debug.png')))
        l = QVBoxLayout()
        self.setLayout(l)

        self.inspector = QWebInspector(self)
        self.inspector.setPage(page)
        l.addWidget(self.inspector)

        self.bb = bb = QDialogButtonBox(QDialogButtonBox.Close)
        l.addWidget(bb)
        bb.accepted.connect(self.accept)
        bb.rejected.connect(self.reject)

        self.resize(self.sizeHint())

        geom = gprefs.get('viewer_inspector_geom', None)
        if geom is not None:
            self.restoreGeometry(geom)

    def save_geometry(self):
        gprefs['viewer_inspector_geom'] = bytearray(self.saveGeometry())

    def closeEvent(self, ev):
        self.save_geometry()
        return QDialog.closeEvent(self, ev)

    def accept(self):
        self.save_geometry()
        QDialog.accept(self)

    def reject(self):
        self.save_geometry()
        QDialog.reject(self)
Exemplo n.º 5
0
class WebInspector(QWidget):
    """WebInspector widget class"""

    def __init__(self, parent):
        super(WebInspector, self).__init__(parent)
        vbox = QVBoxLayout(self)
        self._webInspector = QWebInspector(self)
        vbox.addWidget(self._webInspector)
        self.btnDock = QPushButton(translations.TR_UNDOCK)
        vbox.addWidget(self.btnDock)

        ExplorerContainer.register_tab(translations.TR_TAB_WEB_INSPECTOR, self)
        IDE.register_service('web_inspector', self)

    def refresh_inspector(self):
        """Refresh WebInspector widget by hiding and showing"""
        self._webInspector.hide()
        self._webInspector.show()

    def set_inspection_page(self, page):
        """Method to load an argument page object on the WebInspector"""
        self._webInspector.setPage(page)
        self._webInspector.setVisible(True)
Exemplo n.º 6
0
class WebView(QWebView):

    def __init__(self, parent=None):
        QWebView.__init__(self, parent)
        self.inspector = QWebInspector(self)
        w = QApplication.instance().desktop().availableGeometry(self).width()
        self._size_hint = QSize(int(w/3), int(w/2))
        self._page = WebPage(self)
        self.setPage(self._page)
        self.inspector.setPage(self._page)
        self.clear()

    def sizeHint(self):
        return self._size_hint

    def refresh(self):
        self.pageAction(self.page().Reload).trigger()

    @dynamic_property
    def scroll_pos(self):
        def fget(self):
            mf = self.page().mainFrame()
            return (mf.scrollBarValue(Qt.Horizontal), mf.scrollBarValue(Qt.Vertical))
        def fset(self, val):
            mf = self.page().mainFrame()
            mf.setScrollBarValue(Qt.Horizontal, val[0])
            mf.setScrollBarValue(Qt.Vertical, val[1])
        return property(fget=fget, fset=fset)

    def clear(self):
        self.setHtml(_(
            '''
            <h3>Live preview</h3>

            <p>Here you will see a live preview of the HTML file you are currently editing.
            The preview will update automatically as you make changes.

            <p style="font-size:x-small; color: gray">Note that this is a quick preview
            only, it is not intended to simulate an actual ebook reader. Some
            aspects of your ebook will not work, such as, page breaks and
            page margins.

            '''))
        self.page().current_root = None

    def setUrl(self, qurl):
        self.page().current_root = current_container().root
        return QWebView.setUrl(self, qurl)

    def inspect(self):
        self.inspector.parent().show()
        self.inspector.parent().raise_()
        self.pageAction(self.page().InspectElement).trigger()

    def contextMenuEvent(self, ev):
        menu = QMenu(self)
        p = self.page()
        mf = p.mainFrame()
        r = mf.hitTestContent(ev.pos())
        url = unicode(r.linkUrl().toString(QUrl.None)).strip()
        ca = self.pageAction(QWebPage.Copy)
        if ca.isEnabled():
            menu.addAction(ca)
        menu.addAction(actions['reload-preview'])
        menu.addAction(QIcon(I('debug.png')), _('Inspect element'), self.inspect)
        if url.partition(':')[0].lower() in {'http', 'https'}:
            menu.addAction(_('Open link'), partial(open_url, r.linkUrl()))
        menu.exec_(ev.globalPos())
Exemplo n.º 7
0
class Window(QWidget):

    session = dict()

    def __init__(self, config):
        super(Window, self).__init__()

        self.config = config

        self.base_uri = QUrl.fromLocalFile(os.path.dirname(__file__)).toString()

        # initial web view add handle all link and form submitted
        self.web_view = QWebView(self)
        self.web_view.setPage(WebPage())
        self.web_view.page().setLinkDelegationPolicy(QWebPage.DelegateAllLinks)
        self.web_view.page().linkClicked.connect(self.link_clicked)
        # self.web_view.page().urlChanged.connect(self.url_changed)
        self.web_view.page().loadFinished.connect(self.load_finished)
        self.web_view.page().loadStarted.connect(self.load_started)

        self.web_view.page().form_submitted.connect(self.handle_form_submitted)
        self.web_view.page().request_reload.connect(self.handle_reload)

        # initial template lookup
        self.tempalte_lookup = TemplateLookup(
            directories=[self.config.settings.get("mako.directories")],
            module_directory=self.config.settings.get("mako.module_directory"),
            input_encoding="utf-8",
        )

        # layout attribute
        layout = QVBoxLayout(self)
        layout.setContentsMargins(0, 0, 0, 0)

        # add debug inspector
        if self.config.settings.get("debug", False):
            self.setup_inspector()
            self.splitter = QSplitter(self)
            self.splitter.setOrientation(Qt.Vertical)
            layout.addWidget(self.splitter)
            self.splitter.addWidget(self.web_view)
            self.splitter.addWidget(self.web_inspector)

        else:
            layout.addWidget(self.web_view)

    def setup_inspector(self):
        """
            This code from http://agateau.com/2012/02/03/pyqtwebkit-experiments-part-2-debugging/
        """
        page = self.web_view.page()
        page.settings().setAttribute(QWebSettings.DeveloperExtrasEnabled, True)
        self.web_inspector = QWebInspector(self)
        self.web_inspector.setPage(page)

        shortcut = QShortcut(self)
        shortcut.setKey(Qt.Key_F12)
        shortcut.activated.connect(self.toggle_inspector)
        self.web_inspector.setVisible(False)

    def toggle_inspector(self):
        self.web_inspector.setVisible(not self.web_inspector.isVisible())

    def handle_form_submitted(self, qurl, elements=dict()):

        #       print("\n\ngot url: ", qurl)
        qqurl = QUrlQuery(qurl)
        for key, value in qqurl.queryItems():
            elements[key] = value

        self.render(qurl.path(), elements)
        # do stuff with elements...

    #        for item in elements.items():
    #            print ("got: ", item)

    def handle_reload(self, qurl):
        self.render(qurl.path())

    def load_started(self):
        """"""
        # print("load_started ->: ", self.web_view.url())

    def load_finished(self, finished):
        """"""
        # print("load_finished ->: ", finished)

    #        if finished:
    #            self.web_view.setUrl(QUrl('/login'))

    #     def url_changed(self, qurl):
    #         ''''''
    # print("url_changed ->: ", qurl)

    def link_clicked(self, qurl):
        # print("link_clicked ->: ", qurl)
        qqurl = QUrlQuery(qurl)
        elements = {}
        # print("got link_clicked url: ", qurl)
        for key, value in qqurl.queryItems():
            elements[key] = value

        self.render(qurl.path(), elements)
        # self.render(qurl.path())

    def render(self, url, args=None):
        self.config.current_route_path = url
        print("current_route_path: ", self.config.current_route_path)
        logger.debug("url: %s" % url)
        route = self.config.get_route(url)
        logger.debug("view: %s" % route)

        if route is not None:
            view = route.get("view")
            context_obj = context.ResourceContext(self.config, self.session)
            context_obj.add_args(args)
            try:
                response = view(context_obj)
            except Exception as e:
                if e.args[0] == "Request Exit":
                    self.close()
                    return

                logger.exception(e)
                # need error page
                return self.link_clicked("/home")

            if not isinstance(response, dict):
                if isinstance(response, QUrl):
                    return self.link_clicked(response)
            #                    url = response.path()
            #                    print('window url', url)
            #                    return self.render(url)
            #                else:
            #                    # need error page
            #                    return self.render('/login')

            logger.debug("response: %s" % response)

            template = self.tempalte_lookup.get_template(self.config.get_route(url).get("renderer"))

            response["request"] = context_obj
            response["base_uri"] = self.base_uri
            html = template.render(**response)

            self.web_view.setHtml(html, QUrl("file://" + url))
            # self.web_view.setHtml(html)
            # self.web_view.load(a)

    def welcome(self):
        context_obj = context.ResourceContext(self.config, self.session)
        return self.link_clicked(context_obj.redirect_url("login"))
Exemplo n.º 8
0
class WebViewPlus(QWebView):
    """
    WebView 커스터마이징
     - inspector 추가
     - jsconsole 로그 추가
     - webview에서 document로 이벤트를 발생함.
    """

    customEvent = """
    var event = document.createEvent("CustomEvent");
    event.initCustomEvent("{type}", true, true, {detail} );
    document.dispatchEvent(event);
    """

    def __init__(self):
        super().__init__()
        self.setPage(WebPagePlus())
        self._setupWebview()

    def _setupWebview(self):
        settings = self.settings()
        currentPath = QDir.currentPath()
        settings.setAttribute(QWebSettings.LocalStorageEnabled, True)
        settings.setAttribute(QWebSettings.OfflineStorageDatabaseEnabled, True)
        settings.setAttribute(QWebSettings.OfflineWebApplicationCacheEnabled, True)
        settings.setAttribute(QWebSettings.DnsPrefetchEnabled, True)
        settings.setAttribute(QWebSettings.CSSGridLayoutEnabled, True)
        settings.setAttribute(QWebSettings.JavascriptCanOpenWindows, True)
        settings.setAttribute(QWebSettings.JavascriptCanCloseWindows, True)
        settings.setAttribute(QWebSettings.JavascriptCanAccessClipboard, True)
        settings.setAttribute(QWebSettings.DeveloperExtrasEnabled, True)
        settings.setOfflineStoragePath(currentPath + "/storage/offline")
        settings.setOfflineWebApplicationCachePath(currentPath + "/storage/webcache")
        settings.setLocalStoragePath(currentPath + "/storage/local")
        settings.setOfflineStorageDefaultQuota(5 * 1024 * 1024)
        settings.setOfflineWebApplicationCacheQuota(5 * 1024 * 1024)
        settings.enablePersistentStorage()
        
        """
        F12키를 누르면 "개발자 도구"가 노출됨
        """
        # webinspector
        self.webInspector = QWebInspector(self)
        self.webInspector.setPage(self.page())

        #Keyboard shortcuts
        shortcut = {}
        shortcut['F4'] = QShortcut(self)
        shortcut['F4'].setContext(Qt.ApplicationShortcut)
        shortcut['F4'].setKey(Qt.Key_F4)
        shortcut['F4'].activated.connect(self._toggleInspector)
        #F5 - Page reloading
        shortcut['F5'] = QShortcut(self)
        shortcut['F5'].setKey(Qt.Key_F5)
        shortcut['F5'].activated.connect(self.reload)

        # Devtools
        self.webInspector.setVisible(True)
        self.devTool = QDialog(self)
        self.devTool.setWindowTitle("Development Tool")
        self.devTool.resize(950, 400)
        layout = QGridLayout()
        layout.setContentsMargins(0,0,0,0)
        layout.addWidget(self.webInspector)
        self.devTool.setLayout(layout)

    def _toggleInspector(self):
        """
        F4키를 다시 누르면 "개발자 도구"가 토글됨.
        """
        self.devTool.setVisible(not self.devTool.isVisible())

    # webview의 document에 이벤트를 발생함.
    def fireEvent(self, type, detail):
        self.page().mainFrame().evaluateJavaScript(WebViewPlus.customEvent.format(type=type, detail=detail))
Exemplo n.º 9
0
class WebView(QWebView):
    def __init__(self, parent=None):
        QWebView.__init__(self, parent)
        self.inspector = QWebInspector(self)
        w = QApplication.instance().desktop().availableGeometry(self).width()
        self._size_hint = QSize(int(w / 3), int(w / 2))
        self._page = WebPage(self)
        self.setPage(self._page)
        self.inspector.setPage(self._page)
        self.clear()
        self.setAcceptDrops(False)

    def sizeHint(self):
        return self._size_hint

    def refresh(self):
        self.pageAction(self.page().Reload).trigger()

    @dynamic_property
    def scroll_pos(self):
        def fget(self):
            mf = self.page().mainFrame()
            return (mf.scrollBarValue(Qt.Horizontal),
                    mf.scrollBarValue(Qt.Vertical))

        def fset(self, val):
            mf = self.page().mainFrame()
            mf.setScrollBarValue(Qt.Horizontal, val[0])
            mf.setScrollBarValue(Qt.Vertical, val[1])

        return property(fget=fget, fset=fset)

    def clear(self):
        self.setHtml(
            _('''
            <h3>Live preview</h3>

            <p>Here you will see a live preview of the HTML file you are currently editing.
            The preview will update automatically as you make changes.

            <p style="font-size:x-small; color: gray">Note that this is a quick preview
            only, it is not intended to simulate an actual e-book reader. Some
            aspects of your e-book will not work, such as page breaks and page margins.
            '''))

    def inspect(self):
        self.inspector.parent().show()
        self.inspector.parent().raise_()
        self.pageAction(self.page().InspectElement).trigger()

    def contextMenuEvent(self, ev):
        menu = QMenu(self)
        p = self.page()
        mf = p.mainFrame()
        r = mf.hitTestContent(ev.pos())
        url = unicode_type(r.linkUrl().toString(NO_URL_FORMATTING)).strip()
        ca = self.pageAction(QWebPage.Copy)
        if ca.isEnabled():
            menu.addAction(ca)
        menu.addAction(actions['reload-preview'])
        menu.addAction(QIcon(I('debug.png')), _('Inspect element'),
                       self.inspect)
        if url.partition(':')[0].lower() in {'http', 'https'}:
            menu.addAction(_('Open link'), partial(open_url, r.linkUrl()))
        menu.exec_(ev.globalPos())
Exemplo n.º 10
0
class WebViewPlus(QWebView):
    """
    WebView 커스터마이징
     - inspector 추가
     - jsconsole 로그 추가
     - webview에서 document로 이벤트를 발생함.
    """

    customEvent = """
    var event = document.createEvent("CustomEvent");
    event.initCustomEvent("{type}", true, true, {detail} );
    document.dispatchEvent(event);
    """

    def __init__(self):
        super().__init__()
        self.setPage(WebPagePlus())
        self._setupWebview()

    def _setupWebview(self):
        self.settings().setAttribute(QWebSettings.LocalStorageEnabled, True)
        self.settings().setAttribute(
            QWebSettings.OfflineStorageDatabaseEnabled, True)
        self.settings().setLocalStoragePath("storage")
        """
        F12키를 누르면 "개발자 도구"가 노출됨
        """
        # webinspector
        self.settings().setAttribute(QWebSettings.DeveloperExtrasEnabled, True)
        self.webInspector = QWebInspector(self)
        self.webInspector.setPage(self.page())

        #Keyboard shortcuts
        shortcut = {}
        shortcut['F4'] = QShortcut(self)
        shortcut['F4'].setContext(Qt.ApplicationShortcut)
        shortcut['F4'].setKey(Qt.Key_F4)
        shortcut['F4'].activated.connect(self._toggleInspector)
        #F5 - Page reloading
        shortcut['F5'] = QShortcut(self)
        shortcut['F5'].setKey(Qt.Key_F5)
        shortcut['F5'].activated.connect(self.reload)

        # Devtools
        self.webInspector.setVisible(True)
        self.devTool = QDialog(self)
        self.devTool.setWindowTitle("Development Tool")
        self.devTool.resize(950, 400)
        layout = QGridLayout()
        layout.setContentsMargins(0, 0, 0, 0)
        layout.addWidget(self.webInspector)
        self.devTool.setLayout(layout)

    def _toggleInspector(self):
        """
        F4키를 다시 누르면 "개발자 도구"가 토글됨.
        """
        self.devTool.setVisible(not self.devTool.isVisible())

    # webview의 document에 이벤트를 발생함.
    def fireEvent(self, type, detail):
        self.page().mainFrame().evaluateJavaScript(
            WebViewPlus.customEvent.format(type=type, detail=detail))
Exemplo n.º 11
0
class Ui_MainWindow(QMainWindow):
    #Notice that this is the parent window.
    def __init__(self, *args, **kwargs):
        super(Ui_MainWindow, self).__init__(*args, **kwargs)

#Begin page loading

    def begin(self):
        self.label.setText(label.begin())

    def complete(self):
        self.label.setText(label.complete())

#####Download functions.

    def downloads(self):
        options = QFileDialog.Options()
        options |= QFileDialog.DontUseNativeDialog
        fileName, _ = QFileDialog.getSaveFileName(self.web,
                                                  "Save as",
                                                  "",
                                                  "All Files (*)",
                                                  options=options)
        address = self.address.text()
        if fileName:
            subprocess.Popen(['wget', address, '-O', fileName])

#Set the label text.

    def loadings(self):
        self.label.setText(label.loadings())
####################################################
#####Printer functions.

    def handlePreview(self):
        dialog = QPrintPreviewDialog()
        dialog.paintRequested.connect(self.handlePaintRequest)
        dialog.exec_()

    def handlePaintRequest(self, printer):
        self.web.render(QPainter(printer))

#Set the label text.

    def printme(self):
        self.label.setText(label.printer())
####################################################
#Open html5 playback.

    def html5(self):
        subprocess.Popen(['python', '/usr/share/html5.py'])
        self.label.setText(label.html5())
####################################################
#####Page navigation functions.

#Back function.

    def backs(self, url):
        goback = self.web.back()

#Forward function.

    def forwards(self, url):
        self.web.forward()

#Reload function.

    def reloads(self):
        self.web.reload()

#System arguments support / Go to address / Find text functionality.

    def system_arguments(self):
        if len(sys.argv) == 1:
            url = self.address.text()
            if url.startswith('http://'):
                change = str(url)
                self.address.setText(change)
                load = self.address.text()
                self.label.setText(load)
                self.web.load(QUrl(load))
                del sys.argv[1:]

            elif url.startswith('https://'):
                change = str(url)
                self.address.setText(change)
                load = self.address.text()
                self.label.setText(load)
                self.web.load(QUrl(load))
                del sys.argv[1:]

            elif url.startswith('find:'):
                load = self.address.text()
                self.result0 = load.replace('find:', '')
                print "Finding:" + self.result0
                self.web.findText(self.result0)
                self.label.setText(label.finding())
                del sys.argv[1:]

            else:
                add = "https://" + url
                change = str(add)
                self.address.setText(change)
                load = self.address.text()
                self.label.setText(load)
                self.web.load(QUrl(load))
                del sys.argv[1:]

        else:
            self.location = sys.argv[1:]
            self.temp = str(self.location)
            self.result0 = self.temp.replace('[', '')
            self.result1 = self.result0.replace(']', '')
            self.result_final = self.result1.replace("'", '')

            url = self.result_final
            if url.startswith('http://'):
                change = str(url)
                self.address.setText(change)
                load = self.address.text()
                self.label.setText(load)
                self.loading1 = self.web.load(QUrl(load))
                del sys.argv[1:]

            elif url.startswith('https://'):
                change = str(url)
                self.address.setText(change)
                load = self.address.text()
                self.label.setText(load)
                self.loading1 = self.web.load(QUrl(load))
                del sys.argv[1:]

            else:
                change = str("https://" + url)
                self.address.setText(change)
                load = self.address.text()
                self.label.setText(load)
                self.web.load(QUrl(load))
                del sys.argv[1:]

#Home page function.

    def homes(self):
        self.home = "http://www.techtimejourney.net/postx_pages/postx.html"
        self.address.setText(self.home)
        self.web.load(QUrl(self.home))
####################################################
#####Page Zoom functions.

    def zoomins(self):
        self.web.setZoomFactor(self.web.zoomFactor() + .2)

    def zoomouts(self):
        self.web.setZoomFactor(self.web.zoomFactor() - .2)

##################################
#####Search engines & default (Now. Startpage).

    def extra(self):
        search = self.Search.text()
        text = self.switch_2.text()
        if text == ('wolf'):

            #Wolfram Alpha search.
            adds1 = "https://www.wolframalpha.com/input/?i=" + search
            self.web.load(QUrl(adds1))
            print adds1

        elif text == ('wiki'):

            #Wikipedia search (english).
            adds1 = "https://en.wikipedia.org/w/index.php?title=Special:Search&profile=default&fulltext=Search&search=" + search
            self.web.load(QUrl(adds1))
            print adds1

        elif text == ('tube'):

            #Youtube search (english).
            adds1 = "https://www.youtube.com/results?search_query=" + search
            self.web.load(QUrl(adds1))
            print adds1

        elif text == ('gs'):

            #Startpage search (english).
            adds1 = "https://startpage.com/do/search?query=" + search
            self.web.load(QUrl(adds1))
            print adds1

        else:
            adds1 = "https://startpage.com/do/search?query=" + search
            self.web.load(QUrl(adds1))
            print adds1

############################################
#####Bookmark functions.

    def bookmarks(self, widget):
        home = os.getenv("HOME")
        print home
        site = str(self.address.text())
        os.chdir(home)
        f = open('.bookmarks.html', 'a')
        f.write("<br>" + "<a href=" + site + ">" + site + "</a>")
        f.close()

#Set label text.

    def notice_new_bookmark(self):
        self.label.setText(label.bookmarked())

#Open bookmarks file.

    def bookopen(self, widget):
        home = os.getenv("HOME")
        print home
        home = os.getenv("HOME")
        os.chdir(home)
        head = "file:///"
        books = ".bookmarks.html"
        adds = self.address.setText(head + home + '/' + books)
        adda = self.address.text()
        self.web.load(QUrl(adda))
####################################################
#####Other functions.
#Label reset.

    def reset(self):
        self.label.setText('')

#About messagebox.

    def about(self):
        buttonReply = QMessageBox.question(
            self,
            "RunIT-QT Browser Copyright (c) 2015 JJ Posti <techtimejourney.net>",
            "RunIT-QT  comes with ABSOLUTELY NO WARRANTY;  This is free software, and you are welcome to redistribute it under  GPL Version 2, June 1991 This is the 0.6.3 version(March 2018). ___________________________________________________________________________ \n \nArgument support (since 0.6).\nStart browser like this: runit 'gooogle.fi' and follow statusbar instructions. ___________________________________________________________________________\n \nFind text from html(since 0.6).\nWrite find:something to address field and press enter to find the first entry. Press enter again to find the second entry etc. ___________________________________________________________________________\n \nRight-click menu:Save image functionality(since 0.6). Right-click upon an image and choose Copy Image address. Next choose Save image and the Save as dialog should open.",
            QMessageBox.Ok)
        if buttonReply == QMessageBox.Ok:
            pass
####################################################
#####UI Parts.

    def setupUi(self, MainWindow):
        MainWindow.setObjectName(_fromUtf8("MainWindow"))
        MainWindow.setStyleSheet("background-color:#a7a7a7;font-size: 12px;")

        MainWindow.setMaximumHeight(16777215)
        MainWindow.setMaximumWidth(16777215)

        self.centralwidget = QWidget(MainWindow)
        self.centralwidget.setObjectName(_fromUtf8("centralwidget"))

        self.toolbar = QToolBar()
        self.toolbar.setObjectName(_fromUtf8("toolbar"))
        self.verticalLayout_2 = QVBoxLayout(self.centralwidget)
        self.verticalLayout_2.setObjectName(_fromUtf8("verticalLayout_2"))

        #Timer for label resets.
        self.timer = QtCore.QTimer()
        self.timer.timeout.connect(self.reset)
        self.timer.start(9000)  #Update within every 9 seconds.

        #Back.
        self.back = QToolButton()
        self.back.setStyleSheet(
            "QToolButton{color:#ffffff; background-color:#353535; border: 2px solid #353535; border-radius: 3px;font-size: 12px;}"
            "QToolButton:hover{background-color:#5c5c5c;}")
        icon = QIcon()
        icon.addPixmap(QPixmap(_fromUtf8(":/icons/back.png")), QIcon.Normal,
                       QIcon.Off)
        self.back.setIcon(icon)
        self.back.setObjectName(_fromUtf8("back"))
        self.back.setToolTip('Go Back')
        self.back.clicked.connect(self.backs)
        self.back.setFixedSize(24, 24)
        self.toolbar.addWidget(self.back)

        #Address.
        self.address = QLineEdit()
        self.address.setStyleSheet(
            "QLineEdit{color:#ffffff; background-color:#353535; border: 2px solid #353535; border-radius: 3px;font-size: 12px;}"
            "QLineEdit:hover{background-color:#5c5c5c;}")
        self.address.setObjectName(_fromUtf8("lineEdit"))
        self.address.setPlaceholderText("Type an address")
        self.address.returnPressed.connect(self.system_arguments)
        self.toolbar.addWidget(self.address)

        #Forward.
        self.forward = QToolButton()
        self.forward.setStyleSheet(
            "QToolButton{color:#ffffff; background-color:#353535; border: 2px solid #353535; border-radius: 3px;font-size: 12px;}"
            "QToolButton:hover{background-color:#5c5c5c;}")
        icon1 = QIcon()
        icon1.addPixmap(QPixmap(_fromUtf8(":/icons/forward.png")),
                        QIcon.Normal, QIcon.Off)
        self.forward.setIcon(icon1)
        self.forward.setObjectName(_fromUtf8("forward"))
        self.forward.setToolTip('Go Forward')
        self.forward.clicked.connect(self.forwards)
        self.forward.setFixedSize(24, 24)
        self.toolbar.addWidget(self.forward)

        #Home.
        self.home = QToolButton()
        self.home.setStyleSheet(
            "QToolButton{color:#ffffff; background-color:#353535; border: 2px solid #353535; border-radius: 3px;font-size: 12px;}"
            "QToolButton:hover{background-color:#5c5c5c;}")
        icon2 = QIcon()
        icon2.addPixmap(QPixmap(_fromUtf8(":/icons/home.png")), QIcon.Normal,
                        QIcon.Off)
        self.home.setIcon(icon2)
        self.home.setObjectName(_fromUtf8("home"))
        self.home.setToolTip('Go Home')
        self.home.clicked.connect(self.homes)
        self.home.setFixedSize(24, 24)
        self.toolbar.addWidget(self.home)

        #Reload.
        self.reloading = QToolButton()
        self.reloading.setStyleSheet(
            "QToolButton{color:#ffffff; background-color:#353535; border: 2px solid #353535; border-radius: 3px;font-size: 12px;}"
            "QToolButton:hover{background-color:#5c5c5c;}")
        icon3 = QIcon()
        icon3.addPixmap(QPixmap(_fromUtf8(":/icons/reload.png")), QIcon.Normal,
                        QIcon.Off)
        self.reloading.setIcon(icon3)
        self.reloading.setObjectName(_fromUtf8("reload"))
        self.reloading.setToolTip('Reload Page')
        self.reloading.clicked.connect(self.reloads)
        self.reloading.setFixedSize(24, 24)
        self.toolbar.addWidget(self.reloading)

        #Html5 player.
        self.vlc = QToolButton()
        self.vlc.setStyleSheet(
            "QToolButton{color:#ffffff; background-color:#353535; border: 2px solid #353535; border-radius: 3px;font-size: 12px;}"
            "QToolButton:hover{background-color:#5c5c5c;}")
        icon4 = QIcon()
        icon4.addPixmap(QPixmap(_fromUtf8(":/icons/vlc_play.png")),
                        QIcon.Normal, QIcon.Off)
        self.vlc.setIcon(icon4)
        self.vlc.setObjectName(_fromUtf8("vlc"))
        self.vlc.setToolTip('Open HTML5 player')
        self.vlc.clicked.connect(self.html5)
        self.vlc.setFixedSize(24, 24)
        self.toolbar.addWidget(self.vlc)

        #Bookmark.
        self.bookmark = QToolButton()
        self.bookmark.setStyleSheet(
            "QToolButton{color:#ffffff; background-color:#353535; border: 2px solid #353535; border-radius: 3px;font-size: 12px;}"
            "QToolButton:hover{background-color:#5c5c5c;}")
        icon5 = QIcon()
        icon5.addPixmap(QPixmap(_fromUtf8(":/icons/bookmark.png")),
                        QIcon.Normal, QIcon.Off)
        self.bookmark.setIcon(icon5)
        self.bookmark.setObjectName(_fromUtf8("bookmark"))
        self.bookmark.setToolTip('Bookmark addressbar location')
        self.bookmark.clicked.connect(self.bookmarks)
        self.bookmark.clicked.connect(self.notice_new_bookmark)
        self.bookmark.setFixedSize(24, 24)
        self.toolbar.addWidget(self.bookmark)

        #Open Bookmarks.
        self.see_bookmark = QToolButton()
        self.see_bookmark.setStyleSheet(
            "QToolButton{color:#ffffff; background-color:#353535; border: 2px solid #353535; border-radius: 3px;font-size: 12px;}"
            "QToolButton:hover{background-color:#5c5c5c;}")
        icon6 = QIcon()
        icon6.addPixmap(QPixmap(_fromUtf8(":/icons/seebook.png")),
                        QIcon.Normal, QIcon.Off)
        self.see_bookmark.setIcon(icon6)
        self.see_bookmark.setObjectName(_fromUtf8("see_bookmark"))
        self.see_bookmark.setToolTip('See Bookmarks')
        self.see_bookmark.clicked.connect(self.bookopen)
        self.see_bookmark.setFixedSize(24, 24)
        self.toolbar.addWidget(self.see_bookmark)

        #Download.
        self.download = QToolButton()
        self.download.setStyleSheet(
            "QToolButton{color:#ffffff; background-color:#353535; border: 2px solid #353535; border-radius: 3px;font-size: 12px;}"
            "QToolButton:hover{background-color:#5c5c5c;}")
        icon7 = QIcon()
        icon7.addPixmap(QPixmap(_fromUtf8(":/icons/download.png")),
                        QIcon.Normal, QIcon.Off)
        self.download.setIcon(icon7)
        self.download.setObjectName(_fromUtf8("download"))
        self.download.setToolTip('Download file from location')
        self.download.clicked.connect(self.downloads)
        self.download.clicked.connect(self.loadings)
        self.download.setFixedSize(24, 24)
        self.toolbar.addWidget(self.download)

        #Search Switch.
        self.switch_2 = QLineEdit()
        self.switch_2.setStyleSheet(
            "QLineEdit{color:#ffffff; background-color:#353535; border: 2px solid #353535; border-radius: 3px;font-size: 12px;}"
            "QLineEdit:hover{background-color:#5c5c5c;}")
        self.switch_2.setObjectName(_fromUtf8("switch_2"))
        self.switch_2.setPlaceholderText("Switch")
        self.switch_2.setFixedSize(50, 24)
        self.switch_2.setToolTip(
            'gs=Startpage, wiki = Wikipedia,  tube = Youtube,  wolf = Wolfram Alpha. Empty = Startpage search (default)'
        )
        self.switch_2.returnPressed.connect(self.extra)
        self.toolbar.addWidget(self.switch_2)

        #Search.
        self.Search = QLineEdit()
        self.Search.setStyleSheet(
            "QLineEdit{color:#ffffff; background-color:#353535; border: 2px solid #353535; border-radius: 3px;font-size: 12px;}"
            "QLineEdit:hover{background-color:#5c5c5c;}")
        self.Search.setObjectName(_fromUtf8("Search"))
        self.Search.setPlaceholderText("Search something")
        self.Search.setToolTip('Search')
        self.Search.returnPressed.connect(self.extra)
        self.toolbar.addWidget(self.Search)

        #Printing.
        self.printing = QToolButton()
        self.printing.setStyleSheet(
            "QToolButton{color:#ffffff; background-color:#353535; border: 2px solid #353535; border-radius: 3px;font-size: 12px;}"
            "QToolButton:hover{background-color:#5c5c5c;}")
        icon8 = QIcon()
        icon8.addPixmap(QPixmap(_fromUtf8(":/icons/print.png")), QIcon.Normal,
                        QIcon.Off)
        self.printing.setIcon(icon8)
        self.printing.setObjectName(_fromUtf8("print"))
        self.printing.setToolTip('Print')
        self.printing.clicked.connect(self.handlePreview)
        self.printing.clicked.connect(self.printme)
        self.printing.setFixedSize(24, 24)
        self.toolbar.addWidget(self.printing)

        #Zoom +.
        self.zoom_in = QToolButton()
        self.zoom_in.setStyleSheet(
            "QToolButton{color:#ffffff; background-color:#353535; border: 2px solid #353535; border-radius: 3px;font-size: 12px;}"
            "QToolButton:hover{background-color:#5c5c5c;}")
        icon9 = QIcon()
        icon9.addPixmap(QPixmap(_fromUtf8(":/icons/zoom-in.png")),
                        QIcon.Normal, QIcon.Off)
        self.zoom_in.setIcon(icon9)
        self.zoom_in.setObjectName(_fromUtf8("zoom_in"))
        self.zoom_in.setToolTip('Zoom +')
        self.zoom_in.clicked.connect(self.zoomins)
        self.zoom_in.setFixedSize(24, 24)
        self.toolbar.addWidget(self.zoom_in)

        #Zoom -.
        self.zoom_out = QToolButton()
        self.zoom_out.setStyleSheet(
            "QToolButton{color:#ffffff; background-color:#353535; border: 2px solid #353535; border-radius: 3px;font-size: 12px;}"
            "QToolButton:hover{background-color:#5c5c5c;}")
        icon10 = QIcon()
        icon10.addPixmap(QPixmap(_fromUtf8(":/icons/zoom-out.png")),
                         QIcon.Normal, QIcon.Off)
        self.zoom_out.setIcon(icon10)
        self.zoom_out.setObjectName(_fromUtf8("zoom_out"))
        self.zoom_out.setToolTip('Zoom -')
        self.zoom_out.clicked.connect(self.zoomouts)
        self.zoom_out.setFixedSize(24, 24)
        self.toolbar.addWidget(self.zoom_out)

        #About.
        self.about1 = QPushButton()
        self.about1.setObjectName("Info")
        self.about1.setStyleSheet(
            "QPushButton{color:#ffffff; background-color:#353535; border: 2px solid #353535; border-radius: 3px;font-size: 12px;}"
            "QPushButton:hover{background-color:#5c5c5c;}")
        self.about1.setText("i")
        self.about1.setToolTip('Info')
        self.about1.setFixedSize(24, 24)
        self.about1.clicked.connect(self.about)
        self.toolbar.addWidget(self.about1)

        #Web browser.
        self.web = NewWindow(self.centralwidget)
        self.web.titleChanged = self.setWindowTitle
        self.web.urlChanged.connect(
            lambda x: self.address.setText(x.toString()))
        self.web.loadStarted.connect(self.begin)
        self.web.loadFinished.connect(self.complete)

        #Label as a secondary address placeholder.
        self.label = QLabel()
        self.label.setFixedSize(500, 16)
        self.label.setText(
            "Click addressbar and press enter if you supplied arguments.")
        self.web.setObjectName(_fromUtf8("kwebview"))
        self.web.setMaximumHeight(16777215)
        self.web.setMaximumWidth(16777215)

        #Adding to layout.
        MainWindow.setCentralWidget(self.centralwidget)
        self.verticalLayout_2.addWidget(self.toolbar)
        self.verticalLayout_2.addWidget(self.web)
        self.verticalLayout_2.addWidget(self.label)

        #Web inspector.
        self.inspector = QWebInspector()

        self.web.page().settings().setAttribute(
            QWebSettings.DeveloperExtrasEnabled, True)
        self.inspector.setPage(self.web.page())

        #More Browser settings.
        self.web.page().settings().setAttribute(QWebSettings.JavascriptEnabled,
                                                True)
        self.web.page().settings().setAttribute(
            QWebSettings.LocalContentCanAccessFileUrls, True)
        self.web.page().settings().setAttribute(
            QWebSettings.LocalContentCanAccessRemoteUrls, True)
        self.web.page().settings().setAttribute(
            QWebSettings.LocalStorageEnabled, True)
        self.web.page().settings().setAttribute(QWebSettings.PluginsEnabled,
                                                True)
        self.web.page().settings().setAttribute(
            QWebSettings.PrivateBrowsingEnabled, False)
        self.web.page().settings().setAttribute(
            QWebSettings.SpatialNavigationEnabled, True)
        self.web.page().settings().setAttribute(QWebSettings.AutoLoadImages,
                                                True)
        self.web.page().settings().setAttribute(
            QWebSettings.AcceleratedCompositingEnabled, True)
        ####################################################
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(_translate("MainWindow", "RunIT-QT", None))
        self.back.setText(_translate("MainWindow", "Back", None))
        self.forward.setText(_translate("MainWindow", "Forward\n" "", None))
        self.home.setText(_translate("MainWindow", "Home", None))
        self.reloading.setText(_translate("MainWindow", "Reload\n" "", None))
        self.vlc.setText(_translate("MainWindow", "Vlc Play", None))
        self.bookmark.setText(_translate("MainWindow", "Bookmarkl", None))
        self.see_bookmark.setText(
            _translate("MainWindow", "See bookmarks", None))
        self.download.setText(_translate("MainWindow", "Download", None))
        self.printing.setText(_translate("MainWindow", "Print", None))
        self.zoom_in.setText(_translate("MainWindow", "Zoom+", None))
        self.zoom_out.setText(_translate("MainWindow", "Zoom-", None))
Exemplo n.º 12
0
class WebPage(QWebPage):
    def __init__(self):
        super(WebPage, self).__init__()
        self.inspector = QWebInspector()
        self.inspector.setPage(self)
        self.inspector.resize(1024, 400)
        diskCache = QNetworkDiskCache(self)
        diskCache.setCacheDirectory(assets.fs.dataPath() + '/Cache')
        self.networkAccessManager().setCache(diskCache)
        self.networkAccessManager().setCookieJar(assets.dataJar)

    def javaScriptConsoleMessage(self, messgae, lineNumber, sourceId):
        if assets.manifest['debug']:
            print("==>[console]: %s @%s: %s" % (sourceId, lineNumber, messgae))

    def userAgentForUrl(self, url):
        return "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.101 Safari/537.36"

    def acceptNavigationRequest(self, frame, request, type):
        if(type == QWebPage.NavigationTypeLinkClicked):
            url = request.url().toString()
            if(frame == self.mainFrame()):
                    self.view().load(url)
                    return False
            elif frame == None:
                    # self.createWindow(QWebPage.WebBrowserWindow, url)
                    webbrowser.open(request.url().toString())
                    return False
        return QWebPage.acceptNavigationRequest(self, frame, request, type)

    # def downloadRequested(self, request):
    #         print(request)

    def findText(self, text):
        return super(WebPage, self).findText(text, QWebPage.FindBackward)

    def showInspector(self):
        self.inspector.show()
        self.inspector.activateWindow()

    def hideInspector(self):
        self.inspector.close()

    def createWindow(self, type, url = None):
        from dae.window import Window
        window = Window(self.view().parentWidget(), url, isDialog = (type == QWebPage.WebModalDialog))
        return window.webView.page()

    def javaScriptAlert(self, frame, msg):
        QMessageBox.information(self.view().parentWidget(), None, msg)

    def javaScriptConfirm(self, frame, msg):
        return QMessageBox.question(self.view().parentWidget(), None, msg) == QMessageBox.Yes

    # There is a bug in PyQt
    # def javaScriptPrompt(self, frame, msg, defaultValue):
    #         result = QInputDialog.getText(self.view().parentWidget(), None, msg)
    #         return (result[1], result[0])

    def close(self):
        self.hideInspector()
        assets.dataJar.save()