User:Howcheng/quickimgdelete.js
From OpenWetWare
Jump to navigationJump to search
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
- Opera: Press Ctrl-F5.
/* <pre><nowiki> */ /* quickimgdelete.js * Current version: 1.14.1 * ======================================= * Created by [[User:Howcheng|Howard Cheng]] * Released under the [[GNU Public License]] (GPL) * Full documentation at [[User talk:Howcheng/quickimgdelete.js]] * ======================================= */ // ==General configuration== if (typeof(qid_alwaysOpenNew) == 'undefined') { qid_alwaysOpenNew = false; } // Should alerts always spawn new windows? (otherwise they get reused) if (typeof(qid_autoSave) == 'undefined') { qid_autoSave = true; } // Should the edits be saved automatically? // ==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 userIsInGroup(groupName) { for (var i = 0; i < wgUserGroups.length; i++) { if (wgUserGroups[i] == groupName) return true } return false; } function qid_openWindow(url, windowName) { if (!windowName) windowName = 'qid_window'; var res = (!qid_alwaysOpenNew) ? window.open(url, windowName) : window.open(url); if (!res) alert("qid_openWindow: window.open() returned null"); } function qid_getFileHistory() { var el = document.getElementById('mw-imagepage-section-filehistory'); if (!el) { alert("qid_getFileHistory: Cannot find filehistory ... exiting"); return null; } el = el.firstChild; while (el.nextSibling) { el = el.nextSibling; if (el.tagName && el.tagName.toLowerCase() == 'table') break; } if (!el) { alert("qid_getFileHistory: Cannot find TABLE tag ... exiting"); return null; } var trs = el.getElementsByTagName('tr'); if (!trs) { alert("qid_getFileHistory: Cannot find TR tags ... exiting"); return null; } return trs; } function qid_getUploader() { // Returns title of user page (without name space) in URL form var trs = qid_getFileHistory(); var els = new Array(); var tr = trs[0]; // skip first one because it's the header do { tr = tr.nextSibling; var tds = tr.childNodes; var td = tds[(userIsInGroup("sysop") ? 4 : 3)]; // uploader info els[els.length] = td; } while (tr.nextSibling); var uploaders = new Array(); var re1 = new RegExp('http://' + (window.location.hostname + '/wiki/').replace(/\./g, '\\.') + 'User:(.*)$'); var re2 = new RegExp('http://' + (window.location.hostname + wgScript).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; for (var i = 0; i < els.length; i++) { var el = els[i]; if (!el) continue; var as = el.childNodes; if (!as) continue; 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 (uploader) break; } if (uploaderList.indexOf(uploader) == -1) { if (count > 0) uploaderList += "; "; uploaderList += count + " - " + uploader; uploaders[uploaders.length] = uploader; count += 1; } } 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_getUploadDate() { var trs = qid_getFileHistory(); var els = new Array(); var tr = trs[0]; // skip first one because it's the header do { tr = tr.nextSibling; var tds = tr.childNodes; var td = tds[(userIsInGroup("sysop")) ? 2 : 1]; // date info els[els.length] = td; } while (tr.nextSibling); var re = /\d{2}:\d{2}, \d+ [a-z]+ \d{4}/i; var m; var dt; for (var i = 0; i < els.length; i++) { var el = els[i]; if (!el) continue; var as = el.childNodes; if (!as) continue; for (var k=0; k<as.length; k++) { if (as[k].tagName != 'A') continue; m = (as[k].text) ? re.exec(as[k].text) : re.exec(as[k].innerText); if (m) dt = m[0]; if (dt) { try { var ret = Date.parse(dt); return ret; // ret is a number value (UNIX time) } catch (someError) { } } } } return null; } 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_doesTemplateExist(editformval, template) { var templatepos = editformval.indexOf('{{' + template); return (templatepos > -1); } function qid_checkForRedirect(editformval, type) { var index = editformval.toLowerCase().indexOf("#redirect"); if (index != 0) return; var re = /\[\[([^\]]+)\]\]/; var m = re.exec(editformval); var redirtarget = m[1]; var fakeaction = getParamValue("fakeaction"); var pagename = getParamValue("target"); var redirurl = wgScript + '?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(); } function qid_userBeenWarned(txt, template) { var re = eval("/\<!-- ?Template:" + template + " ?--\>/;"); return re.test(txt); } function qid_removeNamespace(fullpagename) { var colonPos = fullpagename.indexOf(':'); var pagename = fullpagename.substring(colonPos + 1); return pagename; } /** ================================================================================ * ==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:Files_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 file"; pui_tooltip = "Mark this file as possibly unfree"; pui_prompt = "Why do you think this file is possibly unfree?"; pui_delReq = "Wikipedia:Possibly_unfree_files/" + GuessUTCDate().replace(' ', '_'); pui_deleteTemplate = "PUIdisputed"; pui_idwTemplate = "idw-pui"; pui_ifdTemplate = "pui2"; 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; } var reason = prompt(promptTxt, ''); if (!reason) return; var pagename = encodeURIComponent(wgPageName); var uploader = qid_getUploader(); if (!uploader) return; if (which == 'nfd' || which == 'pui') { qid_openWindow(wgScript + '?title=User_talk:' + uploader + '&action=edit&fakeaction=' + which + '_warn&target=' + encodeURIComponent(wgTitle)); } else { qid_openWindow(wgScript + '?title=User_talk:' + uploader + '&action=edit&fakeaction=' + which + '_warn&target=' + pagename); } qid_openWindow(wgScript + '?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: txt += '|log=' + GuessUTCDate(); summary = 'nomination for [[WP:IFD|deletion]]'; break; case pui_deleteTemplate: txt += '|log=' + GuessUTCDate(); summary = 'this is a [[WP:PUF|possibly unfree file]]'; break; } txt += '}}'; var editformval = qid_removeTemplate(document.editform.wpTextbox1.value, 'untagged'); qid_saveEditForm(txt + '\n' + editformval, summary); } function nfd_addIdwTemplate(template, target) { var editformval = document.editform.wpTextbox1.value; qid_checkForRedirect(editformval); var txt = '{{subst:' + template + '|1=' + target + '}}'; editformval += '\n' + txt + '\n'; qid_saveEditForm(editformval, txt); } function nfd_updateDelReq(target, reason, uploader) { var imageName = qid_removeNamespace(target); 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 + '|1=' + 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 imageName = qid_removeNamespace(target); var txt = '{{subst:' + pui_ifdTemplate + '|image=' + imageName + '|reason=' + reason + '}}'; 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 (wgAction == "view" && wgCanonicalNamespace == "File") { 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); } var fakeaction = getParamValue('fakeaction'); switch (fakeaction) { case 'nfd_delete': nfd_addDeleteTemplate(nfd_deleteTemplate); break; case 'pui_delete': nfd_addDeleteTemplate(pui_deleteTemplate); break; case 'nfd_warn': nfd_addIdwTemplate(nfd_idwTemplate, decodeURIComponent(getParamValue('target'))); break; case 'pui_warn': nfd_addIdwTemplate(pui_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; } } 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 = "No source"; mns_tooltip = "Mark this image as missing required source information"; mnl_text = "No license"; mnl_tooltip = "Mark this image as missing required licensing information"; mnsl_text = "No source/license"; mnsl_tooltip = "Mark this image as missing both required source and licensing information"; mnp_text = "No permission"; mnp_tooltip = "Mark this image as missing evidence of permission"; mnr_text = "No rationale"; mnr_tooltip = "Mark this image as missing non-free rationale"; mor_text = "Orphaned non-free"; mor_tooltip = "Mark this image as an orphaned non-free image"; mrfu_text = "Replaceable non-free"; mrfu_tooltip = "Mark this image as a replaceable non-free image"; mfud_text = "Non-free use disputed"; mfud_tooltip = "Mark this image as non-free use disputed"; mbsr_text = "Base URL"; mbsr_tooltip = "This image links directly to the image or is a generic base URL"; function mnx_markNo(action) { var pagename = encodeURIComponent(wgPageName); var txt; var warnaction = action; switch (action) { case "mnx_mns": case "mnx_mnsl": case "mnx_mnl": // if image is marked as GFDL-presumed, then use a different user warning template if (document.getElementById("GFDL-presumed")) warnaction = "mnx_gfdl"; break; case 'mnx_mnp': txt = window.prompt('(Optional) Please enter the source of the image:', ''); break; case 'mnx_mfud': txt = window.prompt('Please enter the reason why you are disputing the usage of this non-free image:', ''); if (!txt) { alert('mnx_markNo: Action canceled.'); return; } break; case "mnx_mrfu": var dt = qid_getUploadDate(); if (dt) txt = dt; break; } var uploader = qid_getUploader(); if (!uploader) return; qid_openWindow(wgScript + '?title=User_talk:' + uploader + '&action=edit&fakeaction=mnx_warn&target=' + pagename + '&type=' + warnaction); var editlk = document.getElementById('ca-edit').getElementsByTagName('a')[0].href; var targetUrl = editlk + '&fakeaction=' + action if (txt) targetUrl += '&txt=' + txt; window.location = targetUrl; } function mnx_addTemplate(template) { var txt = '{{subst:' + template + '}}'; // this is subst for most cases 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 "npd": var src = getParamValue('txt'); if (src) txt = '{{subst:' + template + '|source=' + src + '}}'; summary = "Image is missing evidence of permission and will be deleted in seven days if it is not provided."; break; case "nrd": summary = "Image is missing non-free usage rationale and will be deleted in seven days if it is not added."; break; case "orfud": summary = "This non-free image is not used in any articles and will be deleted in seven days if it remains so."; break; case "rfu": summary = "This non-free image appears to illustrate a subject for which a free one could reasonably be found or created and will be deleted in seven days."; break; case "rfu2": summary = "This non-free image appears to illustrate a subject for which a free one could reasonably be found or created and will be deleted in two days."; break; case "dfu": txt = '{{subst:' + template + '|1=' + getParamValue('txt') + '}}'; summary = "The usage of this non-free image is disputed."; break; case "bsr": txt = '{{' + template + '}}'; summary = "The source URL given is inadequate."; break; } qid_saveEditForm(txt + '\n' + editformval, summary); } function mnx_addUserWarningTemplate(type, imagetarget) { qid_checkForRedirect(document.editform.wpTextbox1.value, type); var template; var editSummary; var hasShortNotice = false; var dropNamespace = false; switch (type) { case "mnx_mns": case "mnx_mnsl": template = "Di-no source-notice"; editSummary = "Warning: image missing source information."; dropNamespace = true; break; case "mnx_mnl": template = "Di-no license-notice"; editSummary = "Warning: image missing license information."; dropNamespace = true; break; case "mnx_mnp": template = "Di-no permission-notice"; editSummary = "Warning: image missing evidence of permission."; dropNamespace = true; break; case "mnx_mnr": template = "Missing rationale"; editSummary = "Warning: image missing non-free usage rationale."; hasShortNotice = true; break; case "mnx_mor": template = "Orphaned"; editSummary = "The non-free image you uploaded is now orphaned."; hasShortNotice = true; break; case "mnx_mrfu": template = "Replaceable"; editSummary = "The non-free image you uploaded is replaceable by a free one."; dropNamespace = true; hasShortNotice = true; break; case "mnx_mfud": template = "No fair"; editSummary = "The use of a non-free image you uploaded is disputed."; hasShortNotice = true; break; case "mnx_mbsr": template = "bsr-user"; editSummary = "Please provide a better source URL for your image."; break; case "mnx_gfdl": template = "GFDL presumed warning"; editSummary = "Warning: image missing license information."; dropNamespace = true; break; } var editformval = document.editform.wpTextbox1.value; var useShortNotice = false; if (hasShortNotice) useShortNotice = qid_userBeenWarned(editformval, template); var txt = '{{subst:' + template; if (useShortNotice) txt += ' short'; if (dropNamespace && imagetarget) imagetarget = qid_removeNamespace(imagetarget); txt += '|1=' + imagetarget + '}}'; editformval += '\n' + txt + ' ~~' + '~~\n'; qid_saveEditForm(editformval, editSummary); } function mnx_onload() { if (document.getElementById('ca-edit') == null) // not editable by non-admin return; if (wgAction == "view" && wgCanonicalNamespace == "File") { 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_mnp\')', mnp_text, 'mark-no-permission', mnp_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); addPortletLink('p-tb', 'javascript:mnx_markNo(\'mnx_mfud\')', mfud_text, 'mark-disputed', mfud_tooltip); addPortletLink('p-tb', 'javascript:mnx_markNo(\'mnx_mbsr\')', mbsr_text, 'mark-base-url', mbsr_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_mnp': mnx_addTemplate('npd'); break; case 'mnx_mnr': mnx_addTemplate('nrd'); break; case 'mnx_mor': mnx_addTemplate('orfud'); break; case 'mnx_mrfu': var cutoff = new Date(2006, 6, 13); var uploadDate = parseInt(getParamValue('txt')); // this is a number value (UNIX time) if (uploadDate > cutoff.getTime()) mnx_addTemplate('rfu2'); else mnx_addTemplate('rfu'); break; case 'mnx_mfud': mnx_addTemplate('dfu'); break; case 'mnx_mbsr': mnx_addTemplate('bsr'); 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 (wgAction == "view" && wgCanonicalNamespace == "File") { 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> */