ผู้ใช้:Jutiphan/Scripts/revert/monobook.js
จากวิกิพีเดีย สารานุกรมเสรี
หมายเหตุ: หลังจากบันทึกแล้ว, คุณต้องล้างแคชของเบราว์เซอร์เสียก่อน จึงจะเห็นการเปลี่ยนแปลง: Mozilla/Safari/Konqueror: กด Shift ค้าง แล้วกด Reload (หรือ Ctrl-Shift-R), IE: กด Ctrl-F5, Opera: กด F5
/*<pre><nowiki> */ // ============================================================== // สคริปต์จัดให้: revert module // Taken from Wikipedia:WikiProject User scripts/Scripts/Twinkle // Modified by Jutiphan Mongkolsuthree // Certain functions are copyrighted by respective copyright holders // // Created: 25/2/2007 // Replaced: none // ============================================================== TwinkleConfig = { showSharedIPNotice : true, openTalkPage : [ 'agf', 'norm', 'vand' ], openTalkPageOnAutoRevert : false, openAOLAnonTalkPage : false, deletionSummaryAd : " using [[WP:TWINKLE|TW]]", watchSpeedyPages : [ 'g3', 'g5', 'g10', 'g11', 'g12' ], openUserTalkPageOnSpeedyDelete : [ 'g1', 'g2', 'g10', 'g11', 'g12', 'a1', 'a7', 'i3', 'i4', 'i5', 'i6', 'i7', 'u3', 't1' ], watchRevertedPages : [ 'agf', 'norm', 'vand', 'torev' ], markRevertedPagesAsMinor : [ 'agf', 'norm', 'vand', 'torev' ], deleteTalkPageOnDelete : false, markWarningsAsMinor : true, markAIVReportAsMinor : true, markSpeedyPagesAsMinor : true }; // a list of usernames, usually only bots, that vandalism revert is jumped over, that is // if vandalism revert is chosen on such username, then it's target in on the revision before. // This is for handeling quick bots that makes edits seconds after the original edit is made. // This only affect vandalism rollback, for good faith rollback, it will stop, indicating a bot // has no faith, and for normal rollback, it will rollback that edit. var WHITELIST = [ 'BotKung', 'NongBot', 'Chobot', 'Escarbot', 'Robbot', 'RoboDick', 'SieBot', 'Thijs!bot', 'TuvicBot', 'YurikBot', 'Zwobot' ] var revertXML; var contentXML; var contentDoc; var editXML; var vandal; var type; var goodRev; var nbrOfRevisions; var curStatus; var curVersion = true; addOnloadHook(function() { if (QueryString.exists('iScriptRevert')) { twinkleAutoRevert(); } else { addRevertButtons(); } }); function twinkleAutoRevert() { if (QueryString.get('oldid') != wgCurRevisionId) { // not latest revision return; } var ntitle = getElementsByClassName(document.getElementById('bodyContent'), 'td', 'diff-ntitle')[0]; if (ntitle.getElementsByTagName('a')[0].firstChild.nodeValue != 'รุ่นปัจจุบัน') { // not latest revision return; } vandal = ntitle.getElementsByTagName('a')[3].firstChild.nodeValue.replace("'", "\\'"); if (!TwinkleConfig.openTalkPageOnAutoRevert) { TwinkleConfig.openTalkPage = []; } return revertPage(QueryString.get('iScriptRevert'), vandal); } var spanTag = function(color, content) { var span = document.createElement('span'); span.style.color = color; span.appendChild(document.createTextNode(content)); return span; } //check if the last node is an element node function get_lastchild(n) { var x = n.lastChild; while (x.nodeType != 1) { x = x.previousSibling; } return x; } function addRevertButtons() { if (wgNamespaceNumber == -1 && wgCanonicalSpecialPageName == "Contributions") { var bodyContent = document.getElementById('bodyContent'); var list = bodyContent.getElementsByTagName('li'); var vandal = document.getElementById('contentSub').getElementsByTagName('a')[0].getAttribute('title').replace(/^(คุยกับ)?ผู้ใช้:/, '').replace("'", "\\'"); var revNode = document.createElement('strong'); var revLink = document.createElement('a'); revLink.appendChild(spanTag('Black', '[')); revLink.appendChild(spanTag('SteelBlue', 'ย้อน')); revLink.appendChild(spanTag('Black', ']')); revNode.appendChild(revLink); var revVandNode = document.createElement('strong'); var revVandLink = document.createElement('a'); revVandLink.appendChild(spanTag('Black', '[')); revVandLink.appendChild(spanTag('Red', 'ย้อนก่อกวน')); revVandLink.appendChild(spanTag('Black', ']')); revVandNode.appendChild(revVandLink); for (var i=0;i<list.length;i++) { var item = get_lastchild(list[i]); if (!item) { continue; } if (!iScriptConfig.useEnhancedRollback && userIsInGroup('sysop')) { item = item.previousSibling; } if(item.className == "mw-rollback-link") { list[i].removeChild(item); item = get_lastchild(list[i]); } if (item.nodeName != 'STRONG') { continue; } var href = list[i].getElementsByTagName('a')[1].getAttribute('href'); var tmpNode = revNode.cloneNode(true); tmpNode.firstChild.setAttribute('href', href + '&' + QueryString.create({ 'iScriptRevert': 'norm' })); list[i].appendChild(tmpNode); tmpNode = revVandNode.cloneNode(true); tmpNode.firstChild.setAttribute('href', href + '&' + QueryString.create({ 'iScriptRevert': 'vand' })); list[i].innerHTML += " "; list[i].appendChild(tmpNode); } } else { var otitle = getElementsByClassName(document.getElementById('bodyContent'), 'td', 'diff-otitle')[0]; var ntitle = getElementsByClassName(document.getElementById('bodyContent'), 'td', 'diff-ntitle')[0]; if (!ntitle) { // Nothing to see here, move along... return; } if (!otitle.getElementsByTagName('a')[0]) { // no previous revision available return; } if (document.getElementById('ca-viewsource')) { //page locked, cannot revert return; } // Lets first add a [edit this revision] link var oldrev = QueryString.get('oldid', decodeURI(otitle.getElementsByTagName('a')[0].getAttribute('href').split('&', 2)[1])); var oldEditNode = document.createElement('strong'); var oldEditLink = document.createElement('a'); oldEditLink.href = "javascript:revertToRevision('" + oldrev + "')"; oldEditLink.appendChild(spanTag('Black', '[')); oldEditLink.appendChild(spanTag('SaddleBrown', 'ย้อนกลับมาเป็นรุ่นนี้')); oldEditLink.appendChild(spanTag('Black', ']')); oldEditNode.appendChild(oldEditLink); var cur = otitle.insertBefore(oldEditNode, otitle.firstChild); otitle.insertBefore(document.createElement('br'), cur.nextSibling); if (ntitle.getElementsByTagName('a')[0].firstChild.nodeValue != 'รุ่นปัจจุบัน') { // not latest revision curVersion = false; return; } vandal = ntitle.getElementsByTagName('a')[3].firstChild.nodeValue.replace("'", "\\'"); var agfNode = document.createElement('strong'); var vandNode = document.createElement('strong'); var normNode = document.createElement('strong'); var agfLink = document.createElement('a'); var vandLink = document.createElement('a'); var normLink = document.createElement('a'); agfLink.href = "javascript:revertPage('agf' , '" + vandal + "')"; vandLink.href = "javascript:revertPage('vand' , '" + vandal + "')"; normLink.href = "javascript:revertPage('norm' , '" + vandal + "')"; agfLink.appendChild(spanTag('Black', '[')); agfLink.appendChild(spanTag('DarkOliveGreen', 'ย้อนเจตนาดี')); agfLink.appendChild(spanTag('Black', ']')); vandLink.appendChild(spanTag('Black', '[')); vandLink.appendChild(spanTag('Red', 'ย้อนก่อกวน')); vandLink.appendChild(spanTag('Black', ']')); normLink.appendChild(spanTag('Black', '[')); normLink.appendChild(spanTag('SteelBlue', 'ย้อน')); normLink.appendChild(spanTag('Black', ']')); agfNode.appendChild(agfLink); vandNode.appendChild(vandLink); normNode.appendChild(normLink); cur = ntitle.insertBefore(agfNode, ntitle.firstChild); cur = ntitle.insertBefore(document.createTextNode(' || '), cur.nextSibling); cur = ntitle.insertBefore(normNode, cur.nextSibling); cur = ntitle.insertBefore(document.createTextNode(' || '), cur.nextSibling); cur = ntitle.insertBefore(vandNode, cur.nextSibling); cur = ntitle.insertBefore(document.createElement('br'), cur.nextSibling); } } function revertPage(pType, pVandal, rev, page) { wgPageName = page || wgPageName; wgCurRevisionId = rev || wgCurRevisionId; vandal = pVandal; type = pType; Status.init(document.getElementById('bodyContent')); revertXML = sajax_init_object(); Status.debug('revertXML' + revertXML); if (revertXML.overrideMimeType) { revertXML.overrideMimeType('text/xml'); } var query = { 'action': 'query', 'prop': 'revisions', 'titles': wgPageName, 'rvlimit': iScriptConfig.revertMaxRevisions, 'rvprop': [ 'timestamp', 'user', 'comment' ], 'format': 'xml' } Status.status('กำลังตรวจสอบรุ่นของบทความ'); revertXML.onreadystatechange = revertPageCallback; revertXML.open('GET', wgServer + wgScriptPath + '/api.php?' + QueryString.create(query), true); revertXML.send(null); } function revertPageCallback() { if (revertXML.readyState != 4) { Status.progress('.'); return; } if (revertXML.status != 200) { Status.error("ขออภัย สถานะผิดพลาดที่ RevertPageCallback() โดยเป็น " + revertXML.status + ": " + revertXML.statusText + " ยกเลิกการทำงาน กรุณาลองใหม่อีกครั้ง"); return; } //Add support for IE (Solve problem with MIME mismatch) var doc; if (is_gecko) { doc = revertXML.responseXML; } else { doc = XMLDOM(revertXML.responseText); } if (!doc) { Status.error('ขออภัย ไม่สามารถดึงรุ่นที่ต้องการได้ ซึ่งอาจเป็นเพราะว่าติดต่อกับเซิร์ฟเวอร์วิกิพีเดียไม่ได้ หากพบเจอปัญหานี้ติดต่อกัน กรุณาแจ้งปัญหานี้ที่ ผู้ใช้:Jutiphan'); return; } var revisions = doc.getElementsByTagName('rev'); var top = revisions[0]; Status.debug('revisions[0]: ' + top); if (top.getAttribute('revid') < wgCurRevisionId) { Status.error([ 'The recieved top revision id ', htmlNode('strong', top.getAttribute('revid')), ' is less than our current revision id, this could indicate that the current revision has been deleted, the server is lagging, or that bad data has been recieved. Will stop proceeding at this point.' ]); return; } if (!top) { Status.error('ไม่พบรุ่นบนสุด ซึ่งอาจเป็นเพราะว่าหน้านี้ได้ถูกลบแล้ว หรือมีปัญหาในการติดต่อกับเซิร์ฟเวอร์วิกิพีเดีย หากพบเจอปัญหานี้ติดต่อกัน กรุณาแจ้งปัญหานี้ที่ ผู้ใช้:Jutiphan'); return; } Status.status([ 'กำลังตรวจสอบว่า ', htmlNode('strong', vandal), ' เป็นผู้แก้ไขล่าสุดหรือไม่...' ]); Status.debug('wgCurRevisionId: ' + wgCurRevisionId + ', top.getAttribute(revid): ' + top.getAttribute('revid')); if (wgCurRevisionId != top.getAttribute('revid')) { Status.warn([ 'รุ่นล่าสุดที่ ', htmlNode('strong', top.getAttribute('revid')), ' ไม่ตรงกับรุ่นที่ ', htmlNode('strong', wgCurRevisionId),' ซึ่งเป็นรุ่นที่สั่งให้ย้อนในตอนแรก โดยอาจเพราะว่ามีผู้อื่นแก้ไขต่อ หลังจากสั่งย้อนกลับ']); Status.debug('top.getAttribute(user): ' + top.getAttribute('user')); if (top.getAttribute('user') == vandal) { if (type == 'vand') { Status.info([ 'การแก้ไขล่าสุดเป็นของ ', htmlNode('strong', vandal) , ' โดยได้ถือว่าเป็นการก่อกวน และจะดำเนินการย้อนกลับ']); } else if (type == 'afg') { Status.warn([ 'การแก้ไขล่าสุดเป็นของ ', htmlNode('strong', vandal) , ' โดยได้ถือว่าเป็นเจตนาดี ซึ่งปัญหาอาจแก้ไขแล้ว หยุดดำเนินการย้อนกลับ' ]); return; } else { Status.warn([ 'การแก้ไขล่าสุดเป็นของ ', htmlNode('strong', vandal) , ' ซึ่งเป็นไปได้ว่าอาจแก้ไขแล้ว หยุดดำเนินการย้อนกลับ' ]); return; } } else if ( type == 'vand' && WHITELIST.indexOf(top.getAttribute('user')) != -1 && top.nextSibling.getAttribute('pageId') == wgCurRevisionId ) { Status.info([ 'การแก้ไขล่าสุดเป็นของ ', htmlNode('strong', top.getAttribute('user')), ' ซึ่งเป็นบอตที่ได้รับการอนุมัติ และการแก้ไขก่อนจากนั้นเป็นผู้ก่อกวนที่ต้องการย้อน ดังนั้นจะย้อนไปยังรุ่นก่อนหน้าที่บอตแก้ไข']); top = top.nextSibling; } else { Status.error([ 'การแก้ไขล่าสุดเป็นของ ', htmlNode('strong', top.getAttribute('user')), ' ซึ่งอาจได้ทำการย้อนกลับแล้ว หยุดการดำเนินการย้อนกลับ']); return; } } if (WHITELIST.indexOf(vandal) != -1) { if (type == "vand") { top = top.nextSibling; Status.info(['คุณได้เลือกให้ย้อนการก่อกวนของ ', htmlNode('strong', vandal), ' ซึ่งเป็นบอตที่ได้รับการอนุมัติ โดยเราเชื่อว่าคุณต้องการย้อนกลับผู้ที่แก้ไขก่อนหน้านี้ซึ่งเป็นของ ',htmtlNode('strong', top.getAttribute('user')), ' แทน']); vandal = top.getAttribute('user'); } else if (type == "agf") { Status.warn(['คุณได้เลือกให้ย้อนการแก้ไขของ ', htmlNode('strong', vandal), ' ซึ่งเป็นบอตที่ได้รับการอนุมัติ และมีเจตนาดี จึงไม่ควรย้อนกลับ หยุดการดำเนินการ']); return; } else { var cont = confirm('คุณเลือกที่จะย้อนการแก้ไขของ ' + vandal + ' ซึ่งเป็นบอตที่ได้รับการอนุมัติ คุณต้องการจะย้อนกลับการแก้ไขขอบุคคลก่อนหน้านี้แทน หรือการแก้ไขของบอต?'); if (cont) { top = top.nextSibling; Status.info(['ตามที่คุณยืนยัน จะำทำการย้อนไปรุ่นก่อน ' + vandal + ' โดยจะย้อนการแก้ไขของ ', htmlNode('strong', top.getAttribute('user')),' แทน']); vandal = top.getAttribute('user'); } else { Status.warn([ 'คุณได้ยืนยันที่จะย้อนกลับการแก้ไขของ ', htmlNode('strong', vandal), ' ซึ่งเป็นบอตที่ได้รับการอนุมัติ แต่คุณได้ยืนยันจึงดำเนินการต่อ' ]); } } } Status.status('กำลังค้นหารุ่นก่อนหน้านี้ที่ยังดีอยู่...'); goodRev = top; nbrOfRevisions = 0; while (goodRev.getAttribute('user') == vandal) { goodRev = goodRev.nextSibling; nbrOfRevisions++; if (goodRev == null) { Status.error([ 'ขออภัย ไม่พบเจอรุ่นที่ดี ซึ่งเป็นไปได้ว่า ', htmlNode('strong', vandal), ' เป็นผู้ใช้เดียวที่แก้ไขคนเดียวทั้งหมด หรือได้แก้ไขมากกว่า ' + iScriptConfig.revertMaxRevisions + ' ครั้งติดต่อกัน' ]); return; } } if (nbrOfRevisions == 0) { Status.error("ไม่พบเจอรุ่นที่จะย้อนกลับ หยุดการดำเนินการ ซึ่งอาจเป็นเพราะว่าการแก้ไขได้ถูกย้อนกลับไปแล้ว แ่ต่รหัสรุ่นยังเหมือนเดิม"); return; } if ( type != 'vand' && nbrOfRevisions > 1 && !confirm(vandal + ' ได้ทำการแก้ไขทั้งหมด ' + nbrOfRevisions + ' ครั้งติดต่อกัน คุณแน่ใจว่าต้องการย้อนกลับการแก้ไขดังกล่าวทั้งหมด?') ) { Status.info('หยุดการดำเนินการตามความต้องการของผู้ใช้'); return; } Status.progress([ ' พบเจอรุ่นที่ ', htmlNode('strong', goodRev.getAttribute('revid')), ' ซึ่งเป็น ', htmlNode('strong', nbrOfRevisions), ' รุ่นก่อนหน้านี้โดย ', htmlNode('strong', goodRev.getAttribute('user')) ]); Status.status([ 'กำลังดึงเนื้อหาของรุ่น ', htmlNode('strong', goodRev.getAttribute('revid')) ]); var query = { 'action': 'query', 'prop': 'revisions', 'titles': wgPageName, 'rvlimit': 1, 'rvprop': 'content', 'rvstartid': goodRev.getAttribute('revid'), 'format': 'xml' } Status.debug('query:' + query.toJSONString()); // getting the content for the last good revision revertXML = sajax_init_object(); if (revertXML.overrideMimeType) { revertXML.overrideMimeType('text/xml'); } revertXML.onreadystatechange = revertCallback2; revertXML.open('GET', wgServer + wgScriptPath + '/api.php?' + QueryString.create(query), true); revertXML.setRequestHeader('Content-Type', 'application/xml; charset=utf-8'); revertXML.send(null); } function revertCallback2() { if (revertXML.readyState != 4) { Status.progress('.'); return; } if (revertXML.status != 200) { Status.error("ขออภัย สถานะผิดพลาด ยกเลิกการทำงาน กรุณาลองใหม่อีกครั้ง"); return; } //Add support for IE (Solve problem with MIME mismatch) if (window.ActiveXObject) { contentDoc = new ActiveXObject("Microsoft.XMLDOM"); contentDoc.async = false; contentDoc.loadXML(revertXML.responseText); } else { contentDoc = revertXML.responseXML; } if (!contentDoc) { Status.error('Failed to recieve revision to revert to, will abort.'); return; } Status.status("กำลังดึงฟอร์มแก้ไข"); revertXML = sajax_init_object(); if (revertXML.overrideMimeType) { revertXML.overrideMimeType('text/xml'); } revertXML.onreadystatechange = revertCallback3; var query = { 'title': wgPageName, 'action': 'submit' }; Status.debug('query:' + query.toJSONString()); revertXML.open('GET', wgServer + wgScriptPath + '/index.php?' + QueryString.create(query), true); revertXML.setRequestHeader('Content-Type', 'application/xml; charset=utf-8'); revertXML.send(null); } function revertCallback3() { if (revertXML.readyState != 4) { Status.progress('.'); return; } if (revertXML.status != 200) { Status.error("ขออภัย สถานะผิดพลาด ยกเลิกการทำงาน กรุณาลองใหม่อีกครั้ง"); return; } Status.status('กำลังใส่เนื้อหาจากรุ่นก่อนหน้านี้...'); //Add support for IE (Solve problem with MIME mismatch) var doc, form; if (is_gecko) { doc = revertXML.responseXML; form = doc.getElementById('editform'); } else { doc = XMLDOM(revertXML.responseText); form = doc.selectSingleNode('//*[@id="editform"]'); } Status.debug('editform: ' + form); if (!form) { Status.error('ขออภัย ไม่สามารถดึังเรียกองค์ประกอบ "editform" ซึ่งอาจเป็นเพราะว่าไม่สามารถติดต่อกับวิกิพีเดียได้ หากพบเจอปัญหานี้ติดต่อกัน กรุณาแจ้งปัญหานี้ที่ ผู้ใช้:Jutiphan'); return; } var content = contentDoc.getElementsByTagName('rev')[0]; if (!content) { Status.error('ขออภัย ไม่สามารถดึงเนื้อหาจากรุ่นที่ต้องการได้ ยกเลิกการทำงาน กรุณาแจ้งปัญหานี้ที่ ผู้ใช้:Jutiphan'); return; } var prevText = ""; var cn = content.childNodes; for (var i = 0;i <cn.length;i++) { if (is_gecko) { prevText += cn[i].nodeValue ? cn[i].nodeValue : ''; } else { prevText += cn[i].nodeTypedValue ? cn[i].nodeTypedValue : ''; //nodeValue don't work for FF } } var l = form.getElementsByTagName('textarea'); var newform = document.createElement('form'); //Update textbox input for the newform var t = document.createElement('input'); t.type = 'hidden'; t.name = 'wpTextbox1'; t.value = prevText; newform.appendChild(t); var iScriptAction; var summary; switch (type) { case 'agf': summary = "ย้อนการแก้ไขที่ี[[WP:AGF|มีเจตนาดี]]ของ [[Special:Contributions/" + vandal + "|" + vandal + "]] ด้วย[[WP:iScript|สคริปต์จัดให้]]"; break; case 'vand': summary = "ย้อน[[WP:VAND|การก่อกวน]]ของ [[Special:Contributions/" + vandal + "|" + vandal + "]] ไปยังรุ่นโดย " + goodRev.getAttribute('user') + " ด้วย[[WP:iScript|สคริปต์จัดให้]]"; iScriptAction = "speedyVandal"; break; case 'norm': var reason = prompt("กรุณาใส่เหตุผลอย่างย่อ ที่ย้อนการแก้ไขของบุคคลนี้ (เว้นว่างและคลิก OK หากไม่ระบุ):"); if(reason == undefined) { Status.info('หยุดการดำเนินการตามความต้องการของผู้ใช้'); return; } else if(reason.length == 0) { summary = "ย้อน " + nbrOfRevisions + " การแก้ไขของ [[Special:Contributions/" + vandal + "|" + vandal + "]] ไปยังรุ่นโดย " + goodRev.getAttribute('user') + " ด้วย[[WP:iScript|สคริปต์จัดให้]]"; } else { summary = "ย้อน " + nbrOfRevisions + " การแก้ไขของ [[Special:Contributions/" + vandal + "|" + vandal + "]] ด้วย[[WP:iScript|สคริปต์จัดให้]]: " + reason; } } l = form.getElementsByTagName('input'); for (i = l.length; i--;) { liname = l[i].getAttribute('name'); if (liname == 'wpSummary') { Status.status('กำลังใส่คำอธิบายอย่างย่อ...'); l[i].setAttribute('value', summary); } else if (liname == 'wpMinoredit') { l[i].setAttribute('value', '1'); } else if (liname == 'wpWatchthis') { if (!l[i].getAttribute('checked')) continue; // Don’t touch the "watch" status l[i].setAttribute('value', "on") } else if (liname == 'wpPreview' || liname == 'wpDiff') continue; l[i].setAttribute('type', 'hidden'); if (is_gecko) newform.appendChild(l[i]); else newform.insertAdjacentHTML('beforeEnd', l[i].xml); } newform.style.visibility = 'hidden'; // not really needed newform.name = form.getAttribute('name'); newform.method = form.getAttribute('method'); newform.id = form.getAttribute('id'); newform.action = form.getAttribute('action'); //Talkpage handling if (isIPAddress(vandal)) { Status.info([ htmlNode('strong', vandal), ' เป็นหมายเลขไอพี กำลังเปิดหน้าผู้ใช้ดังกล่าว.' ]); } if(vandal.indexOf("BotKung") == 0) { vandal = "Jutiphan"; } var query = { 'title': 'User talk:' + vandal, 'action': 'edit', 'vanarticle': wgPageName.replace(/_/g, ' '), 'vanarticlerevid': wgCurRevisionId, 'vanarticlegoodrevid': goodRev.getAttribute('revid'), 'type': type, 'count': nbrOfRevisions, 'iScriptAction' : iScriptAction } Status.debug('query:' + query.toJSONString()); switch (iScriptConfig.userTalkPageMode) { case 'tab': window.open(wgServer + wgScriptPath + '/index.php?' + QueryString.create(query), '_tab'); break; case 'window': window.open(wgServer + wgScriptPath + '/index.php?' + QueryString.create(query), 'iScriptWarnWindow', 'location=no,toolbar=no,status=no,directories=no,scrollbars=yes,width=1200,height=800'); break; case 'blank': default : window.open(wgServer + wgScriptPath + '/index.php?' + QueryString.create(query), '_blank'); break; } document.getElementById('globalWrapper').appendChild(newform); Status.status('กำลังอัปเดตหน้าบทความไปรุ่นก่อนหน้านี้...'); newform.submit(); } function revertToRevision(oldrev) { try { Status.init(document.getElementById('bodyContent')); revertXML = sajax_init_object(); if (revertXML.overrideMimeType) { revertXML.overrideMimeType('text/xml'); } var query = { 'action': 'query', 'prop': 'revisions', 'titles': wgPageName, 'rvlimit': 1, 'rvstartid': oldrev, 'rvprop': [ 'timestamp', 'user', 'comment', 'content' ], 'format': 'xml' } Status.status('กำลังดึงเนื้อหาจากรุ่นที่เลือก'); revertXML.onreadystatechange = revertToRevisionCallback; revertXML.open('GET', wgServer + wgScriptPath + '/api.php?' + QueryString.create(query), true); revertXML.setRequestHeader('Content-Type', 'application/xml; charset=utf-8'); revertXML.send(null); } catch(e) { if (e instanceof Exception) { Status.error('Error: ' + e.what()); } else { Status.error('Error: ' + e); } } } function revertToRevisionCallback() { if (revertXML.readyState != 4) { Status.progress('.'); return; } if (revertXML.status != 200) { Status.error("ขออภัย สถานะผิดพลาด ยกเลิกการทำงาน กรุณาลองใหม่อีกครั้ง"); return; } //Add support for IE (Solve problem with MIME mismatch) if (revertXML.responseXML == null) { revertXML.responseXML = revertXML.responseXML.loadXML(revertXML.responseText); } contentDoc = revertXML.responseXML; Status.status("กำลังดึงฟอร์มแก้ไข"); revertXML = sajax_init_object(); if (revertXML.overrideMimeType) { revertXML.overrideMimeType('text/xml'); } revertXML.onreadystatechange = revertToRevisionCallback2; revertXML.open('GET', wgServer + wgScriptPath + '/index.php?' + QueryString.create({ 'title': wgPageName, 'action': 'submit' }), true); revertXML.setRequestHeader('Content-Type', 'application/xml; charset=utf-8'); revertXML.send(null); } function revertToRevisionCallback2() { if (revertXML.readyState != 4) { Status.progress('.'); return; } if (revertXML.status != 200) { Status.error("ขออภัย สถานะผิดพลาด ยกเลิกการทำงาน กรุณาลองใหม่อีกครั้ง"); return; } Status.status('กำลังใส่เนื้อหาจากรุ่นก่อนหน้านี้...'); //Add support for IE (Solve problem with MIME mismatch) var doc, form; if (is_gecko) { doc = revertXML.responseXML; form = doc.getElementById('editform'); } else { doc = XMLDOM(revertXML.responseText); form = doc.selectSingleNode('//*[@id="editform"]'); } Status.debug('editform: ' + form); if (!form) { Status.error('ขออภัย ไม่สามารถดึังเรียกองค์ประกอบ "editform" ซึ่งอาจเป็นเพราะว่าไม่สามารถติดต่อกับวิกิพีเดียได้ หากพบเจอปัญหานี้ติดต่อกัน กรุณาแจ้งปัญหานี้ที่ ผู้ใช้:Jutiphan'); return; } var content = contentDoc.getElementsByTagName('rev')[0]; if (!content) { Status.error('ขออภัย ไม่สามารถดึงเนื้อหาจากรุ่นที่ต้องการได้ ยกเลิกการทำงาน กรุณาแจ้งปัญหานี้ที่ ผู้ใช้:Jutiphan'); return; } var prevText = ""; var cn = content.childNodes; for (var i = 0;i <cn.length;i++) { if (is_gecko) { prevText += cn[i].nodeValue ? cn[i].nodeValue : ''; } else { prevText += cn[i].nodeTypedValue ? cn[i].nodeTypedValue : ''; //nodeValue don't work for FF } } var l = form.getElementsByTagName('textarea'); var newform = document.createElement('form'); //Update textbox input for the newform var t = document.createElement('input'); t.type = 'hidden'; t.name = 'wpTextbox1'; t.value = prevText; newform.appendChild(t); var reason = prompt("กรุณาใส่เหตุผลอย่างย่อ ที่ย้อนการแก้ไขของบุคคลนี้ (เว้นว่างและคลิก OK หากไม่ระบุ):"); if(reason == undefined) { Status.info('หยุดการดำเนินการตามความต้องการของผู้ใช้'); return; } else if (reason.length == 0) { var summary = 'ย้อนกลับไปรุ่นที่ ' + content.getAttribute('revid') + ' โดย [[User:' + content.getAttribute('user') + '|' + content.getAttribute('user') + ']] ด้วย[[WP:iScript|สคริปต์จัดให้]]'; } else { var summary = 'ย้อนกลับไปรุ่นของ [[User:' + content.getAttribute('user') + '|' + content.getAttribute('user') + ']] ด้วย[[WP:iScript|สคริปต์จัดให้]]: ' + reason; } l = form.getElementsByTagName('input'); for (i = l.length; i--;) { liname = l[i].getAttribute('name'); if (liname == 'wpSummary') { Status.status('กำลังใส่คำอธิบายอย่างย่อ...'); l[i].setAttribute('value', summary); } else if (liname == 'wpMinoredit') { l[i].setAttribute('value', '1'); } else if (liname == 'wpWatchthis') { if (!l[i].getAttribute('checked')) continue; // Don’t touch the "watch" status l[i].setAttribute('value', "on") } else if (liname == 'wpPreview' || liname == 'wpDiff') continue; l[i].setAttribute('type', 'hidden'); if (is_gecko) newform.appendChild(l[i]); else newform.insertAdjacentHTML('beforeEnd', l[i].xml); } newform.style.visibility = 'hidden'; // not really needed newform.name = form.getAttribute('name'); newform.method = form.getAttribute('method'); newform.id = form.getAttribute('id'); newform.action = form.getAttribute('action'); /* bodyContent.innerHTML += '<br />Submitting form...'; bodyContent.appendChild(newform); // Submit the form newform.submit() */ /* var textbox = doc.getElementById( 'wpTextbox1' ); textbox.value = ""; var cn = content.childNodes; for( var i in cn ) { textbox.value += cn[i].nodeValue ? cn[i].nodeValue : ''; } Status.status( 'Updating the summary...' ); var summary = 'Reverted to revision ' + content.getAttribute( 'revid' ) + ' by [[User:' + content.getAttribute( 'user' ) + '|' + content.getAttribute( 'user' ) + ']].' +TwinkleConfig.summaryAd; doc.getElementById( 'wpSummary' ).value = summary; if( TwinkleConfig.markRevertedPagesAsMinor.indexOf( 'torev' ) != -1 ) { doc.getElementById( 'wpMinoredit' ).checked = true; } if( TwinkleConfig. watchRevertedPages.indexOf( 'torev' ) != -1 ) { doc.getElementById( 'wpWatchthis' ).checked = true; } */ document.getElementById('globalWrapper').appendChild(newform); Status.status('กำลังอัปเดตหน้าบทความไปรุ่นก่อนหน้านี้...'); newform.submit(); } /*</nowiki></pre> */