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 '{{'+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);

//