หมายเหตุ: หลังเผยแพร่ คุณอาจต้องล้างแคชเว็บเบราว์เซอร์ของคุณเพื่อดูการเปลี่ยนแปลง

  • ไฟร์ฟอกซ์ / ซาฟารี: กด Shift ค้างขณะคลิก Reload หรือกด Ctrl-F5 หรือ Ctrl-R (⌘-R บนแมค)
  • กูเกิล โครม: กด Ctrl-Shift-R (⌘-Shift-R บนแมค)
  • ไมโครซอฟท์ เอดจ์: กด Ctrl ค้างขณะคลิก Refresh หรือกด Ctrl-F5
// ==============================================================
// สคริปต์จัดให้: bindings module
//
// 2006-2008, Jutiphan Mongkolsuthree
// Certain functions are copyrighted by their
// respective copyright holders
//
// Created: 21/3/2008
// Replaced: none
// ==============================================================
/*
	Packer version 3.0 (final) - copyright 2004-2007, Dean Edwards
	http://www.opensource.org/licenses/mit-license
*/
/* <pre><nowiki> */

var packer = new Packer;

new base2.JSB.RuleList({
	"#form": {
		ondocumentready: function() {
			this.removeClass("disabled");
			output.value = "";
			this.ready();
		},
		
		ready: function() {
			message.write("ready");
			input.focus();
		}
	},
	"#input,#output": {
		disabled: false,
		spellcheck: false // for mozilla
	},
	"#clear-all": {
		disabled: false,
		
		onclick: function() {
			form.filetype.value = "";
			form.filename.value = "";
			input.value = "";
			output.value = "";
			uploadScript.style.display = "";
			loadScript.style.display = "";
			uploadScript.disabled = true;
			saveScript.disabled = false;
			form.ready();
		}
	},
	"#pack-script": {
		disabled: false,
		
		onclick: function() {
			try {
				output.value = "";
				if (input.value) {
					var value = packer.pack(input.value, base62.checked, shrink.checked);
					output.value = value;
					message.update();
				}
			} catch (error) {
				message.error("error packing script", error);
			} finally {
				saveScript.disabled = !output.value;
				decodeScript.disabled = !output.value || !base62.checked;
			}
		}
	},
	"#load-script": {
		disabled: false,
		
		onclick: function() {
			uploadScript.style.display = "inline";
			uploadScript.disabled = false;
			this.style.display = "none";
		}
	},
	"#save-script": {
		onclick: function() {
			form.command.value = "save";
		}
	},
	"#decode-script": {		
		onclick: function() {
			try {
				if (output.value) {
					var start = new Date;
					eval("var value=String" + output.value.slice(4));
					var stop = new Date;
					output.value = value;
					message.update("unpacked in " + (stop - start) + " milliseconds");
				}
			} catch (error) {
				message.error("error decoding script", error);
			} finally {
				decodeScript.blur();
				decodeScript.disabled = true;
			}
		}
	},
	"#upload-script": {
		onchange: function() {
			form.encoding = "multipart/form-data";
			form.command.value = "load";
			form.submit();
		}
	},
	"#base62,#shrink": {
		disabled: false
	},
	"#message": {
		error: function(text, error) {
			this.write(text + ": " + error.message, "error");
		},
		
		update: function(message) {
			var length = input.value.length;
			if (!/\r/.test(input.value)) { // mozilla trims carriage returns
				length += match(input.value, /\n/g).length;
			}
			var calc = output.value.length + "/" + length;
			var ratio = (output.value.length / length).toFixed(3);
			this.write((message ? message + ", " : "") + format("compression ratio: %1=%2", calc, ratio));
		},
		
		write: function(text, className) {
			this.innerHTML = text;
			this.className = className || "";
		} 
	}
});

if (!(0).toFixed) Number.prototype.toFixed = function(n) {
	var e = Math.pow(10, n);
	var r = String(Math.round(this * e));
	if (r == 0) for (var i = 0; i < n; i++) r += "0";
	return r.slice(0, r.length - n) + "." + r.slice(r.length - n);
};

/* </nowiki></pre> */