//////////////////////////////////////////////////////////////////////// // Base64 API //////////////////////////////////////////////////////////////////////// var scope = { VERSIONINFO: "Base64 Module (base64.js) version 0.1", global: global, require: global.require }; scope.createMSXMLObject = function() { var progIDs = [ "Msxml2.DOMDocument.6.0", "Msxml2.DOMDocument.5.0", "Msxml2.DOMDocument.4.0", "Msxml2.DOMDocument.3.0", "MSXML2.DOMDocument", "MSXML.DOMDocument" ]; for (var i = 0; i < progIDs.length; i++) { try { return new ActiveXObject(progIDs[i]); } catch(e) {}; } return null; }; scope.getStream_StringToBinary = function(dText) { var adTypeText = 2; var adTypeBinary = 1; var BinaryStream = new ActiveXObject("ADODB.Stream"); BinaryStream.Type = adTypeText; BinaryStream.CharSet = "utf-8"; BinaryStream.Open(); BinaryStream.WriteText(dText); BinaryStream.Position = 0; BinaryStream.Type = adTypeBinary; BinaryStream.Position = 0; return BinaryStream.Read(); }; scope.getStream_BinaryToString = function(dBinary) { var adTypeText = 2; var adTypeBinary = 1; var BinaryStream = new ActiveXObject("ADODB.Stream"); BinaryStream.Type = adTypeBinary; BinaryStream.Open(); BinaryStream.Write(dBinary); BinaryStream.Position = 0; BinaryStream.Type = adTypeText; BinaryStream.CharSet = "utf-8"; return BinaryStream.ReadText(); }; scope.encode = function(sText) { var oXML = scope.createMSXMLObject(); var oNode = oXML.createElement("base64"); oNode.dataType = "bin.base64"; oNode.nodeTypedValue = scope.getStream_StringToBinary(sText); return oNode.text; }; scope.decode = function(vCode) { var oXML = scope.createMSXMLObject(); var oNode = oXML.createElement("base64"); oNode.dataType = "bin.base64"; oNode.text = vCode; return scope.getStream_BinaryToString(oNode.nodeTypedValue); }; return scope;