![]() | This is a
documentation
subpage for
Module:Sandbox/Ahecht/flag/China. It may contain usage information, categories and other content that is not part of the original module page. |
Generated from {{ Country data China}} by User:Ahecht/Scripts/flag.js:
Javascript code
|
---|
////jshint maxerr:256
var api = new mw.Api();
var titlePrefix = "Module:Sandbox/Ahecht/flag/";
var statusText = '';
function apiGet(titles) {
var query = {
action: "query",
prop: "revisions",
rvprop: "content",
titles: titles
};
api.get( query )
.done (function (data) {
if (typeof data !== 'undefined' && data.query && data.query.pages) {
page = Object.entries(data.query.pages)[0][1];
if (typeof page.revisions !== 'undefined') {
return processTemplate(page.revisions0]['*']);
} else {
statusText = "Error: Revisions not found!";
showStatus(statusText);
return statusText;
}
}
statusText = "Error: Data not found!";
showStatus(statusText);
return statusText;
} ).fail (function (err) {
statusText = "Error: API error:" + err;
showStatus(statusText);
return statusText;
} );
return;
}
function processTemplate(content) {
var output = {};
if(typeof content !== 'undefined' && /^\{\{\s*(?:safesubst<noinclude\s*\/>:|)\s*\{\{\{1/.test(content)) {
//Valid data template
var matches = content.replace(/<noinclude\>[\S\s]*?<\/noinclude\>/gmi, "").matchAll(
/(?<=\n)[ \t]*\|[ \t]*([^=]*?)[ \t]*=[ \t]*([^\n]*?)[ \t]*(?=\n)/g
);
for (var match of matches) {
// Don't store passthrough values
if (match2 != "{{{" + match1 + "|}}}") {
outputmatch1]] = match2];
}
}
}
if (typeof output.alias !== 'undefined') {
return generateLua(output, 1);
} else {
statusText = "Error processing template!";
showStatus( statusText );
return statusText;
}
return;
}
function generateLua(args, depth) {
var params = {};
var k, resolvedkey, ifeq;
//Find subparameters
for (var key in args) {
//Resolve #ifeq statement in key
ifeq = key.match(/\{\{\s*#ifeq:\s*\{\{\{altlink\}\}\}\s*\|(.*?)\|(.*?)\|.*?\}\}/);
if (ifeq !== null && ifeq1 !== null && ifeq2 !== null) {
resolvedkey = ifeq2].trim() + '-' + ifeq1].trim().split(' ')[0];
} else {
resolvedkey = key;
}
//Split by hyphens
if ( !/[{}]/.test(resolvedkey) && /[-]/.test(resolvedkey) ) {
k = resolvedkey.split("-");
} else {
k = resolvedkey];
}
//Create subkey for prefix if it doesn't already exist
if (typeof paramsk0]] === 'undefined') {
paramsk0]] = {};
}
var value = argskey];
//Assign either suffix subarray or #default
var subkey = "#default";
if (typeof k1 !== 'undefined') {
subkey = k.slice(1).join("-");
}
//Check if value has a switch or #ifeq statement and store
if (typeof value === 'string') {
if ( /^\{\{\s*(?:safesubst<noinclude\s*\/>:|)\s*#switch:\s*\{\{\{variant\|?\}\}\}/.test(value) ) {
paramsk0]][subkey = doSwitch(value);
} else {
var parseIfeq = value.match(/\{\{\s*(?:safesubst<noinclude\s*\/>:|)\s*#ifeq:\s*\{\{\{name\|?\}\}\}\s*\|(.*?)\s*\|\s*(.*?)\s*\|\s*\{\{\{name\|?\}\}\}\s*\}\}/);
if (parseIfeq !== null && parseIfeq1 !== null && parseIfeq2 !== null) {
paramsk0]][subkey = {};
paramsk0]][subkey][parseIfeq1]] = parseIfeq2];
} else {
paramsk0]][subkey = value;
}
}
} else if(typeof value === 'undefined') {
paramsk0]][subkey = "false";
} else {
paramsk0]][subkey = value;
}
}
//Move parameters up a level if only #default exists
for (key in params) {
var count = 0;
for (k in paramskey]) { count ++; }
if ( (count == 1) && (typeof paramskey]['#default' !== 'undefined') ) {
paramskey = paramskey]['#default'];
}
}
var output = [];
//Generate lua output
for (key in params) {
k = '\t'.repeat(depth+1) + '["' + key + '"] = ';
if (typeof(paramskey]) === 'string') {
var outString = k;
// Set blank to false
if (paramskey === '') {
outString += "false";
} else {
outString += '"' + paramskey + '"';
}
// Put #default at start of outString
if (key == "#default") {
output.unshift(outString);
} else {
output.push(outString);
}
} else if (typeof(paramskey]) === 'object') {
//Remove redundant levels
for (var sub in paramskey]) {
if (sub == '#default' && typeof(paramskey][sub]) === 'object') {
for (var subsub in paramskey][sub]) {
paramskey][subsub = paramskey][sub][subsub];
delete paramskey][sub][subsub];
}
}
}
for (sub in paramskey]) {
if (sub.search(key + '-') === 0) {
paramskey][sub.replace(key + '-','')] = paramskey][sub];
delete paramskey][sub];
} else if (sub == key) {
paramskey]['#default' = paramskey][sub];
delete paramskey][sub];
}
}
var subout = generateLua(paramskey], depth+1);
output.push(k + '{\n' + subout.join(",\n") + '\n' + '\t'.repeat(depth+1) + '}');
}
}
if (depth != 1) {
return output;
} else {
var outtext = 'return {\n\t["' + args.alias + '"] = {\n' + output.join(',\n') + '\n\t},\n}';
showStatus(outtext);
return apiPost(args.alias, outtext);
}
return;
}
function doSwitch(value) {
var trimmedValue = value.replace(/^\{\{\s*(?:safesubst<noinclude\s*\/>:|)\s*#switch:\s*\{\{\{variant\|?\}\}\}\s*(.*)\}\}$/,'$1|');
var matches = trimmedValue.match(/(?<=\|)(.*?)(?=\|)/g);
var valueObj = {};
for (i=0;i<matches.length;i++) {
var mi = matchesi].split("=");
for (j=i;j<matches.length;j++) {
var mj = matchesj].split("=");
if ( typeof mj1 !== 'undefined' ) {
valueObjmi0]] = mj1];
break;
} else if ( j == (matches.length - 1) ) {
if (i == j) {
valueObj'#default' = mj0];
} else {
valueObjmi0]] = mj0];
}
}
}
}
return valueObj;
}
function apiPost(alias, text) {
var params = { action: "edit" };
var type;
if (text == 'documentation') {
type = text;
params.title = titlePrefix + alias.replace(/\s/, "_") + '/doc';
params.summary = "Creating documentation for [[" + titlePrefix + alias + "]]";
params.text = "{{:" + titlePrefix + "doc|Country data " + alias + "}}";
} else {
type = 'module';
params.title = titlePrefix + alias.replace(/\s/, "_");
params.summary = "Extracting data from [[Template:Country data " + alias + "]]";
params.text = text;
}
api.postWithEditToken( params ).done( function ( data ) {
if ( typeof data !== 'undefined' && data ) {
if (data. && data..result && data..result === "Success" ) {
statusText = "Edit saved successfully to https:" +
mw.config.values.wgServer +
mw.config.values.wgArticlePath.replace("$1", data..title.replace(/\s/, "_"));
} else {
statusText = "Couldn't save " + type + " due to data error: " + JSON.stringify( data );
}
} else {
statusText = "Couldn't save " + type + " due to data error.";
}
showStatus(statusText);
if (text != 'documentation') { apiPost( alias, 'documentation' ); }
} ).fail( function ( err ) {
statusText = "Couldn't save " + type + " due to post error: " + err;
showStatus(statusText);
} );
return;
}
function showStatus(statusText) {
console.log(statusText);
return;
}
if ( mw.config.values.wgPageName.search("Template:Country_data_") === 0 ) {
apiGet(mw.config.values.wgPageName);
} else if ( mw.config.values.wgPageName.search(titlePrefix) === 0 ) {
apiGet("Template:Country_data_" + mw.config.values.wgPageName.split('/').pop());
} else {
showStatus("Script must be run from Country Data template or Country-specific module");
}
//
|