Note: After saving, you have to bypass your browser's cache to see the changes. Internet Explorer: press Ctrl-F5, Mozilla: hold down Shift while clicking Reload (or press Ctrl-Shift-R), Opera/Konqueror: press F5, Safari: hold down Shift + Alt while clicking Reload, Chrome: hold down Shift while clicking Reload.
//  [[w:User:Splarka/quicktag.js]]
/*
*
*ToDo
*1. Add Hover over text
*2. Localization
*
*/

importScript('MediaWiki:Notifier.js');
var insertTagButtons = [
{
    'label': 'CSD',
    'open': '{\{speedy|',
    'close': '}}',
    'def': 'Out of [[COM:SCOPE|project scope]]'
},

/*

{
    'label': 'No source',
    'open': '{\{subst:nsd}}',
    'usernote': 'subst:image source',
    'img_summary': 'File has no source',
    'talk_summary': 'One of your files does not have a source'

},
{
    'label': 'No permission',
    'open': '{\{subst:npd}}',
    'usernote': 'subst:image permission',
    'img_summary': 'Missing permission',
    'talk_summary': 'Please send a permission to [[COM:OTRS|OTRS]]'

},
{
    'label': 'No license',
    'open': '{\{subst:nld}}',
    'usernote': 'subst:image license',
    'img_summary': 'Missing license',
    'talk_summary': 'One of your files does not have a license'

},
{
    'label': 'Copyvio',
    'open': '{\{copyvio|',
    'close': '}}',
    'def': '',
    'usernote': 'subst:copyvionote',
    'img_summary': 'Marking as possible copyright violation',
    'talk_summary': 'Notification of possible copyright violation',
},

{
    'label': 'Duplicate',
    'open': '{\{duplicate|',
    'close': '}}',
    'def': ''
},
*/
];
if (typeof toollocation == "undefined") toollocation = 'p-tb';
var usernote;
if (wgNamespaceNumber >= 0 && wgArticleId > 0) addOnloadHook(function() {
    if (!window.insertTagButtons) {
        //example
        mw.util.addPortletLink('p-cactions', 'javascript:insertTagOnPage("{\{example|","}}","example");', 'example tag');
    } else {
        for (var i = 0; i < insertTagButtons.length; i++) {
            var inb = insertTagButtons[i];
 
            if (inb.close && inb.close != '') {
                mw.util.addPortletLink(toollocation, 'javascript:insertTagOnPage("' + inb['usernote'] + '","' + inb['img_summary'] + '","' + inb['talk_summary'] + '","' + inb['open'] + '","' + inb['close'] + '","' + inb['def'] + '");', inb['label']);
            } else {
                mw.util.addPortletLink(toollocation, 'javascript:insertTagOnPage("' + inb['usernote'] + '","' + inb['img_summary'] + '","' + inb['talk_summary'] + '","' + inb['open'] + '");', inb['label']);
            }
        }
    }
});

function insertTagOnPage(usernote, img_summary, talk_summary, tagstart, tagend, tagtxtdef) {
    if (tagend) {
        var tagtxt = prompt('Inserting: ' + tagstart + '' + tagend, tagtxtdef);
        if (tagtxt == null) return
        var tag = tagstart + tagtxt + tagend;
    } else {
        var tag = tagstart;
        //var user;
        //var dowant = confirm('User: ' + user);
        //if (dowant == false) return
    }
    bodycontent = document.getElementById('bodyContent');
    var workingdiv = document.createElement('div');
    workingdiv.style.border = '1px #A9DE16 solid';
    workingdiv.style.backgroundColor = '#EAF2CB';
    workingdiv.style.padding = '1em';
    workingdiv.style.position = 'fixed';
    workingdiv.style.top = '50%';
    workingdiv.style.left = '50%';
    workingdiv.style.zIndex = '100';
    bodycontent.parentNode.insertBefore(workingdiv, bodycontent);
    workingdiv.innerHTML = '<img src=http://bits.wikimedia.org/skins-1.5/common/images/ajax-loader.gif width=28px>    Working...';

    var url = wgScriptPath + '/api.php?action=query&prop=info|revisions&rvprop=timestamp&indexpageids=1&intoken=edit|move&format=json&titles=' + encodeURIComponent(mw.config.get('wgPageName'));
    var req = sajax_init_object();
    req.open('GET', url, true);

    req.onreadystatechange = function() {
        if (req.readyState == 4 && req.status == 200) {
            eval("insertTagOnPageEdit(" + req.responseText + ",'" + req.responseText.replace(/\'/g, "`") + "','" + tag + "','" + usernote + "','" + img_summary +"','" + talk_summary + "')");
        }
    }
    req.send(null);
}

function insertTagOnPageEdit(obj, txt, tag, usernote, img_summary, talk_summary) {
    if (obj['error']) {
        alert('Error: ' + obj['error']['code'] + ' - ' + obj['error']['info']);
        return;
    }
    if (!obj['query'] || !obj['query']['pageids'] || !obj['query']['pages'][obj['query']['pageids'][0]]) {
        alert('Unexpected response: ' + txt);
        return;
    }
    var page = obj['query']['pages'][obj['query']['pageids'][0]];
    if (!page['edittoken'] || !page['revisions'] || !page['revisions'][0] || !page['revisions'][0]['timestamp']) {
        alert('Unexpected response: ' + txt);
        return;
    }
    var edittoken = page['edittoken'];
    var timestamp = page['revisions'][0]['timestamp'];
    var startstamp = page['starttimestamp'];
    if (img_summary == "undefined") img_summary = 'Tagging with ' + tag;
    var params = 'action=edit&format=json&title=' + encodeURIComponent(mw.config.get('wgPageName')) + '&prependtext=' + encodeURIComponent(tag + '\n') + '&token=' + encodeURIComponent(edittoken) + '&summary=' + encodeURIComponent(img_summary) + '&minor=1&basetimestamp=' + timestamp.replace(/[^\d]/g, '');
    if (startstamp) params += '&starttimestamp=' + startstamp.replace(/[^\d]/g, '')
    var url = wgScriptPath + '/api.php';
    var req = sajax_init_object();
    req.open('POST', url, true);
    req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
    req.setRequestHeader('Content-length', params.length);
    req.setRequestHeader('Connection', 'close');

    if (usernote != "undefined") {
        req.onreadystatechange = function() {
            if (req.readyState == 4 && req.status == 200) {
                eval("insertTagOnPageEditHandler(" + req.responseText + ",'" + req.responseText.replace(/\'/g, "`") + "')");

            }
        }
        req.send(params);

        var usertag = '\{\{' + usernote + '|1=' + wgPageName + '\}\}\~\~\~\~';
        if (talk_summary == "undefined") talk_summary = 'Tagging with ' + tag;
        var params = 'action=edit&format=json&appendtext=' + encodeURIComponent(usertag + '\n') + '&token=' + encodeURIComponent(edittoken) + '&summary=' + encodeURIComponent(talk_summary) + '&minor=1';
          
        var url = wgScriptPath + '/api.php';
        var req = sajax_init_object();

        req.open('POST', url, true);
        req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
        req.setRequestHeader('Content-length', params.length);
        req.setRequestHeader('Connection', 'close');
        req.onreadystatechange = function() {
            if (req.readyState == 4 && req.status == 200) {
                eval("insertTagOnPageEditHandler(" + req.responseText + ",'" + req.responseText.replace(/\'/g, "`") + "','" + 'True' + "')");
            }
        }

        Notifier.get_user_from_server(wgPageName,
        function(user) {
            //alert(user);
            if (user) {
                params += '&title=' + encodeURIComponent('User talk:' + user);
                req.send(params);

            }
        }
        );

    } else {
        req.onreadystatechange = function() {
            if (req.readyState == 4 && req.status == 200) {
                eval("insertTagOnPageEditHandler(" + req.responseText + ",'" + req.responseText.replace(/\'/g, "`") + "','" + 'True' + "')");

            }
        }
        req.send(params);
    }
}

function insertTagOnPageEditHandler(obj, txt, reload) {
    if (obj['error']) {
        alert('Error: ' + obj['error']['code'] + ' - ' + obj['error']['info']);
        return;
    } else if (obj['edit'] && obj['edit']['result']) {
        //alert('Action completed: "' + obj['edit']['result'] + '"');
        if (reload != "undefined") document.location.href = wgScript + '?title=' + encodeURIComponent(mw.config.get('wgPageName'));
    } else {
        alert('Unexpected response: ' + txt);
        return;
    }
}