function noPipe(str){
if(typeof noPipeAll !== "undefined"){
if(noPipeAll===false){
console.log("why you noPipeAll = false to me");
if(mw.config.get('wgNamespaceNumber') !== 0) return str;
}
}else if(mw.config.get('wgNamespaceNumber') !== 0) // set noPipeAll = true to use this script outside mainspace
return str;
const api = new mw.Api({
ajax: { headers: { 'Api-User-Agent': 'NoPiper/1.0' } },
parameters: { redirects: true, action: 'query',
format:'json', formatversion: 2}
});
// Possible optimization: remove duplicates and do replaceall?
for(const match of str.matchAll(/\[\[(?!Category:):?([^\]#]+)(#[^\]#]+)?\|([^\[\]\n\uE000]+)\]\]/g)){
console.log(match)
api.get({
titles: match[3], redirects: true,
action: 'query', format: 'json', formatversion: 2
}).then(pipe => {
console.log(JSON.stringify(pipe))
pipe=pipe.query.redirects;
if(typeof pipe!=="undefined"){
pipe=pipe[0];
api.get({
titles: match[1], redirects: true,
action: 'query', format: 'json', formatversion: 2
}).then(link=> {
console.log(JSON.stringify(link))
link=link.query;
if(typeof link.redirects!=="undefined"){
if(typeof match[2]!=="undefined"){
link.redirects[0].tofragment=match[2].replace("_", " ");
}
if(JSON.stringify(link.redirects[0])===JSON.stringify(pipe)){
str.replace(match[0], "[["+match[3]+"]]"); //technically one could cause a bug by putting a # in here but who'd be crazy enough to do that?
}
}else if(link.pages[0].title===pipe.to){
if(typeof match[2]!=="undefined") //if has target section we need to go to, evaluate if target section and our redirect section are equal
if(typeof pipe.tofragment!=="undefined") // null safety... why can't we just compare undefineds
if(pipe.tofragment===match[2]){
str.replace(match[0], "[["+match[3]+"]]");
}
else // if any of the above are false, don't replace; otherwise, we'd continue after already replacing
str.replace(match[0], "[["+match[3]+"]]");
}
});
}
}); // there has got to be a better way to extract data from promises
}
api.get({titles: "Main Page"}).done(() => {return str;});
}