User:Inductiveload/Template autoloader.js

From Wikipedia, the free encyclopedia
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
/*
 * Grabs text from a Template documentation page that is wrapped in
 * <pre id="autoload_template"></pre> tags and inserts it into the document
 *
 * The aim of this is to allow users to easily insert blank templates into
 * pages and save thm looking up the parameters names and/or orders
 *
 * There is two way to use it, for both add
 * importScript('User:Inductiveload/Autoload template.js');
 * to your javascript.
 *
 * then add a link in the left regex menu, add [[m:TemplateScript]] to your
 * .js with this template:
 * { name: 'Autoload template', script:autoloadTemplate }
 */

function get_autoload_data(data)
{
    try {
        //the textbox to insert the text into
        var textbox = document.getElementsByName('wpTextbox1')[0];

        if (textbox && !data.query.pages["-1"]) {
            for (var id in data.query.pages) {
                var content = data.query.pages[id].revisions[0]['*'];
                
                var r = new RegExp('<pre id="[Aa]utoload">([\\s\\S]*?)</pre>');
                var match = r.exec(content);

                if (match) {
                   var template_text = match[1];

                   // prepend the autoloaded text to the editbox content
                   // TODO: insert at cursor (possible?)
                   textbox.value = template_text + "\n"  + textbox.value;
                } else
                {
                   alert ("No preloadable text found");
                }
                break;
           }

        }
    }
    catch (err) { }
}

function create_script_obj(url)
{
    var scriptObj = document.createElement("script");
    scriptObj.setAttribute("type", "text/javascript");
    scriptObj.setAttribute("src", url);
    document.body.appendChild(scriptObj);
}

function getTemplateName()
{
    var template_name = window.prompt("Template to autoload","");
    return template_name;

}


function autoloadTemplate( )
{
    var name = getTemplateName();
    var template_pagename = "Template:" + name + "/doc";

    var url = wgServer + wgScriptPath
        + "/api.php" + "?action=query" + "&prop=revisions"
        + "&callback=get_autoload_data" + "&rvprop=content"
        + "&format=json"+ "&titles=" + encodeURIComponent(template_pagename);

    create_script_obj(url);
}