1/* 2 * Copyright (c) 2018-2026, FusionAuth, All Rights Reserved 3 */ 4'use strict'; 5 6var FusionAuth = FusionAuth || {}; 7 8FusionAuth.Util = { 9 unescapeHTML: function(html) { 10 return html.replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/&/g, '&'); 11 }, 12 13 base64URLToBuffer: function(base64URL) { 14 const base64 = base64URL.replace(/-/g, '+').replace(/_/g, '/'); 15 const padLen = (4 - (base64.length % 4)) % 4; 16 return Uint8Array.from(atob(base64.padEnd(base64.length + padLen, '=')), c => c.charCodeAt(0)); 17 }, 18 19 bufferToBase64URL: function(buffer) { 20 const bytes = new Uint8Array(buffer); 21 let string = ''; 22 bytes.forEach(b => string += String.fromCharCode(b)); 23 24 const base64 = btoa(string); 25 return base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, ''); 26 }, 27 28 togglePasswordMasking: function(button) { 29 const inputId = button.dataset.visibilityTarget; 30 const input = document.getElementById(inputId); 31 const newType = input.type === "password" ? "text" : "password"; 32 input.type = newType; 33 button.querySelectorAll('svg').forEach(svg => svg.classList.toggle('hidden')); 34 } 35};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.