ผู้ใช้:Jutiphan/Scripts/editor/monobook.js

จากวิกิพีเดีย สารานุกรมเสรี

หมายเหตุ: หลังจากบันทึกแล้ว, คุณต้องล้างแคชของเบราว์เซอร์เสียก่อน จึงจะเห็นการเปลี่ยนแปลง: Mozilla/Safari/Konqueror: กด Shift ค้าง แล้วกด Reload (หรือ Ctrl-Shift-R), IE: กด Ctrl-F5, Opera: กด F5

/* <pre><nowiki> */

// ========== ไม้ยมก จัดชิดตัวหน้า  ==========
// สคริปต์นี้ จัดไม้ยมก จาก "ก ๆ ก" เป็น "กๆ ก"
function doConvertYamok() {
  text = document.editform.wpTextbox1.value;
  text = replace(text,' ๆ','ๆ');
  text = replace(text,'&nbsp;ๆ','ๆ');
  document.editform.wpTextbox1.value = text;

  if(document.editform.wpSummary.value.length == 0) {
    document.editform.wpSummary.value = "จัดชิดไม้ยมก";
    document.editform.wpMinoredit.checked = true;
  } else {
    document.editform.wpSummary.value = document.editform.wpSummary.value + " +จัดชิดไม้ยมก";
  }

}



// ========== เปลี่ยนเลขไทยเป็นเลขอารบิก ==========
function doConvertNumber() {
  text = document.editform.wpTextbox1.value;
  text = replace(text,'๑','1');
  text = replace(text,'๒','2');
  text = replace(text,'๓','3');
  text = replace(text,'๔','4');
  text = replace(text,'๕','5');
  text = replace(text,'๖','6');
  text = replace(text,'๗','7');
  text = replace(text,'๘','8');
  text = replace(text,'๙','9');
  text = replace(text,'๐','0');
  document.editform.wpTextbox1.value = text;
  document.editform.wpSummary.value = "เปลี่ยนไปใช้เลขอารบิก";
}

// ========== เปลี่ยนเลขอารบิกเป็นเลขไทย ==========
function doConvertToThaiNumber() {
  text = document.editform.wpTextbox1.value;
  text = replace(text,'1','๑');
  text = replace(text,'2','๒');
  text = replace(text,'3','๓');
  text = replace(text,'4','๔');
  text = replace(text,'5','๕');
  text = replace(text,'6','๖');
  text = replace(text,'7','๗');
  text = replace(text,'8','๘');
  text = replace(text,'9','๙');
  text = replace(text,'0','๐');
  document.editform.wpTextbox1.value = text;
  document.editform.wpSummary.value = "เปลี่ยนไปใช้เลขไทย";
}



// ========== สอบถาม พ.ศ. ==========
function WhatIsThaiYear() {

  var what = getSelText();
  var shortName = false;
  var askMode = false;
  var issueWarning = false;
  var totalWarnings = 0;
  var yr;
  var pYr;
  var txtArea = document.editform.wpTextbox1;

  if (what == null || what.length == 0) {
    what = getSelTextArea();
  }
  if (what != null && what.length > 0) {
    what = what.replace(/ค\.ศ\. ?(\d{1,4})/g, "$1 AD");

    /*if (what.search(/\[\[\d{1,4}\]\]/) != -1) {
      shortName = true;
      what = what.replace(/\[|\]/g, "");
    }*/
  }

  if (what == null || what.length == 0) {
    what = prompt("ระบุปี ค.ศ.:");
    askMode = true;
  }
  if (what == null || what.length == 0) {
    return;
  }
  if (askMode) {
    if (isNaN(what)) {
      return;
    }
    yr = parseInt(what) + 543;
    pYr = parseInt(what) + 542;
    if(yr <= 2483 && iScriptConfig.usePreciseConversion) {
      alert("ค.ศ. " + what + " เท่ากับ พ.ศ. " + pYr + " สำหรับช่วงเดือนมกราคม - มีนาคม\nค.ศ. " + what + " เท่ากับ พ.ศ. " + yr + " สำหรับช่วงเดือนเมษายน - ธันวาคม");
    } else if(yr <= 2483) {
      alert("ค.ศ. " + what + " เท่ากับ พ.ศ. " + yr + "\n\nสคริปต์จัดให้คำนวณด้วยการ +543 เป็นค่าปริยายสำหรับทุกปีซึ่งอาจไม่แม่นยำ โดยคุณสามารถเปลี่ยนการคำนวณด้วยการปรับแต่ง ดูเพิ่มที่หน้าหลักสคริปต์จัดให้");   
    } else {
      alert("ค.ศ. " + what + " เท่ากับ พ.ศ. " + yr);
    }
    return;
  }

  what = what.replace(/(January|February|March|April|May|June|July|August|September|October|November|December) (\d{1,2})/ig, "$2 $1");
  what = what.replace(/January/ig, "มกราคม");
  what = what.replace(/February/ig, "กุมภาพันธ์");
  what = what.replace(/March/ig, "มีนาคม");
  what = what.replace(/April/ig, "เมษายน");
  what = what.replace(/May/ig, "พฤษภาคม");
  what = what.replace(/June/ig, "มิถุนายน");
  what = what.replace(/July/ig, "กรกฎาคม");
  what = what.replace(/August/ig, "สิงหาคม");
  what = what.replace(/September/ig, "กันยายน");
  what = what.replace(/October/ig, "ตุลาคม");
  what = what.replace(/November/ig, "พฤศจิกายน");
  what = what.replace(/December/ig, "ธันวาคม");

  //Fix gap lookahead
  what = what.replace(/(\d{1,4}) AD/ig,"$1AD");
  what = what.replace(/(\d{1,4}) BC/ig,"$1BC");

  //Fix short BC, prevent conflict with just numbers
  what = what.replace(/BC\|\d{1,4}/ig,"BC!");

  //Remove comma
  what = what.replace(/,/g, "");

  var results = what.match(/(\d{3,4}(?!AD|BC|\d{1}))/ig);
  if(results) {
    for (var i = 0; i < results.length; i++) {
      yr = parseInt(results[i]) + 543;
      if(iScriptConfig.usePreciseConversion) {
        if(yr <= 2483) {
          issueWarning = true;
          totalWarnings = totalWarnings + 1;
        }
      }
      re = new RegExp(results[i] + "(?!AD|BC)", "ig");
      what = what.replace(re, "พ.ศ. " + yr);
    }
  }

  if(iScriptConfig.usePreciseConversion) {
    var results = what.match(/(?:มกราคม|กุมภาพันธ์|มีนาคม) พ.ศ. (\d{1,4})(?!AD|BC|\d{1})/ig);
    if(results) {
      for (var i = 0; i < results.length; i++) {
        yr = parseInt(results[i].match(/\d{1,4}/)[0]);
        if(yr <= 2483) {
          totalWarnings = totalWarnings - 1;
          re = new RegExp("(มกราคม|กุมภาพันธ์|มีนาคม) พ.ศ. " + yr + "(?!AD|BC)", "ig");
          yr = yr - 1;
          what = what.replace(re, "$1 พ.ศ. " + yr);
        }
      }
    } 

    var results = what.match(/(?:เมษายน|พฤษภาคม|มิถุนายน|กรกฎาคม|สิงหาคม|กันยายน|ตุลาคม|พฤศจิกายน|ธันวาคม) พ.ศ. (\d{1,4})(?!AD|BC|\d{1})/ig);
    if(results) {
      for (var i = 0; i < results.length; i++) {
        yr = parseInt(results[i].match(/\d{1,4}/)[0]);
        if(yr <= 2483) {
          totalWarnings = totalWarnings - 1;
        }
      }
    } 
  }

  //!BC case handling (for short name)
    results = what.match(/(\d{1,4})BC!/ig);
  if(results) {
    for (var i = 0; i < results.length; i++) {
      if(iScriptConfig.usePreciseConversion) {
        issueWarning = true;
      }
      yr = 544 - parseInt(results[i]);
   
      re = new RegExp(results[i], "ig");
      if(yr <= 0) {
        yr = (yr-1)*-1;
        what = what.replace(re, yr + " ปีก่อนพุทธศักราช|" + yr);
      } else {
        what = what.replace(re, "พ.ศ. " + yr);
      }
    }
  }

  //BC case handling
  results = what.match(/(\d{1,4})BC/ig);
  if(results) {
    for (var i = 0; i < results.length; i++) {
      if(iScriptConfig.usePreciseConversion) {
        issueWarning = true;
      }
      yr = 544 - parseInt(results[i]);
      re = new RegExp(results[i], "ig");
      if(yr <= 0) {
        yr = (yr-1)*-1;
        what = what.replace(re, yr + " ปีก่อนพุทธศักราช");
      } else {
        what = what.replace(re, "พ.ศ. " + yr);
      }
    }
  }

  //AC case handling
  results = what.match(/(\d{1,4})AD/ig);
  if(results) {
    for (var i = 0; i < results.length; i++) {
      yr = parseInt(results[i]) + 543;
      if(iScriptConfig.usePreciseConversion) {
        if(yr <= 2483) {
          issueWarning = true;
        }
      }
      re = new RegExp(results[i], "ig");
      what = what.replace(re, "พ.ศ. " + yr);
    }
  }

  answer = what;
  if (document.selection && !is_gecko) {
    var theSelection = document.selection.createRange().text;
    theSelection = theSelection.substring(0, theSelection.length - 1);
    var range = document.selection.createRange();
    range.text = answer;
    range.select();

  } else if (txtArea.selectionStart || txtArea.selectionStart == '0') {
    var startPos = txtArea.selectionStart;
    var endPos = txtArea.selectionEnd;
    var scrollTop = txtArea.scrollTop;

    txtArea.value = txtArea.value.substring(0, startPos) + answer + txtArea.value.substring(endPos, txtArea.value.length);
    setCaretTo(txtArea, startPos + answer.length);
    txtArea.scrollTop = scrollTop;

  } else {
    alert("การใช้งาน พ.ศ. อะไร มีปัญหาและไม่สามารถดำเนินการเสร็จสิ้นได้ กรุณาแจ้งที่ คุยกับผู้ใช้:Jutiphan");
  }
  if(issueWarning && totalWarnings > 0) {
    alert("ในปีที่ได้เลือกให้แปลงนั้น มีบางปีที่ก่อนหน้า ค.ศ. 1941 ซึ่งสคริปต์จัดให้ได้แปลงด้วยการ +543 แต่สำหรับปีดังกล่าวหากเป็นช่วงมกราคม-มีนาคมอาจต้อง -1 เพื่อใช้ +542 แทนที่");
  }
}



// ========== แทนที่คำส่วนแรก ==========
//Manual replace
function replacetxt() {

  withw = '';
  var what = getSelText();

  if(what == null || what.length == 0) {
    what = getSelTextArea();
  }
  if(what == null || what.length == 0) {
    what = prompt("ระบุข้อความที่ต้องการจะแทนที่:" + "\n" + "(รองรับ Regex โดยให้ใส่ // นำหน้าและหลังสุด)");
  }
  if(what == null || what.length == 0) {
    return;
  }

  what_GUI = what;
  if(what.replace('//','').replace('//','') == what.split('//')[1]) {
    what = what.split('//')[1]
    replacetxtdone(what.split('//')[0],1,what);

  } else {
    what = what.replace(/\\/g,"\\\\");
    what = what.replace(/\(/g,"\\(").replace(/\)/g,"\\)");
    what = what.replace(/\{/g,"\\{").replace(/\}/g,"\\}");
    what = what.replace(/\[/g,"\\[").replace(/\]/g,"\\]");
    what = what.replace(/\|/g,"\\|");
    what = what.replace(/\./g,"\\.");
    what = what.replace(/\$/g,"\\$");
    what = what.replace(/\+/g,"\\+");
    what = what.replace(/\^/g,"\\^");
    what = what.replace(/\?/g,"\\?");
    what = what.replace(/\*/g,"\\*");
    what = what.replace(/\//g,"\\/");
    replacetxtdone(what,0,what_GUI);
  }
}

// ========== แทนที่คำส่วนสอง ==========
function replacetxtdone(s,regexon,what_GUI) {

  var original = document.editform.wpTextbox1.value;
  if (s) {
    if (regexon==1) {
      var r = prompt('ระบุคำที่จะแทนที่ "' + what_GUI + '" (ให้ใช้ Regex)',what_GUI);
    } else {
      var r = prompt('ระบุคำที่จะแทนที่ "' + what_GUI + '"',what_GUI);
    }

    if(!r && r != '') {
      alert('ยกเลิกการค้นหาและแทนที่ข้อความ');
      return;
    }
    if(r == '') {
      alert('ข้อความ "' + what + '" จะถูกลบทิ้งทั้งหมด');
    }

    var txt = document.editform.wpTextbox1;
    if(regexon == 0) {
      s = "([^:])" + s;
    }
    var rep = RegExp(s,"g");
    if(regexon == 0) {
      txt.value = txt.value.replace(rep,"$1"+r);
    } else {
      txt.value = txt.value.replace(rep,r);
    }
    form = document.getElementById('bodyContent');
    l = form.getElementsByTagName('input');
    for (i = 0; i < l.length; i++) {
      if (l[i].name == 'wpMinoredit') {
        l[i].value = '1'; l[i].checked=true;
      }
    }

    if(document.editform.wpTextbox1.value == original) {
      alert('ขออภัย ข้อความที่ระบุไม่เจอในบทความ');
      return;
    }

    if(document.editform.wpSummary.value.length == 0) {
      document.editform.wpSummary.value = 'แทนที่ "' + what_GUI + '" → "' + r + '"ด้วย[[WP:iScript|สคริปต์จัดให้]]';
    } else {
      var eIndex = document.editform.wpSummary.value.lastIndexOf("ด้วย[[WP:iScript|สคริปต์จัดให้]]");
      if(eIndex != -1) {
        var strTmp = document.editform.wpSummary.value;
        document.editform.wpSummary.value = strTmp.substring(0,eIndex) + ' +แทนที่ "' + what_GUI + '" → "' + r + '"ด้วย[[WP:iScript|สคริปต์จัดให้]]';
      } else {
        document.editform.wpSummary.value += ' +แทนที่ "' + what_GUI + '" → "' + r + '" ด้วย[[WP:iScript|สคริปต์จัดให้]]';
      }
    }
  }
}



addOnloadHook( function() {
  var tooly = document.getElementById('toolbar');
  if (tooly != null) {
    var replaceButton = "<a href=\"javascript:replacetxt();\"><img src=\"http://upload.wikimedia.org/wikipedia/th/b/bc/Button_replace_th.png\" alt=\"แทนที่คำ\"></a>";
    var porsorButton = "<a href=\"javascript:WhatIsThaiYear();\"><img src=\"http://upload.wikimedia.org/wikipedia/th/e/e2/Button_Porsor.png\" alt=\"พ.ศ. อะไร\"></a>";
    tooly.innerHTML = tooly.innerHTML + replaceButton + porsorButton;
    akeytt();
  }
});

function addEditors() {
  addTab("javascript:doConvertNumber()", "๒ ->2", "ca-tanum", "เปลี่ยนเลขไทยเป็นอารบิก", "");
  addTab("javascript:doConvertToThaiNumber()", "2 ->๒", "ca-atnum", "เปลี่ยนเลขอารบิกเป็นไทย", "");
  addTab("javascript:doConvertYamok()", "ๆ", "ca-yamok", "จัดชิดไม้ยมก");
}

if (document.title.indexOf("แก้ไข ") == 0) {
  if (window.addEventListener) window.addEventListener("load", addEditors, false);
  else if (window.attachEvent) window.attachEvent("onload", addEditors);
}


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