User:Howcheng/quickimgdelete.js
From Wikipedia, the free encyclopedia
Note: After saving, you have to bypass your browser's cache to see the changes. Firefox/Mozilla/Safari: hold down Shift while clicking Reload (or press Ctrl-Shift-R), Internet Explorer: press Ctrl-F5, Opera/Konqueror: press F5.
/* <pre><nowiki> */ /* quickimgdelete.js * Current version: 1.6 * ======================================= * Created by [[User:Howcheng|Howard Cheng]] * Released under the [[GNU Public License]] (GPL) * Full documentation at [[User talk:Howcheng/quickimgdelete.js]] * ======================================= */ // ==General configuration== qid_autosave = true; // Should the edits be saved automatically? // Site info qid_path = "/w/index.php"; qid_prettypath = "/wiki/"; qid_hostname = window.location.hostname; // ==Helper functions== // from [[User:Jnothman/automod.js]] function GuessUTCDate() { var monthnames = new Array( "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"); var today = new Date(); return today.getUTCFullYear() + ' ' + monthnames[today.getUTCMonth()] + ' ' + today.getUTCDate(); } // From [[en:User:Lupin/autoedit.js]] function getParamValue(paramName) { var cmdRe=RegExp('[&?]'+paramName+'=([^&]*)'); var h=document.location; var m=cmdRe.exec(h); if (m) { try { return decodeURIComponent(m[1]); } catch (someError) {} } return null; } function qid_openWindow(url, windowName) { if (!windowName) windowName = 'qid_window'; var res = window.open(url, windowName); if (!res) alert("qid_openWindow: window.open() returned null"); } function qid_getUploader() { // Get uploader from first point in the list under "File history" // Uploader is stored in second A tag in UL tag under "File history" // Returns title of user page (without name space) in URL form var el = document.getElementById('filehistory') if (!el) { alert("qid_getUploader: Cannot find filehistory ... exiting"); return null; } while (el.nextSibling) { el = el.nextSibling; if (el.tagName && el.tagName.toLowerCase() == 'ul') break; } if (!el) { alert("qid_getUploader: Cannot find UL tag ... exiting"); return null; } var els = el.getElementsByTagName('li'); if (!els) { alert("qid_getUploader: Cannot find LI tag ... exiting"); return null; } var uploaders = new Array(); var re1 = new RegExp('http://' + (qid_hostname + qid_prettypath).replace(/\./g, '\\.') + 'User:(.*)$'); var re2 = new RegExp('http://' + (qid_hostname + qid_path).replace(/\./g, '\\.') + '\\?title=User:([^&]*)'); var re3 = /User( talk)?:(.*)$/; // this is for IE and handling Unicode characters var m; var uploader; var uploaderList = ""; var count = 0; el = els[0]; do { var as = el.childNodes; for (var k=0; k<as.length; k++) { if (as[k].tagName != 'A') continue; m = re3.exec(as[k].title); if (m) uploader = encodeURIComponent(m[2]); m = re1.exec(as[k].href); if (m) uploader = m[1]; m = re2.exec(as[k].href); if (m) uploader = m[1]; } if (uploaderList.indexOf(uploader) == -1) { if (count > 0) uploaderList += "; "; uploaderList += count + " - " + uploader; uploaders[uploaders.length] = uploader; count += 1; } el = el.nextSibling; } while (el); if (!uploaders || uploaders.length == 0) { alert("qid_getUploader: Cannot find uploader ... exiting"); return null; } if (uploaders.length == 1) return uploaders[0]; var which = parseInt(window.prompt("Choose which uploader to notify: " + uploaderList)); if (isNaN(which) || which < 0 || which > uploaders.length) { alert("qid_getUploader: Invalid selection ... exiting"); return null; } return uploaders[which]; } function qid_removeTemplate(editformval, template) { var templatepos = editformval.indexOf('{{' + template); if (templatepos > -1) { var lastbracepos = editformval.indexOf('}}', templatepos) + 1; editformval = editformval.substr(0, templatepos) + editformval.substr(lastbracepos + 2); } return editformval; } function qid_checkForRedirect(editformval, type) { if (editformval.toLowerCase().indexOf("#redirect") == -1) return; var re = /\[\[([^\]]+)\]\]/; var m = re.exec(editformval); var redirtarget = m[1]; var fakeaction = getParamValue("fakeaction"); var pagename = getParamValue("target"); var redirurl = qid_path + '?title=' + redirtarget + '&action=edit&fakeaction=' + fakeaction + '&target=' + pagename; if (type) redirurl += '&type=' + type; window.location.replace(redirurl); } function qid_saveEditForm(txt, summary) { document.editform.wpTextbox1.value = txt; document.editform.wpSummary.value = summary; if (qid_autosave) document.editform.wpSave.click(); } /** ================================================================================ * ==Automatic 'nominate for deletion/pui/imagevio' script== * The actions in this section do three things: * 1. Add a tag to the image page. * 2. List the image on a log page. * 3. Add a warning template to the uploader's talk page. */ // Configuration nfd_text = "Nominate for deletion"; nfd_tooltip = "Nominate this image for deletion"; nfd_prompt = "Why do you want to nominate this image for deletion?"; nfd_delReq = "Wikipedia:Images_and_media_for_deletion/" + GuessUTCDate().replace(' ', '_'); nfd_deleteTemplate = "ifd"; nfd_idwTemplate = "idw"; nfd_ifdTemplate = "ifd2"; nfd_glossary = new Array( new Array("AB", "Absent uploader"), new Array("AU", "Absent uploader"), new Array("CV", "Copyright violation"), new Array("OB", "Obsolete"), new Array("OR", "Orphaned"), new Array("LQ", "Low quality"), new Array("UE", "Unencyclopedic") ); pui_text = "Possibly unfree image"; pui_tooltip = "Mark this image as possibly unfree"; pui_prompt = "Why do you think this image is possibly unfree?"; pui_delReq = "Wikipedia:Possibly_unfree_images"; pui_deleteTemplate = "PUIdisputed"; pui_idwTemplate = "idw-pui"; vio_text = "Copyright violation"; vio_tooltip = "Mark this image as a copyright violation"; vio_prompt = "Enter the URL that this image is copied from."; vio_delReq = "Wikipedia:Copyright_problems/" + GuessUTCDate().replace(' ', '_') + "/Images"; vio_deleteTemplate = "imagevio"; vio_idwTemplate = "idw-cp"; function nfd_tagImage(which) { var promptTxt; var targetUrl; var editlk = document.getElementById('ca-edit').getElementsByTagName('a')[0].href; editlk += '&fakeaction=' + which + '_delete' switch (which) { case 'nfd': promptTxt = nfd_prompt; targetUrl = nfd_delReq; break; case 'pui': promptTxt = pui_prompt; targetUrl = pui_delReq; break; case 'vio': promptTxt = vio_prompt; targetUrl = vio_delReq; editlk += '&url=' + reason; break; } var reason = prompt(promptTxt, ''); if (!reason) return; var pagename = encodeURIComponent(wgPageName); var uploader = qid_getUploader(); if (!uploader) return; qid_openWindow(qid_path + '?title=User_talk:' + uploader + '&action=edit&fakeaction=' + which + '_warn&target=' + pagename); qid_openWindow(qid_path + '?title=' + targetUrl + '&action=edit&fakeaction=' + which + '_add' + '&target=' + pagename + '&reason=' + encodeURIComponent(reason) + '&uploader=' + uploader, 'qid_ifd_window'); window.location = editlk; } function nfd_addDeleteTemplate(template, otherparam) { var txt = '{{' + template; var summary; switch (template) { case nfd_deleteTemplate: summary = 'nomination for [[WP:IFD|deletion]]'; break; case pui_deleteTemplate: summary = 'this is a [[WP:PUI|possibly unfree image]]'; break; case vio_deleteTemplate: summary = 'this image is suspected to be a [[WP:CP|copyright violation]]'; txt += '|1=' + otherparam; break; } txt += '}}'; var editformval = qid_removeTemplate(document.editform.wpTextbox1.value, 'untagged'); qid_saveEditForm(txt + '\n' + editformval, summary); } function nfd_addIdwTemplate(template, target) { qid_checkForRedirect(document.editform.wpTextbox1.value); var txt = '{{subst:' + template + '|1=' + target + '}}'; var editformval = document.editform.wpTextbox1.value + '\n' + txt + '\n'; qid_saveEditForm(editformval, txt); } function nfd_updateDelReq(target, reason, uploader) { var colonPos = target.indexOf(':'); var imageName = target.substring(colonPos + 1); var abbrevCount = 0; for (var i = 0; i < nfd_glossary.length; i++) { var abbrev = nfd_glossary[i][0]; var meaning = nfd_glossary[i][1]; var re = eval("/\\b" + abbrev + "\\b/"); if (re.test(reason)) reason = reason.replace(re, meaning); } var txt = '{{subst:' + nfd_ifdTemplate + '|' + imageName + '|Uploader=' + uploader + '|Reason=' + reason + '}}'; var editformval = document.editform.wpTextbox1.value + '\n' + txt + ' ~~' + '~~ \n'; var summary = 'Nominating [[:' + target + ']]'; qid_saveEditForm(editformval, summary); } function pui_updateDelReq(target, reason) { var txt = '* [[:' + target + ']] - ' + reason; var editformval = document.editform.wpTextbox1.value + txt + ' ~~' + '~~ \n'; var summary = document.editform.wpSummary.value + 'Adding [[:' + target + ']]'; qid_saveEditForm(editformval, summary); } function vio_updateDelReq(target, url) { var txt = '* {{subst:Image-cv|' + target + '}} from [' + url + '].'; var editformval = document.editform.wpTextbox1.value + txt + ' ~~' + '~~ \n'; var summary = document.editform.wpSummary.value + 'Adding [[:' + target + ']]'; qid_saveEditForm(editformval, summary); } function nfd_onload() { if (document.getElementById('ca-edit') == null) // not editable by non-admin return; if (wgCanonicalNamespace == "Image") { addPortletLink('p-tb', 'javascript:nfd_tagImage(\'nfd\')', nfd_text, 'nom-for-del', nfd_tooltip); addPortletLink('p-tb', 'javascript:nfd_tagImage(\'pui\')', pui_text, 'pui', pui_tooltip); addPortletLink('p-tb', 'javascript:nfd_tagImage(\'vio\')', vio_text, 'imagevio', 'vio_tooltip'); } var fakeaction = getParamValue('fakeaction'); switch (fakeaction) { case 'nfd_delete': nfd_addDeleteTemplate(nfd_deleteTemplate); break; case 'pui_delete': nfd_addDeleteTemplate(pui_deleteTemplate); break; case 'vio_delete': nfd_addDeleteTemplate(vio_deleteTemplate, decodeURIComponent(getParamValue('url'))); break; case 'nfd_warn': nfd_addIdwTemplate(nfd_idwTemplate, decodeURIComponent(getParamValue('target'))); break; case 'pui_warn': nfd_addIdwTemplate(pui_idwTemplate, decodeURIComponent(getParamValue('target'))); break; case 'vio_warn': nfd_addIdwTemplate(vio_idwTemplate, decodeURIComponent(getParamValue('target'))); break; case 'nfd_add': nfd_updateDelReq(decodeURIComponent(getParamValue('target')), decodeURIComponent(getParamValue('reason')), decodeURIComponent(getParamValue('uploader'))); break; case 'pui_add': pui_updateDelReq(decodeURIComponent(getParamValue('target')), decodeURIComponent(getParamValue('reason'))); break; case 'vio_add': vio_updateDelReq(decodeURIComponent(getParamValue('target')), decodeURIComponent(getParamValue('reason'))); break; } } addOnloadHook(nfd_onload); /** ================================================================================ * ==Automatic 'mark no source' (mns) and 'mark no license' (mnl) script== // mnx = applies to all * The actions in this section do two things: * 1. Add a tag to the image page. * 2. Add a warning to the uploader's talk page. */ // Configuration mns_text = "Mark as no source"; mns_tooltip = "Mark this image as missing required source information"; mnl_text = "Mark as no license"; mnl_tooltip = "Mark this image as missing required licensing information"; mnsl_text = "Mark as no source/license"; mnsl_tooltip = "Mark this image as missing both required source and licensing information"; mnr_text = "Mark as no rationale"; mnr_tooltip = "Mark this image as missing fair use rationale"; mor_text = "Mark as orphaned fairuse"; mor_tooltip = "Mark this image as an orphaned fair use image"; mrfu_text = "Mark as replaceable fairuse"; mrfu_tooltip = "Mark this image as a replaceable fair use image"; function mnx_markNo(action) { var pagename = encodeURIComponent(wgPageName); var uploader = qid_getUploader(); if (!uploader) return; qid_openWindow(qid_path + '?title=User_talk:' + uploader + '&action=edit&fakeaction=mnx_warn&target=' + pagename + '&type=' + action); var editlk = document.getElementById('ca-edit').getElementsByTagName('a')[0].href; window.location = editlk + '&fakeaction=' + action ; } function mnx_addTemplate(template) { var txt = '{{subst:' + template + '}}'; // this MUST be subst since templates are NSD, NLD var editformval = qid_removeTemplate(document.editform.wpTextbox1.value, 'untagged'); var summary; switch (template) { case "nsl": txt = '{{subst:nsd}}\n{{subst:nld}}'; case "nsd": summary = "Image is missing source information and will be deleted in seven days if it is not added."; break; case "nld": summary = "Image is missing license information and will be deleted in seven days if it is not added."; break; case "nrd": summary = "Image is missing fair use rationale and will be deleted in seven days if it is not added."; break; case "orfud": summary = "This fair use image is not used in any articles and will be deleted in seven days if it remains so."; break; case "rfu": summary = "This fair use appears to illustrate a subject for which a free image could reasonably be found or created and will be deleted in seven days."; break; } qid_saveEditForm(txt + '\n' + editformval, summary); } function mnx_addUserWarningTemplate(type, imagetarget) { qid_checkForRedirect(document.editform.wpTextbox1.value, type); var template; var editSummary; switch (type) { case "mnx_mns": case "mnx_mnsl": template = "image source"; editSummary = "Warning: image missing source information."; break; case "mnx_mnl": template = "image copyright"; editSummary = "Warning: image missing license information."; break; case "mnx_mnr": template = "missing rationale"; editSummary = "Warning: image missing fair use rationale."; break; case "mnx_mor": template = "orphaned"; editSummary = "The fair use image you uploaded is now orphaned."; break; case "mnx_mrfu": template = "replaceable"; editSummary = "The fair use image you uploaded is replaceable by a free one."; imagetarget = imagetarget.substring(6); // {{replaceable|example.png}} break; } var txt = '{{subst:' + template + '|1=' + imagetarget + '}}'; var editformval = document.editform.wpTextbox1.value + '\n' + txt + ' ~~' + '~~\n'; qid_saveEditForm(editformval, editSummary); } function mnx_onload() { if (document.getElementById('ca-edit') == null) // not editable by non-admin return; if (wgCanonicalNamespace == "Image") { addPortletLink('p-tb', 'javascript:mnx_markNo(\'mnx_mns\')', mns_text, 'mark-no-source', mns_tooltip); addPortletLink('p-tb', 'javascript:mnx_markNo(\'mnx_mnl\')', mnl_text, 'mark-no-license', mnl_tooltip); addPortletLink('p-tb', 'javascript:mnx_markNo(\'mnx_mnsl\')', mnsl_text, 'mark-no-source-license', mnsl_tooltip); addPortletLink('p-tb', 'javascript:mnx_markNo(\'mnx_mnr\')', mnr_text, 'mark-no-rationale', mnr_tooltip); addPortletLink('p-tb', 'javascript:mnx_markNo(\'mnx_mor\')', mor_text, 'mark-orphaned', mor_tooltip); addPortletLink('p-tb', 'javascript:mnx_markNo(\'mnx_mrfu\')', mrfu_text, 'mark-replaceable', mrfu_tooltip); } var fakeaction = getParamValue('fakeaction'); switch (fakeaction) { case 'mnx_mns': mnx_addTemplate('nsd'); break; case 'mnx_mnl': mnx_addTemplate('nld'); break; case 'mnx_mnsl': mnx_addTemplate('nsl'); break; case 'mnx_mnr': mnx_addTemplate('nrd'); break; case 'mnx_mor': mnx_addTemplate('orfud'); break; case 'mnx_mrfu': mnx_addTemplate('rfu'); break; case 'mnx_warn': mnx_addUserWarningTemplate(getParamValue('type'), decodeURIComponent(getParamValue('target'))); break; } } addOnloadHook(mnx_onload); /** ================================================================================ * ==Automatic speedy tagging== * The actions in this section do one thing: * 1. Add a tag to the image page. */ mred_text = "Mark as redundant image"; mred_tooltip = "Mark this image as redundant (tag for speedy deletion)"; mmi_text = "Mark as missing image"; mmi_tooltip = "Mark as missing image (tag for speedy deletion)"; mmtc_text = "Mark as Move to Commons"; mmtc_tooltip = "Mark as candidate to move to Commons"; mncd_text = "Mark as Commons duplicate"; mncd_tooltip = "Mark as Commons duplicate"; function speedyi_addTemplate(template, imagetarget) { var summary; var usesubst = false; switch (template) { case 'isd': summary = 'Tagging for [[WP:CSD#I1|speedy deletion]]: Image is redundant to [[:Image:' + imagetarget + ']].'; break; case 'missing image': summary = 'Tagging for [[WP:CSD#I2|speedy deletion]]: Image is missing or corrupt.'; break; case 'Move to Commons': summary = 'Image is a candidate for moving to [[Commons:Main Page|Wikimedia Commons]].'; break; case 'ncd': var commonsimgname = (!imagetarget) ? wgPageName : imagetarget; summary = 'Image is duplicate of [[Commons:Main Page|Commons]] image [[Commons:' + commonsimgname + '|]].'; usesubst = true; break; } var txt = '{{' + (usesubst ? 'subst:' : '') + template; if (template == 'isd' || (template == 'ncd' && imagetarget)) { txt += '|1=' + imagetarget; } txt += '}}'; var editformval = qid_removeTemplate(document.editform.wpTextbox1.value, 'untagged'); if (template == 'ncd') { // for ncd, remove "Move to Commons" (and variations thereof) template var mtctemplates = new Array('Copy to Wikimedia Commons', 'Move to Commons', 'Move to commons', 'Move to Wikimedia Commons', 'Copy to commons', 'Mtc', 'MtC', 'MTC', 'CWC', 'CtWC', 'CTWC', 'Ctwc'); for (var i = 0; i < mtctemplates.length; i++) { editformval = qid_removeTemplate(editformval, mtctemplates[i]); } } qid_saveEditForm(txt + '\n' + editformval, summary); } function speedyi_mark(action) { var editlk = document.getElementById('ca-edit').getElementsByTagName('a')[0].href; var xtra = ''; switch (action) { case "speedyi_mred": var dupe = window.prompt('Please enter the name of the image this one is redundant to.', ''); if (!dupe) { alert('speedyi_mark: No image name entered.'); return; } if (dupe.indexOf('Image:') == 0) { dupe = dupe.substring(6); } xtra = '&target=' + dupe; break; case "speedyi_mncd": var commonsimg = window.prompt('Please enter the name of the corresponding image on Commons (leave empty if the same name).', ''); if (commonsimg == null) { alert('speedyi_mark: Action canceled.'); return; } if (commonsimg != '') { xtra = '&target=' + commonsimg; } break; } window.location = editlk + '&fakeaction=' + action + xtra; } function speedyi_onload() { if (document.getElementById('ca-edit') == null) // not editable by non-admin return; if (wgCanonicalNamespace == "Image") { addPortletLink('p-tb', 'javascript:speedyi_mark(\'speedyi_mred\')', mred_text, 'mark-redundant', mred_tooltip); addPortletLink('p-tb', 'javascript:speedyi_mark(\'speedyi_mmi\')', mmi_text, 'mark-missing', mmi_tooltip); addPortletLink('p-tb', 'javascript:speedyi_mark(\'speedyi_mmtc\')', mmtc_text, 'mark-movecommons', mmtc_tooltip); addPortletLink('p-tb', 'javascript:speedyi_mark(\'speedyi_mncd\')', mncd_text, 'mark-commons', mncd_tooltip); } var fakeaction = getParamValue('fakeaction'); switch (fakeaction) { case 'speedyi_mred': speedyi_addTemplate('isd', decodeURIComponent(getParamValue('target'))); break; case 'speedyi_mmi': speedyi_addTemplate('missing image'); break; case 'speedyi_mmtc': speedyi_addTemplate('Move to Commons'); break; case 'speedyi_mncd': var target = getParamValue('target'); if (target) target = decodeURIComponent(target); speedyi_addTemplate('ncd', target); break; } } addOnloadHook(speedyi_onload); /* </nowiki></pre> */