User:Icie/natural soul count.js
From Karteria DWRP Wiki
(Redirected from Natural souls/count js)
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (β-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (β-Shift-R on a Mac)
- Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
const souls = {"π¦": {reg : /π¦/g, name : "Aves", symbol:"π¦"},
"π
": {reg : /π
/g, name : "Carnivora", symbol:"π
"},
"π¦": {reg : /π¦/g, name : "Arthropoda", symbol:"π¦"},
"π": {reg : /π/g, name : "Cephalopoda", symbol:"π"},
"π¦": {reg : /π¦/g, name : "Ruminanita", symbol:"π¦"},
"π": {reg : /π/g, name : "Glire", symbol:"π"},
"π²": {reg : /π²/g, name : "Terra", symbol:"π²"},
"π": {reg : /π/g, name : "Reptilia", symbol:"π"},
"π»": {reg : /π»/g, name : "Spectral", symbol:"π»"},
"π": {reg : /π/g, name : "Golem", symbol:"π"},
"π": {reg : /π/g, name : "Fungi", symbol:"π"},
"π¦": {reg : /π¦/g, name : "Perissodactyla", symbol:"π¦"},
"πͺΌ": {reg : /πͺΌ/g, name : "Cnidaria", symbol:"πͺΌ"}
}
let characters = $(".entry-content .lj-user").parent();
characters = $(".entry-content .ljuser").parent().html().replaceAll('\n','').split("<br>");
let justChars = characters.filter((text) => {
const t = $(text).filter(".ljuser");
return t && t.length > 0;
});
//console.log(justChars + " - chars");
const newArr = {all: [],
primary: [],
secondary: []};
//let carnivoras = [];
justChars.forEach(function (text){
const x = text.match(/(^.+?)\|/g);
// console.log(x);
if (x && x.length > 0){
const grouped = x[0].match(/<[^>]+>(?<charname>.+)<[^>]+>\s?(?<all>(?<primary>(?:.{2}))(?<secondary>.+)?)\s?<span.+?<\/span>\s?<small>(?<playername>.+)\|/);
if(!grouped || grouped.length === 0){
console.log("x");
console.log(x);
}
newArr.all.push(grouped.groups.all);
newArr.primary.push(grouped.groups.primary);
newArr.secondary.push(grouped.groups.secondary);
}
});
const flatPrimary = newArr.primary.join();
const flatSecondary = newArr.secondary.join();
for (const [key,value] of Object.entries(souls)){
souls[key].totalCount = $(".entry-content").text().match(value.reg).length;
souls[key].secondaryCount = value.reg.test(flatSecondary) ? flatSecondary.match(value.reg).length:0 ;
souls[key].primaryCount = value.reg.test(flatPrimary) ? flatPrimary.match(value.reg).length:0 ;
souls[key].isMatch = [];
souls[key].multi = [];
for(const [i,v] of newArr.all.entries()){
if(value.reg.test(v)){
// console.log(v);
souls[key].isMatch.push(v);
if(v.match(value.reg).length > 1){
souls[key].multi.push(v);
}
}
}
souls[key].augCount = souls[key].isMatch.length;
}
let outputTable = `{| class="wikitable"
|+
! colspan="2" |Type
!style="width:5em"|Count
!style="width:5em"|Primary
!style="width:5em"|Additional
|-
| rowspan="10" |Natural souls`;
let multiNote = "";
let asterisk = "";
for (const [i,v] of Object.entries(souls)){
v.asterisk = "";
if(v.totalCount !== v.augCount){
asterisk += "*";
v.asterisk = asterisk;
if(v.multi.length === 1){
multiNote += `<nowiki>${v.asterisk}</nowiki> ${v.totalCount} souls, ${v.augCount} augmented as ${v.multi.length} character has multiple ${v.name} souls.
`;
}else{
multiNote += `<nowiki>${v.asterisk}</nowiki> ${v.totalCount} souls, ${v.augCount} augmented as ${v.multi.length} characters have multiple ${v.name} souls.
`;}
}
v.totalCount = v.totalCount === 0 ? "" : v.totalCount;
v.primaryCount = v.primaryCount === 0 ? "" : v.primaryCount;
v.secondaryCount = v.secondaryCount === 0 ? "" : v.secondaryCount;
if(v.name === 'Fungi'){
outputTable += `
| rowspan="4" |Wild souls`
}
outputTable += `
|${v.symbol} ${v.name}
|style="text-align: right"|${v.totalCount}${v.asterisk}
|style="text-align: right"|${v.primaryCount}
|style="text-align: right"|${v.secondaryCount}
|-`;
}
const d = new Date();
const day = d.getDate();
const month = d.getMonth() + 1;
const year = d.getFullYear();
outputTable += `
|Marsupialia
|style="text-align: right"|
|style="text-align: right"|
|style="text-align: right"|
|}
${multiNote}
Last updated ${year}-${month}-${day}. <ref>https://alogos.dreamwidth.org/790.html</ref>
[[Natural souls/count_js| Quick tally]]`;
console.log(outputTable);