- <html>
- <head>
- <title>Translating 1.1</title>
- <meta http-equiv="content-type" content="text/html;charset=utf-8" />
- <style type="text/css">
- strong a{padding-left:7px; padding-right:7px; border:1px outset; cursor:pointer;}
- </style>
- <script type="text/javascript">
- var TL = {
- executingTime : false,
- TSQLReverseWord : ["@@IDENTITY","ENCRYPTION","ORDER","ADD","END","OUTER","ALL","ERRLVL","OVER","ALTER","ESCAPE","PERCENT","AND","EXCEPT","PLAN","ANY","EXEC","PRECISION","AS","EXECUTE","PRIMARY","ASC","EXISTS","PRINT","AUTHORIZATION","EXIT","PROC","AVG","EXPRESSION","PROCEDURE","BACKUP","FETCH","PUBLIC","BEGIN","FILE","RAISERROR","BETWEEN","FILLFACTOR","READ","BREAK","FOR","READTEXT","BROWSE","FOREIGN","RECONFIGURE","BULK","FREETEXT","REFERENCES","BY","FREETEXTTABLE","REPLICATION","CASCADE","FROM","RESTORE","CASE","FULL","RESTRICT","CHECK","FUNCTION","RETURN","CHECKPOINT","GOTO","REVOKE","CLOSE","GRANT","RIGHT","CLUSTERED","GROUP","ROLLBACK","COALESCE","HAVING","ROWCOUNT","COLLATE","HOLDLOCK","ROWGUIDCOL","COLUMN","IDENTITY","RULE","COMMIT","IDENTITY_INSERT","SAVE","COMPUTE","IDENTITYCOL","SCHEMA","CONSTRAINT","IF","SELECT","CONTAINS","IN","SESSION_USER","CONTAINSTABLE","INDEX","SET","CONTINUE","INNER","SETUSER","CONVERT","INSERT","SHUTDOWN","COUNT","INTERSECT","SOME","CREATE","INTO","STATISTICS","CROSS","IS","SUM","CURRENT","JOIN","SYSTEM_USER","CURRENT_DATE","KEY","TABLE","CURRENT_TIME","KILL","TEXTSIZE","CURRENT_TIMESTAMP","LEFT","THEN","CURRENT_USER","LIKE","TO","CURSOR","LINENO","TOP","DATABASE","LOAD","TRAN","DATABASEPASSWORD","MAX","TRANSACTION","DATEADD","MIN","TRIGGER","DATEDIFF","NATIONAL","TRUNCATE","DATENAME","NOCHECK","TSEQUAL","DATEPART","NONCLUSTERED","UNION","DBCC","NOT","UNIQUE","DEALLOCATE","NULL","UPDATE","DECLARE","NULLIF","UPDATETEXT","DEFAULT","OF","USE","DELETE","OFF","USER","DENY","OFFSETS","VALUES","DESC","ON","VARYING","DISK","OPEN","VIEW","DISTINCT","OPENDATASOURCE","WAITFOR","DISTRIBUTED","OPENQUERY","WHEN","DOUBLE","OPENROWSET","WHERE","DROP","OPENXML","WHILE","DUMP","OPTION","WITH","ELSE","OR","WRITETEXT"],
- keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
- changeTab : function(obj){
- var strongs = document.getElementsByTagName("strong");
- for(var i = 0; i < strongs.length; i++){
- strongs[i].firstChild.style.backgroundColor = "transparent";
- }
- obj.style.backgroundColor = "lightblue";
-
- var panels = document.getElementById("panels");
- for(var i = 0; i < panels.childNodes.length; i++){
- if(panels.childNodes[i].nodeType == 1 && panels.childNodes[i].tagName == "DIV"){
- panels.childNodes[i].style.display = panels.childNodes[i].getAttribute("panel") == obj.getAttribute("tab") ? "block" : "none";
- }
- }
- },
- time : function(end){
- if(end){
- if(this.executingTime){
- var now = new Date();
- var ms = now.getTime() - this.executingTime.getTime();
- var time = Math.floor((ms/60000.0)%60) >= 1 ? Math.floor((ms/60000.0)%60) + " minute(s)" : "";
- time += Math.floor((ms/1000.0)%60) >= 1 ? Math.floor((ms/1000.0)%60) + " second(s) " : (time.length > 0 ? " 0 second " : "");
- time += ms%1000 + " miliseconds";
- document.getElementById("timer").innerHTML = time;
- }else{
- document.getElementById("timer").innerHTML = "Error time slip.";
- }
- }else{
- this.executingTime = new Date();
- }
- },
- clear : function(){
- document.getElementById("InputArea").value = "";
- document.getElementById("OutputArea").value = "";
- },
- CopyToClipboard : function(){
- if (window.clipboardData){
- window.clipboardData.setData("Text", document.getElementById("OutputArea").value);
- }else if (window.netscape){
- netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
- var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);
- if (!clip) return;
- var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);
- if (!trans) return;
- trans.addDataFlavor('text/unicode');
- var str = new Object();
- var len = new Object();
- var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
- var copytext=document.getElementById("OutputArea").value;
- str.data=copytext;
- trans.setTransferData("text/unicode",str,copytext.length*2);
- var clipid=Components.interfaces.nsIClipboard;
- if (!clip) return false;
- clip.setData(trans,null,clipid.kGlobalClipboard);
- }else{
- return false;
- }
- return false;
- },
- blogger : function(reverse){
- this.time(false);
- if(reverse){
- var input = document.getElementById("InputArea").value;
- var chars = [{s:"\t",r:" "},{s:" ",r:" "},{s:"<",r:"<"},{s:">",r:">"},{s:"&",r:"&"}];
- var temp = input;
- for(var i in chars){
- while((input = input.replace(chars[i].r, chars[i].s)) != temp) temp = input;
- }
- document.getElementById("OutputArea").value = input;
- }else{
- var input = document.getElementById("InputArea").value.split("");
- var chars = [{s:"&",r:"&"},{s:" ",r:" "},{s:"\t",r:" "},{s:"<",r:"<"},{s:">",r:">"}];
- for(var i = 0; i < input.length; i++){
- for(var j in chars) input[i] = input[i].replace(chars[j].s, chars[j].r);
- }
- document.getElementById("OutputArea").value = input.join("");
- }
- this.time(true);
- },
- sql : function(){
- this.time(false);
- var input = document.getElementById("InputArea").value;
- var wd =false;
- var mg = false;
- this.TSQLReverseWord = this.TSQLReverseWord.sort();
- for(var i in this.TSQLReverseWord){
- wd = this.TSQLReverseWord[i];
- var pattern = new RegExp("[\\D\\W]?(" + wd + ")[\\D\\W]?", "i");
- mg = input.match(pattern);
- if(mg){
- for(var j = 0; j < mg.length; j++){
- input = input.replace(mg[j].toString(), mg[j].toString().toUpperCase());
- }
- }
- }
- document.getElementById("OutputArea").value = input;
- this.time(true);
- },
- url : function(reverse){
- this.time(false);
- if(reverse){
- document.getElementById("OutputArea").value = decodeURI(document.getElementById("InputArea").value);
- }else{
- document.getElementById("OutputArea").value = encodeURI(document.getElementById("InputArea").value);
- }
- this.time(true);
- },
- base64 : function(reverse){
- this.time(false);
- var input = document.getElementById("InputArea").value;
- if(reverse){
- debugger;
- var output = "";
- var chr1, chr2, chr3;
- var enc1, enc2, enc3, enc4;
- var i = 0;
-
- // remove all characters that are not A-Z, a-z, 0-9, +, /, or =
- input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
-
- do {
- enc1 = this.keyStr.indexOf(input.charAt(i++));
- enc2 = this.keyStr.indexOf(input.charAt(i++));
- enc3 = this.keyStr.indexOf(input.charAt(i++));
- enc4 = this.keyStr.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);
- }
- } while (i < input.length);
- document.getElementById("OutputArea").value = this._utf8_decode(output);
- }else{
- input = this._utf8_encode(input);
- var output = "";
- var chr1, chr2, chr3;
- var enc1, enc2, enc3, enc4;
- var i = 0;
-
- do {
- 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 + this.keyStr.charAt(enc1) + this.keyStr.charAt(enc2) +
- this.keyStr.charAt(enc3) + this.keyStr.charAt(enc4);
- } while (i < input.length);
- document.getElementById("OutputArea").value = output;
- }
- this.time(true);
- },
- _utf8_encode : function (string) {
- string = string.replace(/\r\n/g,"\n");
- var utftext = "";
- for (var n = 0; n < string.length; n++) {
- var c = string.charCodeAt(n);
- if (c < 128) {
- utftext += String.fromCharCode(c);
- } else if((c > 127) && (c < 2048)) {
- utftext += String.fromCharCode((c >> 6) | 192);
- utftext += String.fromCharCode((c & 63) | 128);
- } else {
- utftext += String.fromCharCode((c >> 12) | 224);
- utftext += String.fromCharCode(((c >> 6) & 63) | 128);
- utftext += String.fromCharCode((c & 63) | 128);
- }
- }
- return utftext;
- },
- _utf8_decode : function (utftext) {
- var string = "";
- var i = 0;
- var c = c1 = c2 = 0;
- while ( i < utftext.length ) {
- c = utftext.charCodeAt(i);
- if (c < 128) {
- string += String.fromCharCode(c);
- i++;
- } else if((c > 191) && (c < 224)) {
- c2 = utftext.charCodeAt(i+1);
- string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
- i += 2;
- } else {
- c2 = utftext.charCodeAt(i+1);
- c3 = utftext.charCodeAt(i+2);
- string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
- i += 3;
- }
- }
- return string;
- },
- ncr : function(reverse){
- this.time(false);
- if(reverse){
- var input = document.getElementById("InputArea").value;
- var ncr = input.match(/&#x([\da-fA-F]+);/g);
- var unicode = false;
- for(var i = 0; i < ncr.length; i++){
- unicode = ncr[i].toString().replace(/&#x([\da-fA-F]+);/, '$1');
- input = input.replace(ncr[i].toString(), String.fromCharCode(parseInt(unicode, 16)));
- }
- document.getElementById("OutputArea").value = input;
- }else{
- var input = document.getElementById("InputArea").value.split("");
- for(var i = 0; i < input.length; i++){
- if(input[i].charCodeAt(0) < 128) continue;
- input[i] = "&#x" + input[i].charCodeAt(0).toString(16) + ";";
- }
- document.getElementById("OutputArea").value = input.join("");
- }
- this.time(true);
- },
- properties : function(reverse){
- this.time(false);
- if(reverse){
- var input = document.getElementById("InputArea").value;
- var prop = input.match(/[\\]u([\da-fA-F]+)/g);
- var unicode = false;
- for(var i = 0; i < prop.length; i++){
- unicode = prop[i].toString().replace(/[\\]u([\da-fA-F]+)/, '$1');
- input = input.replace(prop[i].toString(), String.fromCharCode(parseInt(unicode, 16)));
- }
- document.getElementById("OutputArea").value = input;
- }else{
- var lines = document.getElementById("InputArea").value.split("\n");
- //alert(lines.length);
- var out = "";
- var chars = [];
- for(var n in lines){
- //alert(line);
- chars = lines[n].split("");
- if(chars[0] != "#" && chars[0] != "!") // continue; // for comment
- for(var i = 0; i < chars.length; i++){
- if(chars[i].charCodeAt(0) < 128) continue;
- chars[i] = chars[i].charCodeAt(0) > 127 ? "\\u" + chars[i].charCodeAt(0).toString(16) : chars[i];
- }
- out += chars.join("");
- }
-
- document.getElementById("OutputArea").value = out;
- }
- this.time(true);
- },
- srt : function(){
- this.time(false);
- var hh, mm, ss, micro;
- var input = document.getElementById("InputArea").value.split("\n");
- var addtime = document.getElementById("addtime").value;
- try{
- microseconds = parseInt(microseconds);
- }catch(e){
- alert(e);
- return;
- }
- var arrow = " --> ";
- var times;
- for(i = 0; i < content.length; i++){
- if(content[i].indexOf(arrow) > -1){
- times = content[i].split(arrow);
-
- // =====開始時間=====
- times[0] = this.moveTimeStamp(times[0], microseconds);
-
- // =====結束時間=====
- times[1] = this.moveTimeStamp(times[1], microseconds);
-
- content[i] = times.join(arrow);
- }
- }
- document.getElementById("OutputArea").value = input.join("\n");
- this.time(true);
- },
- moveTimeStamp : function(time, microseconds){
- hhTemp = time.substring(0,2);
- mmTemp = time.substring(3,5);
- ssTemp = time.substring(6,8);
- microTemp = time.substring(9,12);
-
- // 去掉字首的 0 (原因 : 在parseInt時會出錯)
- hhTemp = hhTemp.substring(0,1) == "0" ? hhTemp.substring(1, hhTemp.length) : hhTemp;
- mmTemp = mmTemp.substring(0,1) == "0" ? mmTemp.substring(1, mmTemp.length) : mmTemp;
- ssTemp = ssTemp.substring(0,1) == "0" ? ssTemp.substring(1, ssTemp.length) : ssTemp;
- while(microTemp.substring(0,1) == "0" && microTemp.length > 1){
- microTemp = microTemp.substring(1, microTemp.length);
- }
-
- hhTemp = parseInt(hhTemp);
- mmTemp = parseInt(mmTemp);
- ssTemp = parseInt(ssTemp);
- microTemp = parseInt(microTemp);
- //換成 timeStamp計算
- timeStamp = microTemp + ssTemp * 1000 + mmTemp * 60 * 1000 + hhTemp * 60 * 60 * 1000;
-
- // 加上位移時間
- timeStamp += microseconds;
-
- microTemp = timeStamp % 1000;
- ssTemp = Math.floor((timeStamp % 60000) / 1000);
- mmTemp = Math.floor((timeStamp % 3600000) / 60000);
- hhTemp = Math.floor((timeStamp % 216000000) / 3600000);
-
- // 轉為字串
- hhTemp = ("" + hhTemp).length == 1 ? ("0" + hhTemp) : ("" + hhTemp);
- mmTemp = ("" + mmTemp).length == 1 ? ("0" + mmTemp) : ("" + mmTemp);
- ssTemp = ("" + ssTemp).length == 1 ? ("0" + ssTemp) : ("" + ssTemp);
- while(("" + microTemp).length < 3){
- microTemp = "0" + microTemp;
- }
-
- // 寫回資料
- return hhTemp + ":" + mmTemp + ":" + ssTemp + "," + microTemp;
- }
- };
- var JSONFormater = {
- indentType: "\t",
- source: false,
- output: "",
- format: function() {
- if (document.getElementById("InputArea").value.length == 0) {
- alert("Empty source.");
- return;
- }
- try {
- eval("JSONFormater.source = " + document.getElementById("InputArea").value + ";");
- } catch (e) {
- alert("Invalid JSON data.");
- return;
- }
- this.indentType = this.selectedIndent();
- this.iteratorChilds(this.source, 0, false);
- this.clearTails();
- document.getElementById("OutputArea").value = this.output;
- this.output = "";
- },
- hasMembers: function(obj) {
- for (var m in obj) return true;
- return false;
- },
- isArray: function(obj) {
- return obj.constructor == Array;
- },
- isString: function(obj) {
- return obj.constructor == String;
- },
- iteratorChilds: function(obj, indent, isMember) {
-
- if (this.isArray(obj)) {
- this.output += "[\n";
- for (var i = 0; i < obj.length; i++) {
- this.iteratorChilds(obj[i], indent + 1, false);
- }
- this.clearTails();
- this.output += this.currentIndent(indent);
- this.output += "],\n";
- } else if (this.hasMembers(obj)) {
- if (!isMember) this.output += this.currentIndent(indent);
- this.output += "{\n";
- for (var e in obj) {
- this.output += this.currentIndent(indent + 1);
- this.output += (this.isString(e) ? "\"" + e + "\"" : e) + ": ";
- this.iteratorChilds(obj[e], indent + 1, true);
- }
- this.clearTails();
- this.output += this.currentIndent(indent);
- this.output += "},\n";
- } else {
- if (!isMember) this.output += this.currentIndent(indent);
- this.output += this.isString(obj) ? "\"" + obj + "\"" : obj;
- this.output += ",\n";
- }
- },
- currentIndent: function(ident) {
- var it = "";
- for (var i = 0; i < ident; i++) {
- it += this.indentType;
- }
- return it;
- },
- clearTails: function() {
- if (this.output.length > 2) this.output = this.output.substring(0, this.output.length - 2) + "\n";
- },
- selectedIndent: function() {
- switch (document.getElementById("indentType").value) {
- case "1":
- return "\t";
- case "2":
- return " ";
- case "3":
- return " ";
- case "4":
- return " ";
- case "8":
- return " ";
- }
- }
- };
- window.onresize = function(){
- document.getElementById("InputArea").style.height = (document.body.offsetHeight-140)/2;
- document.getElementById("OutputArea").style.height = (document.body.offsetHeight-140)/2;
- };
- </script>
- </head>
- <body onload="window.onresize();">
- <form>
- <div>
- <strong><a onclick="TL.changeTab(this);" tab="1" style="background-color:lightblue;">Bloger</a></strong>
- <strong><a onclick="TL.changeTab(this);" tab="8">Json Formater</a></strong>
- <strong><a onclick="TL.changeTab(this);" tab="2">SQL</a></strong>
- <strong><a onclick="TL.changeTab(this);" tab="3">URL</a></strong>
- <strong><a onclick="TL.changeTab(this);" tab="4">BASE64</a></strong>
- <strong><a onclick="TL.changeTab(this);" tab="5">NCR</a></strong>
- <strong><a onclick="TL.changeTab(this);" tab="6">Java properties</a></strong>
- <strong><a onclick="TL.changeTab(this);" tab="7">SRT</a></strong>
- </div>
- <div>
- <textarea id="InputArea" rows="7" style="width:100%;"></textarea>
- </div>
- <div>
- <textarea id="OutputArea" rows="7" style="width:100%;background-color:#eeeeee;" readonly="true"></textarea>
- </div>
- <div id="panels">
- <div panel="1">
- <h4>for Blogger post.</h4>
- <input type="button" value="Translate" onclick="TL.blogger();" />
- <input type="button" value="Restore" onclick="TL.blogger(true);" />
- <input type="button" value="Clear" onclick="TL.clear();" />
- <input type="button" value="Copy" onclick="TL.CopyToClipboard();" />
- </div>
- <div panel="8" style="display:none;">
- <h4>Json Formater</h4>
- <input type="button" value="format" onclick="JSONFormater.format();" />
- <select id="indentType">
- <option value="1" selected="selected">indent with a tab character</option>
- <option value="2">indent with 2 spaces</option>
- <option value="3">indent with 3 spaces</option>
- <option value="4">indent with 4 spaces</option>
- <option value="8">indent with 8 spaces</option>
- </select>
- <input type="button" value="Clear" onclick="TL.clear();" />
- <input type="button" value="Copy" onclick="TL.CopyToClipboard();" />
- </div>
- <div panel="2" style="display:none;">
- <h4>for SQL statement.</h4>
- <input type="button" value="Translate" onclick="TL.sql();" />
- <input type="button" value="Clear" onclick="TL.clear();" />
- <input type="button" value="Copy" onclick="TL.CopyToClipboard();" />
- </div>
- <div panel="3" style="display:none;">
- <h4>for URL encode/decode.</h4>
- <input type="button" value="Translate" onclick="TL.url();" />
- <input type="button" value="Restore" onclick="TL.url(true);" />
- <input type="button" value="Clear" onclick="TL.clear();" />
- <input type="button" value="Copy" onclick="TL.CopyToClipboard();" />
- </div>
- <div panel="4" style="display:none;">
- <h4>for BASE64 encode/decode.</h4>
- <input type="button" value="Translate" onclick="TL.base64();" />
- <input type="button" value="Restore" onclick="TL.base64(true);" />
- <input type="button" value="Clear" onclick="TL.clear();" />
- <input type="button" value="Copy" onclick="TL.CopyToClipboard();" />
- </div>
- <div panel="5" style="display:none;">
- <h4>Numeric Character Reference (letter code less than 128 won't be translated.)</h4>
- <input type="button" value="Translate" onclick="TL.ncr();" />
- <input type="button" value="Restore" onclick="TL.ncr(true);" />
- <input type="button" value="Clear" onclick="TL.clear();" />
- <input type="button" value="Copy" onclick="TL.CopyToClipboard();" />
- </div>
- <div panel="6" style="display:none;">
- <h4>for Java properties file</h4>
- <input type="button" value="Translate" onclick="TL.properties();" />
- <input type="button" value="Restore" onclick="TL.properties(true);" />
- <input type="button" value="Clear" onclick="TL.clear();" />
- <input type="button" value="Copy" onclick="TL.CopyToClipboard();" />
- </div>
- <div panel="7" style="display:none;">
- <h4>time control</h4>
- <input type="text" id="addtime" />
- <input type="button" value="Translate" />
- <input type="button" value="Clear" onclick="TL.clear();" />
- <input type="button" value="Copy" onclick="TL.CopyToClipboard();" />
- </div>
- <p id="timer">
- </p>
- </div>
- </form>
- </body>
- </html>