Skip to content
This repository has been archived by the owner on Jan 9, 2023. It is now read-only.

Commit

Permalink
CB-8056 Implement splashscreen for Windows platform
Browse files Browse the repository at this point in the history
Updated version to 5.0.0
  • Loading branch information
daserge committed Apr 22, 2016
1 parent 5711518 commit d6988f5
Show file tree
Hide file tree
Showing 8 changed files with 978 additions and 11 deletions.
2 changes: 1 addition & 1 deletion VERSION
@@ -1 +1 @@
4.4.0-dev
5.0.0
4 changes: 4 additions & 0 deletions bin/lib/create.js
Expand Up @@ -59,6 +59,10 @@ module.exports.create = function (destinationDir, config, options) {

// Duplicate cordova.js to platform_www otherwise it will get removed by prepare
shell.cp('-rf', path.join(root, 'template/www/cordova.js'), path.join(projectPath, 'platform_www'));
// Duplicate splashscreen.css to platform_www otherwise it will get removed by prepare
var cssDirectory = path.join(projectPath, 'platform_www', 'css');
recursiveCreateDirectory(cssDirectory);
shell.cp('-rf', path.join(root, 'template/www/css/splashscreen.css'), cssDirectory);

// Copy cordova-js-src directory
events.emit('verbose', 'Copying cordova-js sources to platform_www');
Expand Down
89 changes: 89 additions & 0 deletions cordova-js-src/confighelper.js
@@ -0,0 +1,89 @@
/*
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.
*
*/

// config.xml wrapper (non-node ConfigParser analogue)
var config;
function Config(xhr) {
function loadPreferences(xhr) {
var parser = new DOMParser();
var doc = parser.parseFromString(xhr.responseText, "application/xml");

var preferences = doc.getElementsByTagName("preference");
return Array.prototype.slice.call(preferences);
}

this.xhr = xhr;
this.preferences = loadPreferences(this.xhr);
}

function readConfig(success, error) {
var xhr;

if (typeof config != 'undefined') {
success(config);
}

function fail(msg) {
console.error(msg);

if (error) {
error(msg);
}
}

var xhrStatusChangeHandler = function () {
if (xhr.readyState == 4) {
if (xhr.status == 200 || xhr.status == 304 || xhr.status == 0 /* file:// */) {
config = new Config(xhr);
success(config);
}
else {
fail('[Windows][cordova.js][xhrStatusChangeHandler] Could not XHR config.xml: ' + xhr.statusText);
}
}
};

xhr = new XMLHttpRequest();
xhr.addEventListener("load", xhrStatusChangeHandler);

try {
xhr.open("get", "../config.xml", true);
xhr.send();
} catch (e) {
fail('[Windows][cordova.js][readConfig] Could not XHR config.xml: ' + JSON.stringify(e));
}
}

/**
* Reads a preference value from config.xml.
* Returns preference value or undefined if it does not exist.
* @param {String} preferenceName Preference name to read */
Config.prototype.getPreferenceValue = function getPreferenceValue(preferenceName) {
var preferenceItem = this.preferences && this.preferences.filter(function (item) {
return item.attributes['name'].value === preferenceName;
});

if (preferenceItem && preferenceItem[0] && preferenceItem[0].attributes && preferenceItem[0].attributes['value']) {
return preferenceItem[0].attributes['value'].value;
}
}

exports.readConfig = readConfig;
36 changes: 33 additions & 3 deletions cordova-js-src/platform.js
Expand Up @@ -26,7 +26,8 @@ module.exports = {
exec = require('cordova/exec'),
channel = cordova.require('cordova/channel'),
platform = require('cordova/platform'),
modulemapper = require('cordova/modulemapper');
modulemapper = require('cordova/modulemapper'),
configHelper = require('cordova/confighelper');

modulemapper.clobbers('cordova/exec/proxy', 'cordova.commandProxy');

Expand All @@ -38,7 +39,11 @@ module.exports = {
channel.onNativeReady.fire();

var onWinJSReady = function () {
var app = WinJS.Application;
var app = WinJS.Application,
splashscreen = require('cordova/splashscreen');

modulemapper.clobbers('cordova/splashscreen', 'navigator.splashscreen');

var checkpointHandler = function checkpointHandler() {
cordova.fireDocumentEvent('pause',null,true);
};
Expand All @@ -54,7 +59,27 @@ module.exports = {
var args = e.detail.arguments;
var actType = e.detail.type;
platform.activationContext = { type: actType, args: args };
cordova.fireDocumentEvent('activated', platform.activationContext, true);

function makePromise(fn) {
return new WinJS.Promise(function init(completeDispatch, errorDispatch) {
fn(function successCb(results) {
completeDispatch(results);
}, function errorCb(error) {
errorDispatch(error);
});
});
}

e.setPromise(makePromise(configHelper.readConfig).then(function (config) {
if (e.detail.previousExecutionState !== Windows.ApplicationModel.Activation.ApplicationExecutionState.running) {
splashscreen.firstShow(config, e);
}
}).then(function () {
// Avoids splashimage flicker on Windows Phone 8.1/10
return WinJS.Promise.timeout();
}).then(function () {
cordova.fireDocumentEvent('activated', platform.activationContext, true);
}));
};

app.addEventListener("checkpoint", checkpointHandler);
Expand All @@ -66,6 +91,11 @@ module.exports = {
app.start();
};

function appendScript(scriptElem, loadedCb) {
scriptElem.addEventListener("load", loadedCb);
document.head.appendChild(scriptElem);
}

if (!window.WinJS) {
var scriptElem = document.createElement("script");

Expand Down

0 comments on commit d6988f5

Please sign in to comment.