Warning, /pim/kube/framework/qml/mailpartview/HtmlPart.qml is written in an unsupported language. File is not indexed.

0001 /*
0002   Copyright (C) 2016 Michael Bohlender, <michael.bohlender@kdemail.net>
0003 
0004   This program is free software; you can redistribute it and/or modify
0005   it under the terms of the GNU General Public License as published by
0006   the Free Software Foundation; either version 2 of the License, or
0007   (at your option) any later version.
0008 
0009   This program is distributed in the hope that it will be useful,
0010   but WITHOUT ANY WARRANTY; without even the implied warranty of
0011   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
0012   GNU General Public License for more details.
0013 
0014   You should have received a copy of the GNU General Public License along
0015   with this program; if not, write to the Free Software Foundation, Inc.,
0016   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
0017 */
0018 
0019 import QtQuick 2.4
0020 import QtWebEngine 1.4
0021 import QtQuick.Controls 2.2
0022 import QtQuick.Window 2
0023 
0024 import org.kube.framework 1.0 as Kube
0025 
0026 Item {
0027     id: root
0028     objectName: "htmlPart"
0029     property string content
0030     property bool loaded: false
0031     //We have to give it a minimum size so the html content starts to expand
0032     property int minimumSize: 10
0033     property int contentHeight: minimumSize
0034     property int contentWidth: minimumSize
0035     property string searchString
0036     property bool autoLoadImages: false
0037 
0038     onSearchStringChanged: {
0039         htmlView.findText(searchString)
0040     }
0041 
0042     Flickable {
0043         id: flickable
0044         anchors.fill: parent
0045 
0046 
0047         clip: true
0048         boundsBehavior: Flickable.StopAtBounds
0049 
0050         ScrollBar.horizontal: Kube.ScrollBar {  }
0051 
0052         WebEngineView {
0053             id: htmlView
0054             objectName: "htmlView"
0055             anchors.fill: parent
0056 
0057             Component.onCompleted: loadHtml(content, "file:///")
0058             onLoadingChanged: {
0059                 if (loadRequest.status == WebEngineView.LoadFailedStatus) {
0060                     console.warn("Failed to load html content.")
0061                     console.warn("Error is ", loadRequest.errorString)
0062                 }
0063                 root.contentWidth = Math.max(contentsSize.width, minimumSize)
0064 
0065                 if (loadRequest.status == WebEngineView.LoadSucceededStatus) {
0066                     runJavaScript("[document.body.scrollHeight, document.body.scrollWidth, document.documentElement.scrollHeight]", function(result) {
0067                         root.contentHeight = Math.min(Math.max(result[0], result[2]), 4000);
0068                         root.contentWidth = Math.min(Math.max(result[1], flickable.width), 2000)
0069                         root.loaded = true
0070                     });
0071                 }
0072             }
0073             onLinkHovered: {
0074                 console.debug("Link hovered ", hoveredUrl)
0075             }
0076             onNavigationRequested: {
0077                 console.debug("Nav request ", request.navigationType, request.url)
0078                 if (request.navigationType == WebEngineNavigationRequest.LinkClickedNavigation) {
0079                     Qt.openUrlExternally(request.url)
0080                     request.action = WebEngineNavigationRequest.IgnoreRequest
0081                 }
0082             }
0083             onNewViewRequested: {
0084                 console.debug("New view request ", request, request.requestedUrl)
0085                 //We ignore requests for new views and open a browser instead
0086                 Qt.openUrlExternally(request.requestedUrl)
0087             }
0088             settings {
0089                 webGLEnabled: false
0090                 touchIconsEnabled: false
0091                 spatialNavigationEnabled: false
0092                 screenCaptureEnabled: false
0093                 pluginsEnabled: false
0094                 localStorageEnabled: false
0095                 localContentCanAccessRemoteUrls: false
0096                 localContentCanAccessFileUrls: false
0097                 linksIncludedInFocusChain: false
0098                 javascriptEnabled: true
0099                 javascriptCanOpenWindows: false
0100                 javascriptCanAccessClipboard: false
0101                 hyperlinkAuditingEnabled: false
0102                 fullScreenSupportEnabled: false
0103                 errorPageEnabled: false
0104                 //defaultTextEncoding: ???
0105                 autoLoadImages: root.autoLoadImages
0106                 autoLoadIconsForPage: false
0107                 accelerated2dCanvasEnabled: false
0108                 //The webview should not steal focus
0109                 focusOnNavigationEnabled: false
0110             }
0111             profile {
0112                 offTheRecord: true
0113                 httpCacheType: WebEngineProfile.NoCache
0114                 persistentCookiesPolicy: WebEngineProfile.NoPersistentCookies
0115             }
0116             onContextMenuRequested: function(request) {
0117                 request.accepted = true
0118             }
0119         }
0120     }
0121     onContentChanged: {
0122         htmlView.loadHtml(content, "file:///");
0123     }
0124 }