UNPKG

cordova-plugin-splashscreen

Version:
169 lines (148 loc) 6.18 kB
/* * * 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'); var autoHideSplashScreen = true; 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'; localSplash.style['z-index'] = '99999'; localSplashImage = document.createElement('img'); localSplashImage.src = imageSrc; localSplashImage.style.position = 'absolute'; updateImageLocation(); localSplash.appendChild(localSplashImage); document.body.appendChild(localSplash); // deviceready fires earlier than the plugin init on cold-start if (SplashScreen.shouldHideImmediately) { SplashScreen.shouldHideImmediately = false; window.setTimeout(function () { SplashScreen.hide(); }, 1000); } } }, hide: function () { if (localSplash) { var innerLocalSplash = localSplash; localSplash = null; window.removeEventListener('resize', onResize, false); innerLocalSplash.style.opacity = '0'; innerLocalSplash.style['-webkit-transition'] = 'opacity 1s ease-in-out'; innerLocalSplash.style['-moz-transition'] = 'opacity 1s ease-in-out'; innerLocalSplash.style['-ms-transition'] = 'opacity 1s ease-in-out'; innerLocalSplash.style['-o-transition'] = 'opacity 1s ease-in-out'; window.setTimeout(function () { document.body.removeChild(innerLocalSplash); innerLocalSplash = null; }, 1000); } else { SplashScreen.shouldHideImmediately = true; } } }; /** * 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; splashScreenDelay = parseInt(splashScreenDelay, 10); imageSrc = cfg.getPreferenceValue('SplashScreen') || imageSrc; bgColor = cfg.getPreferenceValue('SplashScreenBackgroundColor') || bgColor; splashImageWidth = cfg.getPreferenceValue('SplashScreenWidth') || splashImageWidth; splashImageHeight = cfg.getPreferenceValue('SplashScreenHeight') || splashImageHeight; autoHideSplashScreen = cfg.getPreferenceValue('AutoHideSplashScreen') || autoHideSplashScreen; autoHideSplashScreen = (autoHideSplashScreen === true || autoHideSplashScreen.toLowerCase() === 'true'); } catch (e) { var msg = '[Browser][SplashScreen] Error occurred 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 splashscreen if it is enabled. */ (function initAndShow () { configHelper.readConfig(function (config) { readPreferencesFromCfg(config); if (autoHideSplashScreen) { showAndHide(); } else { SplashScreen.show(); } }, function (err) { console.error(err); }); })(); module.exports = SplashScreen; require('cordova/exec/proxy').add('SplashScreen', SplashScreen);