mirror of
https://github.com/transatoshi-mw/grin-web-wallet.git
synced 2025-10-07 00:02:47 +00:00
contents of zip
This commit is contained in:
353
scripts/install_app.js
Executable file
353
scripts/install_app.js
Executable file
@@ -0,0 +1,353 @@
|
||||
// Use strict
|
||||
"use strict";
|
||||
|
||||
|
||||
// Classes
|
||||
|
||||
// Install app class
|
||||
class InstallApp {
|
||||
|
||||
// Public
|
||||
|
||||
// Constructor
|
||||
constructor(cookieAcceptance, automaticLock) {
|
||||
|
||||
// Set automatic lock
|
||||
this.automaticLock = automaticLock;
|
||||
|
||||
// Get install app display
|
||||
this.installAppDisplay = $("section.installApp");
|
||||
|
||||
// Get install now button
|
||||
this.installNowButton = this.installAppDisplay.find("button.installNow");
|
||||
|
||||
// Get remind me later button
|
||||
this.remindMeLaterButton = this.installAppDisplay.find("button.remindMeLater");
|
||||
|
||||
// Set can show
|
||||
this.canShow = false;
|
||||
|
||||
// Set was installed
|
||||
this.wasInstalled = false;
|
||||
|
||||
// Set cookie acceptance is hidden
|
||||
this.cookieAcceptanceIsHidden = false;
|
||||
|
||||
// Set self
|
||||
var self = this;
|
||||
|
||||
// Cookie acceptance is hidden event
|
||||
$(cookieAcceptance).one(CookieAcceptance.IS_HIDDEN_EVENT, function() {
|
||||
|
||||
// Set timeout
|
||||
setTimeout(function() {
|
||||
|
||||
// Set cookie acceptance is hidden
|
||||
self.cookieAcceptanceIsHidden = true;
|
||||
|
||||
// Can if can show
|
||||
if(self.canShow === true)
|
||||
|
||||
// Show
|
||||
self.show();
|
||||
|
||||
}, InstallApp.COOKIE_ACCEPTANCE_HIDE_BEFORE_SHOW_DELAY_MILLISECONDS);
|
||||
});
|
||||
|
||||
// Window before install prompt event
|
||||
$(window).on("beforeinstallprompt", function(event) {
|
||||
|
||||
// Prevent default
|
||||
event.preventDefault();
|
||||
|
||||
// Store install app prompt
|
||||
installAppPrompt = event["originalEvent"];
|
||||
|
||||
// Can if can show
|
||||
if(self.canShow === true)
|
||||
|
||||
// Show
|
||||
self.show();
|
||||
});
|
||||
|
||||
// Install app display transaition end event
|
||||
this.installAppDisplay.on("transitionend", function() {
|
||||
|
||||
// Check if install app display is hiding
|
||||
if(self.installAppDisplay.hasClass("hide") === true)
|
||||
|
||||
// Prevent focus on install app display's elements
|
||||
self.installAppDisplay.addClass("noFocus");
|
||||
});
|
||||
|
||||
// Window app installed event
|
||||
$(window).on("appinstalled", function(event) {
|
||||
|
||||
// Hide
|
||||
self.hide();
|
||||
});
|
||||
|
||||
// Window storage event
|
||||
$(window).on("storage", function(event) {
|
||||
|
||||
// Check if remind me later timestamp was changed
|
||||
if(event["originalEvent"]["key"] === InstallApp.INSTALL_APP_REMIND_ME_LATER_TIMESTAMP_LOCAL_STORAGE_NAME)
|
||||
|
||||
// Hide
|
||||
self.hide();
|
||||
});
|
||||
|
||||
// Install now button click event
|
||||
this.installNowButton.on("click", function() {
|
||||
|
||||
// Check if the install app prompt exists
|
||||
if(installAppPrompt !== InstallApp.NO_INSTALL_APP_PROMPT) {
|
||||
|
||||
// Get if automatic lock is enabled
|
||||
var automaticLockEnabled = self.automaticLock.getAllowed() !== 0;
|
||||
|
||||
// Check if automatic lock is enabled
|
||||
if(automaticLockEnabled === true) {
|
||||
|
||||
// Prevent automatic lock
|
||||
self.automaticLock.prevent();
|
||||
}
|
||||
|
||||
// Prompt to install app
|
||||
installAppPrompt.prompt();
|
||||
|
||||
// Get if app was installed
|
||||
installAppPrompt["userChoice"].then(function(result) {
|
||||
|
||||
// Check if automatic lock is enabled
|
||||
if(automaticLockEnabled === true) {
|
||||
|
||||
// Allow automatic lock
|
||||
self.automaticLock.allow();
|
||||
}
|
||||
|
||||
// Check if app was installed
|
||||
if(result["outcome"] === InstallApp.APP_INSTALLED_OUTCOME) {
|
||||
|
||||
// Set was installed
|
||||
self.wasInstalled = true;
|
||||
|
||||
// Hide
|
||||
self.hide();
|
||||
}
|
||||
|
||||
// Catch errors
|
||||
}).catch(function(error) {
|
||||
|
||||
// Check if automatic lock is enabled
|
||||
if(automaticLockEnabled === true) {
|
||||
|
||||
// Allow automatic lock
|
||||
self.automaticLock.allow();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// Remind me later button click event
|
||||
this.remindMeLaterButton.on("click", function() {
|
||||
|
||||
// Hide
|
||||
self.hide();
|
||||
|
||||
// Try
|
||||
try {
|
||||
|
||||
// Save current timestamp as the remind me later timestamp
|
||||
localStorage.setItem(InstallApp.INSTALL_APP_REMIND_ME_LATER_TIMESTAMP_LOCAL_STORAGE_NAME, Common.getCurrentTimestamp().toFixed());
|
||||
}
|
||||
|
||||
// Catch errors
|
||||
catch(error) {
|
||||
|
||||
// Trigger a fatal error
|
||||
new FatalError(FatalError.LOCAL_STORAGE_ERROR);
|
||||
}
|
||||
|
||||
// Remind me later hover in event
|
||||
}).hover(function() {
|
||||
|
||||
// Check if can hover
|
||||
if(typeof matchMedia === "function" && matchMedia("(any-hover: hover)")["matches"] === true) {
|
||||
|
||||
// Get element
|
||||
var element = $(this);
|
||||
|
||||
// Check if element's text is shown
|
||||
if(element.children().is(":visible") === true) {
|
||||
|
||||
// Save element's title
|
||||
element.attr(Common.DATA_ATTRIBUTE_PREFIX + "title", element.attr("title"));
|
||||
|
||||
// Remove element's title
|
||||
element.removeAttr("title");
|
||||
}
|
||||
}
|
||||
|
||||
// Remind me later hover out event
|
||||
}, function() {
|
||||
|
||||
// Check if can hover
|
||||
if(typeof matchMedia === "function" && matchMedia("(any-hover: hover)")["matches"] === true) {
|
||||
|
||||
// Get element
|
||||
var element = $(this);
|
||||
|
||||
// Check if element isn't focused
|
||||
if(element.is(":focus") === false) {
|
||||
|
||||
// Check if element's title is saved
|
||||
if(element.attr(Common.DATA_ATTRIBUTE_PREFIX + "title") !== Common.NO_ATTRIBUTE) {
|
||||
|
||||
// Restore element's title
|
||||
element.attr("title", element.attr(Common.DATA_ATTRIBUTE_PREFIX + "title"));
|
||||
|
||||
// Remove element's saved title
|
||||
element.removeAttr(Common.DATA_ATTRIBUTE_PREFIX + "title");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Remind me later focus event
|
||||
}).on("focus", function() {
|
||||
|
||||
// Get element
|
||||
var element = $(this);
|
||||
|
||||
// Check if element's text is shown
|
||||
if(element.children().is(":visible") === true) {
|
||||
|
||||
// Save element's title
|
||||
element.attr(Common.DATA_ATTRIBUTE_PREFIX + "title", element.attr("title"));
|
||||
|
||||
// Remove element's title
|
||||
element.removeAttr("title");
|
||||
}
|
||||
|
||||
// Remind me later blur event
|
||||
}).on("blur", function() {
|
||||
|
||||
// Get element
|
||||
var element = $(this);
|
||||
|
||||
// Check if can't hover or element isn't hovered
|
||||
if((typeof matchMedia !== "function" || matchMedia("(any-hover: hover)")["matches"] === false) || element.is(":hover") === false) {
|
||||
|
||||
// Check if element's title is saved
|
||||
if(element.attr(Common.DATA_ATTRIBUTE_PREFIX + "title") !== Common.NO_ATTRIBUTE) {
|
||||
|
||||
// Restore element's title
|
||||
element.attr("title", element.attr(Common.DATA_ATTRIBUTE_PREFIX + "title"));
|
||||
|
||||
// Remove element's saved title
|
||||
element.removeAttr(Common.DATA_ATTRIBUTE_PREFIX + "title");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Show
|
||||
show() {
|
||||
|
||||
// Set can show
|
||||
this.canShow = true;
|
||||
|
||||
// Check if not an app or extension and not loading from file
|
||||
if(Common.isApp() === false && Common.isExtension() === false && location["protocol"] !== Common.FILE_PROTOCOL) {
|
||||
|
||||
// Check if the install app prompt exists, cookie acceptance is hidden, and wasn't installed
|
||||
if(installAppPrompt !== InstallApp.NO_INSTALL_APP_PROMPT && this.cookieAcceptanceIsHidden === true && this.wasInstalled === false) {
|
||||
|
||||
// Get remind me later timestamp
|
||||
var remindMeLaterTimestamp = localStorage.getItem(InstallApp.INSTALL_APP_REMIND_ME_LATER_TIMESTAMP_LOCAL_STORAGE_NAME);
|
||||
|
||||
// Check if it's time to remind about installing the app
|
||||
if(remindMeLaterTimestamp === Common.INVALID_LOCAL_STORAGE_ITEM || parseInt(remindMeLaterTimestamp, Common.DECIMAL_NUMBER_BASE) <= Common.getCurrentTimestamp() - InstallApp.REMIND_ME_LATER_DURATION_SECONDS) {
|
||||
|
||||
// Show install app display and make it so that its elements can be focused
|
||||
this.installAppDisplay.removeClass("hide noFocus");
|
||||
|
||||
// Return true
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Return false
|
||||
return false;
|
||||
}
|
||||
|
||||
// No install app prompt
|
||||
static get NO_INSTALL_APP_PROMPT() {
|
||||
|
||||
// Return no install app prompt
|
||||
return null;
|
||||
}
|
||||
|
||||
// Private
|
||||
|
||||
// Hide
|
||||
hide() {
|
||||
|
||||
// Set install app prompt to no install app prompt
|
||||
this.installAppPrompt = InstallApp.NO_INSTALL_APP_PROMPT;
|
||||
|
||||
// Hide install app display
|
||||
this.installAppDisplay.addClass("hide");
|
||||
}
|
||||
|
||||
// Remind me later duration seconds
|
||||
static get REMIND_ME_LATER_DURATION_SECONDS() {
|
||||
|
||||
// Return remind me later duration seconds
|
||||
return 90 * Common.HOURS_IN_A_DAY * Common.MINUTES_IN_AN_HOUR * Common.SECONDS_IN_A_MINUTE;
|
||||
}
|
||||
|
||||
// Install app remind me later timestamp local storage name
|
||||
static get INSTALL_APP_REMIND_ME_LATER_TIMESTAMP_LOCAL_STORAGE_NAME() {
|
||||
|
||||
// Return install app remind me later timestamp local storage name
|
||||
return "Install App Remind Me Later Timestamp";
|
||||
}
|
||||
|
||||
// App install outcome
|
||||
static get APP_INSTALLED_OUTCOME() {
|
||||
|
||||
// Return app installed outcome
|
||||
return "accepted";
|
||||
}
|
||||
|
||||
// Return cookie acceptance hide before show delay milliseconds
|
||||
static get COOKIE_ACCEPTANCE_HIDE_BEFORE_SHOW_DELAY_MILLISECONDS() {
|
||||
|
||||
// Return cookie acceptance hide before show delay milliseconds
|
||||
return 100;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Global variables
|
||||
|
||||
// Install app prompt
|
||||
var installAppPrompt = InstallApp.NO_INSTALL_APP_PROMPT;
|
||||
|
||||
|
||||
// Main function
|
||||
|
||||
// Set global object's install app
|
||||
globalThis["InstallApp"] = InstallApp;
|
||||
|
||||
// Window before install prompt event
|
||||
$(window).on("beforeinstallprompt", function(event) {
|
||||
|
||||
// Prevent default
|
||||
event.preventDefault();
|
||||
|
||||
// Store install app prompt
|
||||
installAppPrompt = event["originalEvent"];
|
||||
});
|
Reference in New Issue
Block a user