User:Brighterorange/svg.js

// This script adds an "SVG" tab when editing image description pages. // that tab adds the ShouldBeSVG template to the page with a Format // section and submits. Written by :en:user:brighterorange. Distribute freely.

// TODO: // - Detect when the image is actually on Commons (how?) and don't apply then //   (or go there and ConvertToSVG) // - Show when just viewing an image; should edit, add message, submit // - if a JPEG, also BadJPEG template?

// // maybe this stuff should be in a separate library? function addlilink(tabs, url, name, id, title, key){ var na = document.createElement('a'); na.href = url; na.appendChild(document.createTextNode(name)); var li = document.createElement('li'); if(id) li.id = id; li.appendChild(na); tabs.appendChild(li); if(id) {       if(key && title) {           ta[id] = [key, title]; }       else if(key) {           ta[id] = [key, '']; }       else if(title) {           ta[id] = ['', title]; }   }    // re-render the title and accesskeys from existing code in wikibits.js    akeytt; return li; }

function addTab(url, name, id, title, key){ var tabs = document.getElementById('p-cactions').getElementsByTagName('ul')[0]; return addlilink(tabs, url, name, id, title, key) };

// the appropriate template depends on where we are function getSVGtemplate { // split up templates so that mediawiki doesn't expand // and put the script in the category (!?) if (document.title.indexOf("Wikimedia Commons") == -1) return ""; else return ""; };

function doShouldbeSVG { var old = document.editform.wpTextbox1.value; // don't use toLower or toUpper, since with some letters (German eszet?) // that makes single characters multiple, throwing off indices var ci = svgFindAnyRight(old, ['[[category:', '[[Category:']); if (ci.i != undefined && ci.i >= 0) {    document.editform.wpTextbox1.value = old.substr(0, ci.i) +      '\n== Format ==\n' + getSVGtemplate + '\n\n' +      old.substring(ci.i);  } else {    // no category links; put at end    document.editform.wpTextbox1.value = old +       '\n\n== Format ==\n' + getSVGtemplate + '\n';  }  document.editform.wpSummary.value = 'Should be [[:en:SVG|SVG]]';  document.editform.wpMinoredit.checked = false;  document.editform.submit; };

function svgFindAnyRight(str, finds) { var earliest = undefined; var earliesti = undefined; for(var i = 0; i < finds.length; i ++) { var x = str.indexOf(finds[i]); if (earliesti == undefined || x < earliesti) { earliest = finds[i]; earliesti = x;      } }   return { i : earliesti, s : earliest }; };

function addSvg { addTab("javascript:doShouldbeSVG", "svg", "ca-svg", "Should Be SVG", ""); akeytt; };

$(function { // only if on the description page of an image

if (document.title.indexOf("Editing Image:") == -1) return; addOnloadHook(addSvg); }); //