User:Quarl/autotag.js

// User:Quarl/autotag.js - automatically add custom tags to article

// requires: wikipage.js, wikiedit.js, shortcuts.js, addlilink.js, datetime.js

// quarl 2006-01-03 initial version // quarl 2006-01-23 use wikiedit.js instead of automod.js

//

// TODO: sort the tags by this order (note that these are primary names of tags since they all have many aliases; // subsituted tags such as afd are tricky; support piped data such as db|reason)

//autotag_order = 'delete,afd,hoax,original research,npov,cleanup,importance'.split(',');

var autotag_mark_minor = true;

var autotag_shortcuts = Shortcuts({   'cleanup,clean' : 'cleanup-date|' + datestampMonthYYYY,    'or,original' : 'original research',    'afd,vfd' : 'subst:afd',    'catz' : 'categorize',    'cped' : 'copyedit',    'wfy' : 'wikify' // equivalent, but easier for someone reading wikisource/history });

function autotag_load { if (wikiPage.nsSpecialP) return;

addTab('javascript:autotag_query', 'Tag', 'ca-autotag', "Add tag(s)"); }

function autotag_query { var tags = window.prompt("Enter tags to add, separated by &&. Example: hoax && not verified && original research && npov && mergeto|another article, cleanup"); autotag(tags); }

function autotag_iscat(s) { return Boolean(s.match(/^category:/i)); }

function autotag_remove_braces(s) { // remove any brackets or braces s = s.replace(/^\{\{(.*)\}\}$/, '$1'); s = s.replace(/^\[\[(.*)\]\]$/, '$1'); return s; }

function autotag_add_braces(s) { if (autotag_iscat(s)) { return +s+; } else { return ''; } }

function capitalizeFirstChar(s) { if (!s) return s;   return s[0].toUpperCase + s.substr(1); }

function autotag_canonicalize_category(s) { if (s.match(/^cat(egory|egories)? *: */i)) { s = 'Category: ' + capitalizeFirstChar(RegExp.rightContext); }   return s; }

function autotag_expand_shortcuts(s) { s = autotag_shortcuts.subst(s); // common mistake: is for images only if (!wikiPage.nsImageP) s = s.replace(/unverified/, 'not verified'); s = autotag_canonicalize_category(s); // common mistake: should be     s = s.replace(/^d\|/, 'db|'); return s; }

function autotag_tagAtTopP(t) { if (autotag_iscat(t)) return false; if (t.match(/stub$/)) return false; return true; }

function autotag(tags) { wikiPage.getEditorAsync(autotag_edit, tags); }

function autotag_edit(editor, tags) { tags = tags.split(/&&/); //var ntags = Array; var ttags = Array; var ttags_top = Array; var ttags_bot = Array; for (i in tags) { var tag = tags[i]; tag = autotag_expand_shortcuts(autotag_remove_braces(trimspaces(tag))); if (!tag) continue; var btag = autotag_add_braces(tag); //ntags.push(tag); ttags.push(btag); if (autotag_tagAtTopP(tag)) { ttags_top.push(btag); } else { ttags_bot.push(btag); }   }    if (!ttags.length) return;

if (editor.refuseCreate) return; var prepend = ttags_top.length ? (ttags_top.join('\n\n')+'\n\n') : ''; var append = ttags_bot.length ? ('\n\n'+ttags_bot.join('\n\n')) : ''; editor.wpTextbox1 = prepend + trim_lines(editor.wpTextbox1) + append; editor.wpSummary = 'Tagged as ' + ttags.join(', '); editor.wpMinoredit = autotag_mark_minor; editor.submit; }

$(autotag_load);

//