| /* |
| * |
| * 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. |
| * |
| */ |
| |
| // Default parameter values including image size can be changed in `config.xml` |
| var splashImageWidth = 170; |
| var splashImageHeight = 200; |
| var position = { x: 0, y: 0, width: splashImageWidth, height: splashImageHeight }; |
| var localSplash; // the image to display |
| var localSplashImage; |
| var bgColor = "#464646"; |
| var imageSrc = '/img/logo.png'; |
| var splashScreenDelay = 3000; // in milliseconds |
| var showSplashScreen = true; // show splashcreen by default |
| var cordova = require('cordova'); |
| var configHelper = cordova.require('cordova/confighelper'); |
| |
| function updateImageLocation() { |
| position.width = Math.min(splashImageWidth, window.innerWidth); |
| position.height = position.width * (splashImageHeight / splashImageWidth); |
| |
| localSplash.style.width = window.innerWidth + "px"; |
| localSplash.style.height = window.innerHeight + "px"; |
| localSplash.style.top = "0px"; |
| localSplash.style.left = "0px"; |
| |
| localSplashImage.style.top = "50%"; |
| localSplashImage.style.left = "50%"; |
| localSplashImage.style.height = position.height + "px"; |
| localSplashImage.style.width = position.width + "px"; |
| localSplashImage.style.marginTop = (-position.height / 2) + "px"; |
| localSplashImage.style.marginLeft = (-position.width / 2) + "px"; |
| } |
| |
| function onResize() { |
| updateImageLocation(); |
| } |
| |
| var SplashScreen = { |
| setBGColor: function (cssBGColor) { |
| bgColor = cssBGColor; |
| if (localSplash) { |
| localSplash.style.backgroundColor = bgColor; |
| } |
| }, |
| show: function () { |
| if(!localSplash) { |
| window.addEventListener("resize", onResize, false); |
| localSplash = document.createElement("div"); |
| localSplash.style.backgroundColor = bgColor; |
| localSplash.style.position = "absolute"; |
| |
| localSplashImage = document.createElement("img"); |
| localSplashImage.src = imageSrc; |
| localSplashImage.style.position = "absolute"; |
| |
| updateImageLocation(); |
| |
| localSplash.appendChild(localSplashImage); |
| document.body.appendChild(localSplash); |
| } |
| }, |
| hide: function () { |
| if(localSplash) { |
| window.removeEventListener("resize", onResize, false); |
| document.body.removeChild(localSplash); |
| localSplash = null; |
| } |
| } |
| }; |
| |
| /** |
| * Reads preferences via ConfigHelper and substitutes default parameters. |
| */ |
| function readPreferencesFromCfg(cfg) { |
| try { |
| var value = cfg.getPreferenceValue('ShowSplashScreen'); |
| if(typeof value != 'undefined') { |
| showSplashScreen = value === 'true'; |
| } |
| |
| splashScreenDelay = cfg.getPreferenceValue('SplashScreenDelay') || splashScreenDelay; |
| imageSrc = cfg.getPreferenceValue('SplashScreen') || imageSrc; |
| bgColor = cfg.getPreferenceValue('SplashScreenBackgroundColor') || bgColor; |
| splashImageWidth = cfg.getPreferenceValue('SplashScreenWidth') || splashImageWidth; |
| splashImageHeight = cfg.getPreferenceValue('SplashScreenHeight') || splashImageHeight; |
| } catch(e) { |
| var msg = '[Browser][SplashScreen] Error occured on loading preferences from config.xml: ' + JSON.stringify(e); |
| console.error(msg); |
| } |
| } |
| |
| /** |
| * Shows and hides splashscreen if it is enabled, with a delay according the current preferences. |
| */ |
| function showAndHide() { |
| if(showSplashScreen) { |
| SplashScreen.show(); |
| |
| window.setTimeout(function() { |
| SplashScreen.hide(); |
| }, splashScreenDelay); |
| } |
| } |
| |
| /** |
| * Tries to read config.xml and override default properties and then shows and hides splashcreen if it is enabled. |
| */ |
| (function initAndShow() { |
| configHelper.readConfig(function(config) { |
| readPreferencesFromCfg(config); |
| showAndHide(); |
| }, function(err) { |
| console.error(err); |
| }); |
| })(); |
| |
| module.exports = SplashScreen; |
| |
| require("cordova/exec/proxy").add("SplashScreen", SplashScreen); |
| |