blob: 02dea8c6fe28157f04678fd4502d25abe2a809ea [file] [log] [blame]
/*
*
* Copyright 2013-2016 Canonical Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/
import QtQuick 2.0
import com.canonical.Oxide 1.9
import "cordova_wrapper.js" as CordovaWrapper
import Ubuntu.Components 1.0
import Ubuntu.Components.Popups 1.0
OrientationHelper {
id: root
anchors.fill: parent
state: "main"
signal completed
property string splashscreenPath
property bool disallowOverscroll
property var mainWebview
function exec(plugin, func, args) {
CordovaWrapper.execMethod(plugin, func, args);
}
function plugin(plugin) {
return CordovaWrapper.pluginObjects[plugin];
}
property string usContext: "oxide://main-world"
Rectangle {
id: webViewContainer
anchors.fill: parent
WebView {
id: webView
anchors.fill: parent
objectName: "webView"
onNavigationRequested: {
if (cordova.isUrlWhiteListed(request.url))
request.action = NavigationRequest.ActionAccept;
else
request.action = NavigationRequest.ActionReject;
}
popupMenu: ItemSelector {
automaticOrientation: false
}
preferences.remoteFontsEnabled: true
preferences.javascriptCanAccessClipboard: true
preferences.canDisplayInsecureContent: true
preferences.canRunInsecureContent: true
preferences.allowUniversalAccessFromFileUrls: true
preferences.allowFileAccessFromFileUrls: true
preferences.localStorageEnabled: true
preferences.appCacheEnabled: true
// boundsBehavior: disallowOverscroll ? Flickable.StopAtBounds : Flickable.DragAndOvershootBounds
property string scheme: "file"
property var currentDialog: null
// FIXME: remove code from geolocation plugin
onGeolocationPermissionRequested: {
request.accept();
}
context: WebContext {
id: webcontext
devtoolsEnabled: debuggingEnabled
devtoolsPort: debuggingEnabled ? 9222 : -1
userScripts: [
UserScript {
context: usContext
emulateGreasemonkey: true
url: "escape.js"
}
]
sessionCookieMode: {
if (typeof webContextSessionCookieMode !== 'undefined') {
if (webContextSessionCookieMode === "persistent") {
return WebContext.SessionCookieModePersistent
} else if (webContextSessionCookieMode === "restored") {
return WebContext.SessionCookieModeRestored
}
}
return WebContext.SessionCookieModeEphemeral
}
dataPath: cordova.getDataLocation()
}
messageHandlers: [
ScriptMessageHandler {
msgId: "from-cordova"
contexts: [usContext]
callback: function(msg, frame) {
CordovaWrapper.messageHandler(msg.args)
console.log(JSON.stringify(msg.args))
}
}
]
Component.onCompleted: {
root.mainWebview = webView;
cordova.appLoaded();
webView.url = cordova.mainUrl;
}
onTitleChanged: {
cordova.setTitle(webView.title)
}
onLoadingStateChanged: {
if (!webView.loading) {
root.completed()
cordova.loadFinished(true)
}
}
Connections {
target: cordova
onJavaScriptExecNeeded: {
webView.rootFrame.sendMessage(usContext, "EXECUTE", {code: js});
}
onQmlExecNeeded: {
eval(src);
}
onPluginWantsToBeAdded: {
CordovaWrapper.addPlugin(pluginName, pluginObject)
}
}
}
}
Image {
id: splashscreen
anchors.fill: parent
source: splashscreenPath
visible: false
smooth: true
fillMode: Image.PreserveAspectFit
}
states: [
State {
name: "main"
PropertyChanges {
target: webViewContainer
visible: true
}
PropertyChanges {
target: splashscreen
visible: false
}
},
State {
name: "splashscreen"
PropertyChanges {
target: webViewContainer
visible: false
}
PropertyChanges {
target: splashscreen
visible: true
}
}
]
transitions: Transition {
RotationAnimation { duration: 500; direction: RotationAnimation.Shortest }
}
}