mirror of
				https://github.com/tc39/test262.git
				synced 2025-11-04 13:44:29 +01:00 
			
		
		
		
	Some JavaScript source files are only relevant in the context of the Test262 website. They should not be explicitly included by individual tests, so their presence in the `harness/` directory alongside "include" files is misleading. Move the scripts to a location within the `website/` directory to better-reflect their intended use. Update the relevant HTML templates with the new locations.
		
			
				
	
	
		
			157 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			157 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
	
 | 
						|
	/**
 | 
						|
	 * jQuery BASE64 functions
 | 
						|
	 * 
 | 
						|
	 * 	<code>
 | 
						|
	 * 		Encodes the given data with base64. 
 | 
						|
	 * 		String $.base64Encode ( String str )
 | 
						|
	 *		<br />
 | 
						|
	 * 		Decodes a base64 encoded data.
 | 
						|
	 * 		String $.base64Decode ( String str )
 | 
						|
	 * 	</code>
 | 
						|
	 * 
 | 
						|
	 * Encodes and Decodes the given data in base64.
 | 
						|
	 * This encoding is designed to make binary data survive transport through transport layers that are not 8-bit clean, such as mail bodies.
 | 
						|
	 * Base64-encoded data takes about 33% more space than the original data. 
 | 
						|
	 * This javascript code is used to encode / decode data using base64 (this encoding is designed to make binary data survive transport through transport layers that are not 8-bit clean). Script is fully compatible with UTF-8 encoding. You can use base64 encoded data as simple encryption mechanism.
 | 
						|
	 * If you plan using UTF-8 encoding in your project don't forget to set the page encoding to UTF-8 (Content-Type meta tag). 
 | 
						|
	 * This function orginally get from the WebToolkit and rewrite for using as the jQuery plugin.
 | 
						|
	 * 
 | 
						|
	 * Example
 | 
						|
	 * 	Code
 | 
						|
	 * 		<code>
 | 
						|
	 * 			$.base64Encode("I'm Persian."); 
 | 
						|
	 * 		</code>
 | 
						|
	 * 	Result
 | 
						|
	 * 		<code>
 | 
						|
	 * 			"SSdtIFBlcnNpYW4u"
 | 
						|
	 * 		</code>
 | 
						|
	 * 	Code
 | 
						|
	 * 		<code>
 | 
						|
	 * 			$.base64Decode("SSdtIFBlcnNpYW4u");
 | 
						|
	 * 		</code>
 | 
						|
	 * 	Result
 | 
						|
	 * 		<code>
 | 
						|
	 * 			"I'm Persian."
 | 
						|
	 * 		</code>
 | 
						|
	 * 
 | 
						|
	 * @alias Muhammad Hussein Fattahizadeh < muhammad [AT] semnanweb [DOT] com >
 | 
						|
	 * @link http://www.semnanweb.com/jquery-plugin/base64.html
 | 
						|
	 * @see http://www.webtoolkit.info/
 | 
						|
	 * @license http://www.gnu.org/licenses/gpl.html [GNU General Public License]
 | 
						|
	 * @param {jQuery} {base64Encode:function(input))
 | 
						|
	 * @param {jQuery} {base64Decode:function(input))
 | 
						|
	 * @return string
 | 
						|
	 */
 | 
						|
	
 | 
						|
	(function($){
 | 
						|
		
 | 
						|
		var keyString = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
 | 
						|
		
 | 
						|
		var uTF8Encode = function(string) {
 | 
						|
			string = string.replace(/\x0d\x0a/g, "\x0a");
 | 
						|
			var output = "";
 | 
						|
			for (var n = 0; n < string.length; n++) {
 | 
						|
				var c = string.charCodeAt(n);
 | 
						|
				if (c < 128) {
 | 
						|
					output += String.fromCharCode(c);
 | 
						|
				} else if ((c > 127) && (c < 2048)) {
 | 
						|
					output += String.fromCharCode((c >> 6) | 192);
 | 
						|
					output += String.fromCharCode((c & 63) | 128);
 | 
						|
				} else {
 | 
						|
					output += String.fromCharCode((c >> 12) | 224);
 | 
						|
					output += String.fromCharCode(((c >> 6) & 63) | 128);
 | 
						|
					output += String.fromCharCode((c & 63) | 128);
 | 
						|
				}
 | 
						|
			}
 | 
						|
			return output;
 | 
						|
		};
 | 
						|
		
 | 
						|
		var uTF8Decode = function(input) {
 | 
						|
			var string = "";
 | 
						|
			var i = 0;
 | 
						|
			var c = c2 = c3 = c4 = 0;
 | 
						|
			while ( i < input.length ) {
 | 
						|
				c = input.charCodeAt(i);
 | 
						|
				if (c < 128) { // 1 byte encoding - ASCII only
 | 
						|
					string += String.fromCharCode(c);
 | 
						|
					i++;
 | 
						|
				} else if ((c >= 192) && (c < 224)) {  // 2 byte encoding - max U+07FF
 | 
						|
					c2 = input.charCodeAt(i+1);
 | 
						|
					string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
 | 
						|
					i += 2;
 | 
						|
				} else if ((c >= 224) && (c < 240)) {  // 3 byte encoding - max U+FFFF
 | 
						|
					c2 = input.charCodeAt(i+1);
 | 
						|
					c3 = input.charCodeAt(i+2);
 | 
						|
					string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
 | 
						|
					i += 3;
 | 
						|
				} else if ((c >= 240) && (c < 248)){  // 4 byte encoding - max U+10FFFF.  Covers all Unicode CodePoints
 | 
						|
					c2 = input.charCodeAt(i+1);
 | 
						|
					c3 = input.charCodeAt(i+2);
 | 
						|
					c4 = input.charCodeAt(i+3);
 | 
						|
					var codePoint = (((c & 7) << 18) | ((c2 & 63) << 12) | ((c3 & 63) << 6) | (c4 & 63));
 | 
						|
					if (codePoint > 0x10FFFF) {
 | 
						|
					    throw new SyntaxError("invalid UTF-8 code unit sequence");
 | 
						|
					}
 | 
						|
					var highSurrogate = (((codePoint - 0x10000) & 0xFFC00) >>> 10) + 0xD800; // Minus 0x10000, then top 10 bits added to 0xD800
 | 
						|
					var lowSurrogate = ((codePoint - 0x10000) & 0x3FF) + 0xDC00; // Minus 0x10000, then low 10 bits added to 0xDC00
 | 
						|
					string += String.fromCharCode(highSurrogate);
 | 
						|
					string += String.fromCharCode(lowSurrogate);
 | 
						|
					i += 4;
 | 
						|
					
 | 
						|
				}
 | 
						|
			}
 | 
						|
			return string;
 | 
						|
		}
 | 
						|
		
 | 
						|
		$.extend({
 | 
						|
			base64Encode: function(input) {
 | 
						|
				var output = "";
 | 
						|
				var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
 | 
						|
				var i = 0;
 | 
						|
				input = uTF8Encode(input);
 | 
						|
				while (i < input.length) {
 | 
						|
					chr1 = input.charCodeAt(i++);
 | 
						|
					chr2 = input.charCodeAt(i++);
 | 
						|
					chr3 = input.charCodeAt(i++);
 | 
						|
					enc1 = chr1 >> 2;
 | 
						|
					enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
 | 
						|
					enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
 | 
						|
					enc4 = chr3 & 63;
 | 
						|
					if (isNaN(chr2)) {
 | 
						|
						enc3 = enc4 = 64;
 | 
						|
					} else if (isNaN(chr3)) {
 | 
						|
						enc4 = 64;
 | 
						|
					}
 | 
						|
					output = output + keyString.charAt(enc1) + keyString.charAt(enc2) + keyString.charAt(enc3) + keyString.charAt(enc4);
 | 
						|
				}
 | 
						|
				return output;
 | 
						|
			},
 | 
						|
			base64Decode: function(input) {
 | 
						|
				var output = "";
 | 
						|
				var chr1, chr2, chr3;
 | 
						|
				var enc1, enc2, enc3, enc4;
 | 
						|
				var i = 0;
 | 
						|
				input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
 | 
						|
				while (i < input.length) {
 | 
						|
					enc1 = keyString.indexOf(input.charAt(i++));
 | 
						|
					enc2 = keyString.indexOf(input.charAt(i++));
 | 
						|
					enc3 = keyString.indexOf(input.charAt(i++));
 | 
						|
					enc4 = keyString.indexOf(input.charAt(i++));
 | 
						|
					chr1 = (enc1 << 2) | (enc2 >> 4);
 | 
						|
					chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
 | 
						|
					chr3 = ((enc3 & 3) << 6) | enc4;
 | 
						|
					output = output + String.fromCharCode(chr1);
 | 
						|
					if (enc3 != 64) {
 | 
						|
						output = output + String.fromCharCode(chr2);
 | 
						|
					}
 | 
						|
					if (enc4 != 64) {
 | 
						|
						output = output + String.fromCharCode(chr3);
 | 
						|
					}
 | 
						|
				}
 | 
						|
				output = uTF8Decode(output);
 | 
						|
				return output;
 | 
						|
			}
 | 
						|
		});
 | 
						|
	})(jQuery);
 |