|
@@ -18,21 +18,214 @@
|
|
|
|
|
|
<meta charset="UTF-8">
|
|
|
<meta content="IE=Edge" http-equiv="X-UA-Compatible">
|
|
|
- <meta name="description" content="A new Flutter project.">
|
|
|
+ <meta name="description" content="Datacom Solusindo">
|
|
|
|
|
|
<!-- iOS meta tags & icons -->
|
|
|
<meta name="mobile-web-app-capable" content="yes">
|
|
|
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
|
|
- <meta name="apple-mobile-web-app-title" content="telnow_mobile_new">
|
|
|
+ <meta name="apple-mobile-web-app-title" content="TelNow Application">
|
|
|
<link rel="apple-touch-icon" href="icons/Icon-192.png">
|
|
|
|
|
|
<!-- Favicon -->
|
|
|
- <link rel="icon" type="image/png" href="favicon.png"/>
|
|
|
+ <link rel="icon" type="image/png" href="favicon.ico"/>
|
|
|
|
|
|
- <title>telnow_mobile_new</title>
|
|
|
+ <title>TelNow Application</title>
|
|
|
<link rel="manifest" href="manifest.json">
|
|
|
+ <style>
|
|
|
+ .loader {
|
|
|
+ border: 5px solid #f3f3f3;
|
|
|
+ border-radius: 50%;
|
|
|
+ border-top: 5px solid #01beb5;
|
|
|
+ width: 40px;
|
|
|
+ height: 40px;
|
|
|
+ -webkit-animation: spin 2s linear infinite; /* Safari */
|
|
|
+ animation: spin 2s linear infinite;
|
|
|
+ }
|
|
|
+
|
|
|
+ .center {
|
|
|
+ position: absolute;
|
|
|
+ top: 50%;
|
|
|
+ left: 50%;
|
|
|
+ margin-top: -60px;
|
|
|
+ margin-left: -120px;
|
|
|
+ width: 240px;
|
|
|
+ height: 40px;
|
|
|
+ text-align: center;
|
|
|
+ font-family: Arial, Helvetica, sans-serif;
|
|
|
+ }
|
|
|
+
|
|
|
+ .center-align {
|
|
|
+ position: absolute;
|
|
|
+ top: 50%;
|
|
|
+ left: 50%;
|
|
|
+ margin-top: 20px;
|
|
|
+ margin-left: -60px;
|
|
|
+ width: 40px;
|
|
|
+ height: 40px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .center-count {
|
|
|
+ position: absolute;
|
|
|
+ top: 50%;
|
|
|
+ left: 50%;
|
|
|
+ margin-top: -30px;
|
|
|
+ margin-left: -120px;
|
|
|
+ width: 240px;
|
|
|
+ height: 40px;
|
|
|
+ font-size: 20px;
|
|
|
+ font-weight: bold;
|
|
|
+ text-align: center;
|
|
|
+ font-family: Arial, Helvetica, sans-serif;
|
|
|
+ }
|
|
|
+
|
|
|
+ /* Safari */
|
|
|
+ @-webkit-keyframes spin {
|
|
|
+ 0% { -webkit-transform: rotate(0deg); }
|
|
|
+ 100% { -webkit-transform: rotate(360deg); }
|
|
|
+ }
|
|
|
+
|
|
|
+ @keyframes spin {
|
|
|
+ 0% { transform: rotate(0deg); }
|
|
|
+ 100% { transform: rotate(360deg); }
|
|
|
+ }
|
|
|
+
|
|
|
+ .countdown {
|
|
|
+ display: inline-block;
|
|
|
+ text-indent: -100vw;
|
|
|
+ position:relative;
|
|
|
+ width: 1ch;
|
|
|
+ }
|
|
|
+
|
|
|
+ .countdown::after {
|
|
|
+ content: '10';
|
|
|
+ position:absolute;
|
|
|
+ top:0;
|
|
|
+ left:0;
|
|
|
+ text-indent: 0;
|
|
|
+ animation: 18s countdown 1s forwards;
|
|
|
+ }
|
|
|
+
|
|
|
+ @keyframes countdown {
|
|
|
+ 0% { content: '10'; }
|
|
|
+ 10% { content: '9'; }
|
|
|
+ 20% { content: '8'; }
|
|
|
+ 30% { content: '7'; }
|
|
|
+ 35% { content: '7'; }
|
|
|
+ 40% { content: '6'; }
|
|
|
+ 45% { content: '6'; }
|
|
|
+ 50% { content: '5'; }
|
|
|
+ 55% { content: '5'; }
|
|
|
+ 60% { content: '4'; }
|
|
|
+ 65% { content: '4'; }
|
|
|
+ 70% { content: '3'; }
|
|
|
+ 75% { content: '2'; }
|
|
|
+ 80% { content: '2'; }
|
|
|
+ 85% { content: '2'; }
|
|
|
+ 90% { content: '1'; }
|
|
|
+ 95% { content: '1'; }
|
|
|
+ 100% { content: '0'; }
|
|
|
+ }
|
|
|
+ </style>
|
|
|
</head>
|
|
|
<body>
|
|
|
<script src="flutter_bootstrap.js" async></script>
|
|
|
+
|
|
|
+ <div class="center">
|
|
|
+ <h4 id="label">Loading TelNow page</h4>
|
|
|
+ </div>
|
|
|
+ <div class="center-align">
|
|
|
+ <img src="cat.gif" width="120" height="120">
|
|
|
+ </div>
|
|
|
+ <div class="center-count">
|
|
|
+ <span class="countdown"></span>
|
|
|
+ </div>
|
|
|
+ <!-- This script installs service_worker.js to provide PWA functionality to
|
|
|
+ application. For more information, see:
|
|
|
+ https://developers.google.com/web/fundamentals/primers/service-workers -->
|
|
|
+ <script src="https://www.gstatic.com/firebasejs/8.10.1/firebase-app.js"></script>
|
|
|
+ <script src="https://www.gstatic.com/firebasejs/8.10.1/firebase-auth.js"></script>
|
|
|
+ <script src="https://www.gstatic.com/firebasejs/8.10.1/firebase-messaging.js"></script>
|
|
|
+ <script src="https://www.gstatic.com/firebasejs/8.10.1/firebase-firestore.js"></script>
|
|
|
+
|
|
|
+ <script>
|
|
|
+ var serviceWorkerVersion = null;
|
|
|
+ var scriptLoaded = false;
|
|
|
+ function loadMainDartJs() {
|
|
|
+ if (scriptLoaded) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ scriptLoaded = true;
|
|
|
+ var scriptTag = document.createElement('script');
|
|
|
+ scriptTag.src = 'main.dart.js';
|
|
|
+ scriptTag.type = 'application/javascript';
|
|
|
+ document.body.append(scriptTag);
|
|
|
+ }
|
|
|
+
|
|
|
+ if ('serviceWorker' in navigator) {
|
|
|
+ // Service workers are supported. Use them.
|
|
|
+ window.addEventListener('load', function () {
|
|
|
+ // Wait for registration to finish before dropping the <script> tag.
|
|
|
+ // Otherwise, the browser will load the script multiple times,
|
|
|
+ // potentially different versions.
|
|
|
+ var serviceWorkerUrl = 'flutter_service_worker.js?v=' + serviceWorkerVersion;
|
|
|
+ navigator.serviceWorker.register(serviceWorkerUrl)
|
|
|
+ .then((reg) => {
|
|
|
+ function waitForActivation(serviceWorker) {
|
|
|
+ serviceWorker.addEventListener('statechange', () => {
|
|
|
+ if (serviceWorker.state == 'activated') {
|
|
|
+ console.log('Installed new service worker.');
|
|
|
+ loadMainDartJs();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ if (!reg.active && (reg.installing || reg.waiting)) {
|
|
|
+ // No active web worker and we have installed or are installing
|
|
|
+ // one for the first time. Simply wait for it to activate.
|
|
|
+ waitForActivation(reg.installing || reg.waiting);
|
|
|
+ } else if (!reg.active.scriptURL.endsWith(serviceWorkerVersion)) {
|
|
|
+ // When the app updates the serviceWorkerVersion changes, so we
|
|
|
+ // need to ask the service worker to update.
|
|
|
+ console.log('New service worker available.');
|
|
|
+ reg.update();
|
|
|
+ waitForActivation(reg.installing);
|
|
|
+ } else {
|
|
|
+ // Existing service worker is still good.
|
|
|
+ console.log('Loading app from service worker.');
|
|
|
+ loadMainDartJs();
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ navigator.serviceWorker.register("firebase-messaging-sw.js").then((reg) => {
|
|
|
+ if (!reg.active && (reg.installing || reg.waiting)) {
|
|
|
+ // No active web worker and we have installed or are installing
|
|
|
+ // one for the first time. Simply wait for it to activate.
|
|
|
+ console.log('Firebase messaging has been installing.');
|
|
|
+ } else if (!reg.active.scriptURL.endsWith(serviceWorkerVersion)) {
|
|
|
+ // When the app updates the serviceWorkerVersion changes, so we
|
|
|
+ // need to ask the service worker to update.
|
|
|
+ console.log('Firebase messaging is available.');
|
|
|
+ } else {
|
|
|
+ // Existing service worker is still good.
|
|
|
+ console.log('Firebase messaging has been running.');
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // If service worker doesn't succeed in a reasonable amount of time,
|
|
|
+ // fallback to plaint <script> tag.
|
|
|
+ setTimeout(() => {
|
|
|
+ if (!scriptLoaded) {
|
|
|
+ console.warn(
|
|
|
+ 'Failed to load app from service worker. Falling back to plain <script> tag.',
|
|
|
+ );
|
|
|
+ loadMainDartJs();
|
|
|
+ }
|
|
|
+ }, 4000);
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ // Service workers not supported. Just drop the <script> tag.
|
|
|
+ loadMainDartJs();
|
|
|
+ }
|
|
|
+
|
|
|
+ </script>
|
|
|
</body>
|
|
|
</html>
|