cosmic-lib
Version:
A JavaScript implementation of the CosmicLink protocol for Stellar
98 lines (84 loc) • 2.52 kB
JavaScript
;
/**
* Contains the methods to trigger and handle events.
*
* @private
* @exports event
*/
const event = exports;
const html = require("@cosmic-plus/domutils/es5/html");
const format = require("./format");
/** *** Click events *****/
/**
* Set the click handler for **type** HTML elements as **callback**.
*
* @example
* cosmicLib.config.setClickHandler('address', showAddressPopup)
*
* @param {string} type Type of a transaction/operation field such as
* `address`, `asset`, `hash`, ...
* @param {function} callback A function that accept one `event` argument
*/
event.setClickHandler = function (conf, type, callback) {
conf.clickHandlers[type] = callback;
};
/**
* Remove the current click handler for **type**.
*
* @example
* cosmicLib.config.clearClickHandler('address')
*
* @param {string} type Type of a transaction/operation field such as
* `address`, `asset`, `hash`, ...
*/
event.clearClickHandler = function (conf, type) {
conf.clickHandlers[type] = undefined;
};
event.callClickHandler = function (conf, type, event) {
const handler = conf.clickHandlers[type];
event.extra = event.domNode.extra;
event.field = event.domNode.field;
event.tdesc = format.parentTdesc(conf, event.domNode);
event.odesc = format.parentOdesc(conf, event.domNode);
event.index = format.parentIndex(conf, event.domNode);
if (handler) handler(event);
};
/**
* The active click handlers. Takes the form:
*
* ```
* cosmicLib.config.clickHandlers = {
* type1: callback1,
* ...
* typeN: callbackN
* }
* ```
*
* Thoses click handlers are set by default:
*
* * **address**: A prompt that shows the address details
* * **id**: A function that copy the id into the clipboard
* * **hash**: A function that copy the hash into the clipboard or show a prompt
* for preimage signature when relevant
* ```
*/
event.defaultClickHandlers = {
address: function (event) {
if (!event.extra) return;
let message = "";
for (let field in event.extra) {
message += "".concat(field, ":\n") + "".concat(event.extra[field], "\n\n");
}
window.alert(message);
},
hash: function (event) {
const grandma = event.domNode.parentNode.parentNode.parentNode;
if (grandma.classList.contains("cosmiclib_signers")) {
const preimage = prompt("Please enter preimage:");
if (preimage) event.cosmicLink.sign(preimage);
} else {
html.copyString(event.value);
}
},
id: event => html.copyString(event.value)
};