UNPKG

cosmic-lib

Version:

A JavaScript implementation of the CosmicLink protocol for Stellar

98 lines (84 loc) 2.52 kB
"use strict"; /** * 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) };