User:Inductiveload/easy lst.js

/** * Easy Labelled Section Transclusion Syntax * * Configurations: *    enabled:    Set to false to disable this gadget on the current page * * Configure it like this, from your main JS: * * { *  var easySectSyntaxConfig = { *   enabled: true, *  }; * *   mw.hook("easy_section_syntax.config").fire(easySectSyntaxConfig); * } */

"use strict";

// IIFE used when including as a user script (to allow debug or config) // Default gadget use will get an IIFE wrapper as well (function($, mw) {

var gadget_name = "easy_section_syntax";

var EasySS = { enabled: true, };

/* * Read config form user. function fired by hook */ function apply_config(cfg) { console.log("Configuring " + gadget_name);

// Bail if the config looks like junk if (!cfg || typeof cfg !== "object") { console.error("Invalid " + gadget_name + " config", cfg); return; }

if (typeof cfg.enabled === "boolean") { EasySS.enabled = cfg.enabled; }

EasySS.configured = true; }

/* * Convert ## syntax to syntax */ function restore_lst {

var editbox = document.getElementById("wpTextbox1");

if (!editbox) { return; }

var search = /##[\s]*(.*?)[\s]*##[\s]*\n/; var a = editbox.value.split(search); var s = a[0]; var m = parseInt(a.length/2); for (var i = 0; i < m; i++) { var title = a[i * 2 + 1]; // Ensure we'll don't get twice quote. title = title.replace(/^"(.*)"$/, "$1"); title = title.replace(/^'(.*)'$/, "$1"); var content = a[i * 2 + 2]; if (title && content.substring(0, 2) == "{|") { content = "\n" + content; }       if (title) { s = s + "" + content + "\n"; } else { s = s + content; }       /* if( i < m-1 ) s = s + "\n"; */ }   editbox.value = s; }

/** * easy lst : hide section markers */ function easy_section_syntax {

var editbox = document.getElementById("wpTextbox1");

if (!editbox) { return; }

var search = //; var a = editbox.value.split(search); var s = a[0]; var ok = true; for (var i = 0 ; i < parseInt(a.length/2) ; i++) { var title = a[i*2+1]; var content = a[i*2+2]; var r2 = /^([\s\S]*?)(\n|)[\s]*([\s\S]*?)$/; var m2 = content.match(r2); if( m2 ) { title = title.replace(/^"(.*)"$/, "$1"); title = title.replace(/^'(.*)'$/, "$1"); if (s && s.charAt(s.length - 1) != "\n" &&                   s.charAt(s.length - 1) != "|") { s = s + "\n"; }           s = s + "## " + title + " ##\n"+ m2[1]; if (m2[4]) { if (m2[4] != "\n") { if (s && s.charAt(s.length - 1) != "\n") { s = s + "\n"; }                   s = s + "####\n" + m2[4] ; }           }        } else { ok = false; console.error("Error" + title); }   }    if (ok) { editbox.value = s;   } }

/* * Run setup, and convert to ## syntax for LST */ function on_load { easy_section_syntax;

// Install the on-save hook on all edit buttons $('.editButtons').click(restore_lst); }

function easy_sect_syn_setup {

// Get user config, if any mw.hook(gadget_name + ".config").add(apply_config);

// LST only in Page NS and if user has it enabled if (!EasySS.enabled || mw.config.get("wgCanonicalNamespace") !== "Page") { return; }

if ($.inArray(mw.config.get("wgAction"), ["edit", "submit"]) !== -1) { mw.loader.using("ext.proofreadpage.page", function {            // mimic code in the extension, there is a conditionnal deps on ext.wikiEditor.            if (mw.user.options.get("usebetatoolbar") && $.inArray("ext.wikiEditor", mw.loader.getModuleNames) > -1) {               var load_deps = ["ext.wikiEditor"];                if ( mw.user.options.get( "codemirror-syntax-highlight" ) == 1 ) {                    load_deps.push("ext.CodeMirror.lib");                }                mw.loader.using(load_deps, function { on_load; });           } else {                on_load;            }        }); } } $(easy_sect_syn_setup);

}(jQuery, mediaWiki));