// ==UserScript== // @namespace http://shog9.com/greasemonkey/scripts/ // @name CPInplaceDelete // @author Joshua Heyer // @description Allow deleting posts without loading a separate confirmation page // @version 1.0 // @include http://*.codeproject.com/* // @include http://*.codetools.com/* // @include http://*.thecodeproject.com/* // ==/UserScript== // no sense loading anything if this isn't even a forum - do a quick test for a forum table var forumTable = document.getElementById('ForumTable'); if ( forumTable ) { forumTable.addEventListener("click", function(event) { var target = event.target; while (target && !target.href) target = target.parentNode; if ( target && target.href.match(/\/script\/comments\/owner_delete_pw.asp/) && target.href.match(/forumid=(\d*)\S*select=(\d*)|select=(\d*)\S*forumid=(\d*)/) ) { event.preventDefault(); var forumId = RegExp.$1; var msgId = RegExp.$2; if ( !forumId ) forumId = RegExp.$4; if ( !msgId ) msgId = RegExp.$3; quickDelete(forumId, msgId); } }, true); } // // Tries to retrieve the password for a given post. If successful, calls doDelete() to perform actual deletion. // function quickDelete(forumId, postId) { GM_xmlhttpRequest({ method: 'GET', url: "http://" + document.location.host + "/script/comments/owner_delete_pw.asp?forumid=" + forumId + "&select=" + postId, onload: function(responseDetails) { if ( responseDetails.status == 200 ) { var err = checkError(responseDetails.responseText); if ( err ) { alert("Failed to delete message: " + err); return; } var tmpDiv = document.createElement("DIV"); tmpDiv.style.display = "none"; tmpDiv.innerHTML = responseDetails.responseText; var pass = document.evaluate(".//input[@name='ArticlePassword']/@value", tmpDiv, null, XPathResult.STRING_TYPE, null).stringValue; if ( pass ) doDelete(forumId, postId, pass); } else { alert('Failed to delete message: ' + responseDetails.status + ' ' + responseDetails.statusText); } } }); } // // Actually delete the message. Three things needed: forum, post, password. // function doDelete(forumId, postId, pass) { var subject = document.evaluate("//a[@name='"+postId+"']/b | //tr[td/a[@name='xx"+postId+"xx']]/td/b/span | //a[@name='"+postId+"']", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; var body = document.evaluate("//tr[@id='"+postId+"_h1']/td/table/tbody/tr/td[2]", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; var prompt = "Delete message - are you SURE?"; if ( subject ) prompt = "Delete message: \n\t" + subject.textContent + "\n - are you SURE?"; if ( !confirm(prompt) ) return; var request = new Object(); request.method = 'POST'; request.url = "http://" + document.location.host + "/script/comments/app/owner_do_delete.asp?forumid="+forumId+"&main=/script/comments/forums.asp"; request.headers = { 'Content-Type' : 'application/x-www-form-urlencoded' }; request.data = "id="+postId+"&ArticlePassword="+pass; request.onload = function(responseDetails) { if ( responseDetails.status == 200 ) { var err = checkError(responseDetails.responseText); if ( err ) { alert("Failed to delete message: " + err); return; } if ( subject ) subject.innerHTML = "[Message deleted]"; if ( body ) body.innerHTML = ""; } else { alert('Failed to delete message: ' + responseDetails.status + ' ' + responseDetails.statusText); } }; GM_xmlhttpRequest(request); } // // Look for an error message in the response text, extract it if found // function checkError(responseText) { if ( responseText.indexOf("An Error occured!") >= 0) // look for error message { var error; if ( responseText.match(/

Error description:<\/p>\s*(

[\s\S]*(?:<\/blockquote))/gi) ) error = RegExp.$1; if ( error ) { var tmp = document.createElement("DIV"); tmp.style.display = "none"; tmp.innerHTML = error; error = tmp.textContent; return error; } } return false; }