// 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
//<pre><nowiki>
// 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 '{{'+s+'}}';
}
}
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: {{unverified}} is for images only
if (!wikiPage.nsImageP) s = s.replace(/unverified/, 'not verified');
s = autotag_canonicalize_category(s);
// common mistake: {{d|reason}} should be {{db|reason}}
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);
//</nowiki></pre>