JavaScript generic ASN.1 parser (mirror)
at github-82 1.5 kB view raw
1const 2 id = (elem) => document.getElementById(elem), 3 contextMenu = id('contextmenu'), 4 btnCopyHex = id('btnCopyHex'), 5 btnCopyB64 = id('btnCopyB64'), 6 btnCopyTree = id('btnCopyTree'), 7 btnCopyValue = id('btnCopyValue'); 8 9export function bindContextMenu(node) { 10 const type = node.asn1.typeName(); 11 const valueEnabled = type != 'SET' && type != 'SEQUENCE'; 12 node.onclick = function (event) { 13 contextMenu.style.left = event.pageX + 'px'; 14 contextMenu.style.top = event.pageY + 'px'; 15 contextMenu.style.visibility = 'visible'; 16 contextMenu.node = this; 17 btnCopyValue.style.display = valueEnabled ? 'block' : 'none'; 18 event.stopPropagation(); 19 }; 20}; 21 22function close() { 23 contextMenu.style.visibility = 'hidden'; 24} 25 26contextMenu.onmouseleave = close; 27 28btnCopyHex.onclick = function (event) { 29 event.stopPropagation(); 30 navigator.clipboard.writeText(contextMenu.node.asn1.toHexString('byte')); 31 close(); 32}; 33 34btnCopyB64.onclick = function (event) { 35 event.stopPropagation(); 36 navigator.clipboard.writeText(contextMenu.node.asn1.toB64String()); 37 close(); 38}; 39 40btnCopyTree.onclick = function (event) { 41 event.stopPropagation(); 42 navigator.clipboard.writeText(contextMenu.node.asn1.toPrettyString()); 43 close(); 44}; 45 46btnCopyValue.onclick = function (event) { 47 event.stopPropagation(); 48 navigator.clipboard.writeText(contextMenu.node.asn1.content()); 49 close(); 50};