User:Howcheng/quickimgdelete.js

From OpenWetWare

Jump to: navigation, search

Note - After saving, you may have to bypass your browser's cache to see the changes. Mozilla / Firefox / Safari: hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (Command-R on a Macintosh); Konqueror: click Reload or press F5; Opera: clear the cache in Tools → Preferences; Internet Explorer: hold Ctrl while clicking Refresh, or 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> */
Personal tools