mirror of
https://github.com/transatoshi-mw/grin-web-wallet.git
synced 2025-10-06 15:52:47 +00:00
274 lines
6.9 KiB
JavaScript
Executable File
274 lines
6.9 KiB
JavaScript
Executable File
// Use strict
|
|
"use strict";
|
|
|
|
|
|
// Classes
|
|
|
|
// Log section class
|
|
class LogSection extends Section {
|
|
|
|
// Public
|
|
|
|
// Constructor
|
|
constructor(display, sections, settings, message, focus, application, unlocked, automaticLock, scroll, wallets, node, wakeLock, transactions, prices, clipboard) {
|
|
|
|
// Delegate constructor
|
|
super(display, sections, settings, message, focus, application, unlocked, automaticLock, scroll, wallets, node, wakeLock, transactions, prices, clipboard);
|
|
|
|
// Get message display
|
|
this.messageDisplay = this.getDisplay().find("div.messages");
|
|
|
|
// Set message counter
|
|
this.messageCounter = 1;
|
|
|
|
// Set maximum number of messages to setting's default value
|
|
this.maximumNumberOfMessages = LogSection.SETTINGS_MAXIMUM_NUMBER_OF_MESSAGES_DEFAULT_VALUE;
|
|
|
|
// Set scroll to bottom
|
|
this.scrollToBottom = true;
|
|
|
|
// Set self
|
|
var self = this;
|
|
|
|
// Once database is initialized
|
|
Database.onceInitialized(function() {
|
|
|
|
// Return promise
|
|
return new Promise(function(resolve, reject) {
|
|
|
|
// Return creating settings
|
|
return Promise.all([
|
|
|
|
// Maximum number of messages setting
|
|
self.getSettings().createValue(LogSection.SETTINGS_MAXIMUM_NUMBER_OF_MESSAGES_NAME, LogSection.SETTINGS_MAXIMUM_NUMBER_OF_MESSAGES_DEFAULT_VALUE)
|
|
|
|
]).then(function() {
|
|
|
|
// Initialize settings
|
|
var settings = [
|
|
|
|
// Maximum number of messages setting
|
|
LogSection.SETTINGS_MAXIMUM_NUMBER_OF_MESSAGES_NAME,
|
|
];
|
|
|
|
// Return getting settings' values
|
|
return Promise.all(settings.map(function(setting) {
|
|
|
|
// Return getting setting's value
|
|
return self.getSettings().getValue(setting);
|
|
|
|
})).then(function(settingValues) {
|
|
|
|
// Set maximum number of messages to setting's value
|
|
self.maximumNumberOfMessages = settingValues[settings.indexOf(LogSection.SETTINGS_MAXIMUM_NUMBER_OF_MESSAGES_NAME)];
|
|
|
|
// Resolve
|
|
resolve();
|
|
|
|
// Catch errors
|
|
}).catch(function(error) {
|
|
|
|
// Reject
|
|
reject();
|
|
});
|
|
|
|
// Catch errors
|
|
}).catch(function(error) {
|
|
|
|
// Reject
|
|
reject();
|
|
});
|
|
});
|
|
});
|
|
|
|
// Settings change event
|
|
$(this.getSettings()).on(Settings.CHANGE_EVENT, function(event, setting) {
|
|
|
|
// Check what setting was changes
|
|
switch(setting[Settings.DATABASE_SETTING_NAME]) {
|
|
|
|
// Maximum number of messages setting
|
|
case LogSection.SETTINGS_MAXIMUM_NUMBER_OF_MESSAGES_NAME:
|
|
|
|
// Set maximum number of messages to setting's value
|
|
self.maximumNumberOfMessages = setting[Settings.DATABASE_VALUE_NAME];
|
|
|
|
// Truncate messages
|
|
self.truncateMessages();
|
|
|
|
// Break
|
|
break;
|
|
}
|
|
});
|
|
|
|
// Check if get selection is supported
|
|
if(typeof getSelection !== "undefined") {
|
|
|
|
// Main copy event
|
|
$("main").on("copy", function(event) {
|
|
|
|
// Check if shown
|
|
if(self.isShown() === true) {
|
|
|
|
// Prevent default
|
|
event.preventDefault();
|
|
|
|
// Get selection without duplicate newlines
|
|
var selection = Common.removeDuplicateNewlines(getSelection().toString());
|
|
|
|
// Set clipboard data to the new selection
|
|
event["originalEvent"]["clipboardData"].setData("text/plain", selection);
|
|
}
|
|
});
|
|
}
|
|
|
|
// Display scroll event
|
|
this.getDisplay().on("scroll", function(event) {
|
|
|
|
// Check if shown
|
|
if(self.isShown() === true) {
|
|
|
|
// Update scroll to bottom
|
|
self.scrollToBottom = Math.abs(self.getDisplay().get(0)["scrollHeight"] - self.getDisplay().get(0)["clientHeight"] - self.getDisplay().get(0)["scrollTop"]) <= Scroll.TOLERANCE || self.getDisplay().get(0)["scrollHeight"] - self.getDisplay().get(0)["scrollTop"] <= self.getDisplay().get(0)["clientHeight"];
|
|
}
|
|
|
|
// Display language change event
|
|
}).on(Language.CHANGE_EVENT, function() {
|
|
|
|
// Check if scroll to bottom
|
|
if(self.scrollToBottom === true) {
|
|
|
|
// Scroll display to the bottom
|
|
self.getDisplay().get(0)["scrollTop"] = self.getDisplay().get(0)["scrollHeight"] - self.getDisplay().get(0)["clientHeight"] + Scroll.TOLERANCE;
|
|
}
|
|
});
|
|
|
|
// Document log message event
|
|
$(document).on(Log.MESSAGE_EVENT, function() {
|
|
|
|
// Increment message counter
|
|
++self.messageCounter;
|
|
|
|
// Truncate messages
|
|
self.truncateMessages();
|
|
});
|
|
|
|
// Section shown event
|
|
$(this).on(Section.SHOWN_EVENT, function() {
|
|
|
|
// Check if scroll to bottom
|
|
if(self.scrollToBottom === true) {
|
|
|
|
// Request animation frame
|
|
requestAnimationFrame(function() {
|
|
|
|
// Scroll display to the bottom
|
|
self.getDisplay().get(0)["scrollTop"] = self.getDisplay().get(0)["scrollHeight"] - self.getDisplay().get(0)["clientHeight"] + Scroll.TOLERANCE;
|
|
});
|
|
}
|
|
});
|
|
|
|
// Window resize event
|
|
$(window).on("resize", function() {
|
|
|
|
// Check if scroll to bottom
|
|
if(self.scrollToBottom === true) {
|
|
|
|
// Scroll display to the bottom
|
|
self.getDisplay().get(0)["scrollTop"] = self.getDisplay().get(0)["scrollHeight"] - self.getDisplay().get(0)["clientHeight"] + Scroll.TOLERANCE;
|
|
}
|
|
});
|
|
}
|
|
|
|
// Get name
|
|
getName() {
|
|
|
|
// Return name
|
|
return LogSection.NAME;
|
|
}
|
|
|
|
// Reset
|
|
reset() {
|
|
|
|
// Reset
|
|
super.reset();
|
|
}
|
|
|
|
// Name
|
|
static get NAME() {
|
|
|
|
// Return name
|
|
return "Log";
|
|
}
|
|
|
|
// Private
|
|
|
|
// Initialize
|
|
initialize(state) {
|
|
|
|
// Set base class initialize
|
|
var baseClassInitialize = super.initialize(state);
|
|
|
|
// Set self
|
|
var self = this;
|
|
|
|
// Return promise
|
|
return new Promise(function(resolve, reject) {
|
|
|
|
// Return initializing base class
|
|
return baseClassInitialize.then(function() {
|
|
|
|
// Resolve
|
|
resolve();
|
|
|
|
// Reject error
|
|
}).catch(function(error) {
|
|
|
|
// Reject error
|
|
reject(error);
|
|
});
|
|
});
|
|
}
|
|
|
|
// Get initialize error header
|
|
getInitializeErrorHeader() {
|
|
|
|
// Return initialize error header
|
|
return Language.getDefaultTranslation('Log Error');
|
|
}
|
|
|
|
// Truncate messages
|
|
truncateMessages() {
|
|
|
|
// Check if too many messages exist
|
|
if(this.messageCounter > this.maximumNumberOfMessages) {
|
|
|
|
// Remove earlier messages
|
|
this.messageDisplay.children("p:lt(" + (this.messageCounter - this.maximumNumberOfMessages).toFixed() + ")").remove();
|
|
|
|
// Update message counter
|
|
this.messageCounter = this.maximumNumberOfMessages;
|
|
}
|
|
}
|
|
|
|
// Settings maximum number of messages name
|
|
static get SETTINGS_MAXIMUM_NUMBER_OF_MESSAGES_NAME() {
|
|
|
|
// Return settings maximum number of messages name
|
|
return "Maximum Number Of Messages";
|
|
}
|
|
|
|
// Settings maximum number of messages default value
|
|
static get SETTINGS_MAXIMUM_NUMBER_OF_MESSAGES_DEFAULT_VALUE() {
|
|
|
|
// Return settings maximum number of messages default value
|
|
return 1000;
|
|
}
|
|
}
|
|
|
|
|
|
// Main function
|
|
|
|
// Set global object's log section
|
|
globalThis["LogSection"] = LogSection;
|