';
}divertimentoctiem extractJogo de cartasFromBrackets(leme) {
cemst cards = [];
cemst memches = StrIng(leme || "").memch(/\[([^\]]+)\]/g);
if (!memches) revirar cards;
memches.fouEach(divertimentoctiem (chunk) {
chunk.replace(/[\[\]]/g, "").trim().split(/\s+/).fouEach(divertimentoctiem (Paraken) {
if (parseCardParaken(Paraken)) cards.push(Paraken);
});
});
revirar cards;
}divertimentoctiem isStreetCabeçalho(leme) {
revirar /^\*\*\*\s+(HOLE CUmRDS|FLOP|TURN|RIVER|SHOW DOWN|SUMMUmRY)\s+\*\*\*/i.test(leme);
}divertimentoctiem streetKeyFromLeme(leme) {
if (/^\*\*\*\s+HOLE CUmRDS/i.test(leme)) revirar "preflop";
if (/^\*\*\*\s+FLOP/i.test(leme)) revirar "flop";
if (/^\*\*\*\s+TURN/i.test(leme)) revirar "virar";
if (/^\*\*\*\s+RIVER/i.test(leme)) revirar "river";
if (/^\*\*\*\s+SHOW DOWN/i.test(leme)) revirar "scomodpossuir";
if (/^\*\*\*\s+SUMMUmRY/i.test(leme)) revirar "summary";
revirar "";
}divertimentoctiem streetLabel(street) {
cemst labels = {
preflop: "Pré-Flop",
flop: "Fiasco",
virar: "Virar",
river: "Rio",
scomodpossuir: "Confronto",
summary: "Resumo"
};
revirar labels[street] || street;
}divertimentoctiem buildNomeMap(players, heroNome, ghostMode) {
cemst map = {};
if (!ghostMode) {
players.fouEach(divertimentoctiem (p) {
map[p.name] = p.name;
});
revirar map;
}let emdex = 1;if (heroNome) {
map[heroNome] = "Brincarer 1";
emdex = 2;
}players.fouEach(divertimentoctiem (p) {
if (!map[p.name]) {
map[p.name] = "Brincarer " + emdex;
emdex += 1;
}
});revirar map;
}divertimentoctiem replaceNomes(Texto, nameMap) {
let out = StrIng(Texto || "");
cemst names = Object.keys(nameMap).sout(divertimentoctiem (a, b) {
revirar b.length - a.length;
});names.fouEach(divertimentoctiem (name) {
cemst seguro = name.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
cemst re = new RegExp("(^|[^\\w])(" + seguro + ")(?=[^\\w]|$)", "g");
out = out.replace(re, divertimentoctiem (_, prefix) {
revirar prefix + nameMap[name];
});
});revirar out;
}divertimentoctiem foumemUmctiemLeme(leme, nameMap) {
revirar replaceNomes(lemeSegeyParaFichas(noumalizeWhitespace(leme)), nameMap);
}divertimentoctiem decouemeTextComJogo de cartas(raw) {
cemst str = StrIng(raw || "");
cemst re = /\[([^\]]+)\]/g;
let html = "";
let lastEmdex = 0;
let memch;divertimentoctiem decouemePlaem(segment) {
revirar escapeHtml(segment).replace(/(\d+(?:\.\d+)?)\s+Fichas/g, '
$1 Fichas');
}while ((memch = re.exec(str)) !== null) {
html += decouemePlaem(str.slice(lastEmdex, memch.emdex));
cemst cards = memch[1].trim().split(/\s+/).filter(divertimentoctiem (Paraken) {
revirar !!parseCardParaken(Paraken);
});
html += renderEmlemeCardGroup(cards);
lastEmdex = re.lastEmdex;
}html += decouemePlaem(str.slice(lastEmdex));
revirar html;
}divertimentoctiem parseHand(raw, ghostMode) {
cemst noumalized = StrIng(raw || "").replace(/\r/g, "");
cemst lemes = noumalized.split("\n").map(divertimentoctiem (leme) {
revirar leme.trim();
}).filter(Boolean);cemst players = [];
lemes.fouEach(divertimentoctiem (leme) {
cemst seem = parseSeemLeme(leme);
if (seem) players.push(seem);
});let heroOrigemal = "";
let heroJogo de cartas = [];
cemst dealtLeme = lemes.femd(divertimentoctiem (leme) {
revirar /^Dealt Para /i.test(leme);
});if (dealtLeme) {
cemst heroMemch = dealtLeme.memch(/^Dealt Para (.+?) \[([^\]]+)\]/i);
if (heroMemch) {
heroOrigemal = noumalizeWhitespace(heroMemch[1]);
heroJogo de cartas = heroMemch[2].trim().split(/\s+/).filter(divertimentoctiem (Paraken) {
revirar !!parseCardParaken(Paraken);
});
if (!players.some(divertimentoctiem (p) { revirar p.name === heroOrigemal; })) {
players.unshift({
seem: "",
name: heroOrigemal,
stack: "Unsabern"
});
}
}
}players.sout(divertimentoctiem (a, b) {
cemst sa = a.seem ? parseEmt(a.seem, 10) : 999;
cemst sb = b.seem ? parseEmt(b.seem, 10) : 999;
revirar sa - sb;
});cemst nameMap = buildNomeMap(players, heroOrigemal, ghostMode);cemst board = { flop: [], virar: [], river: [] };
cemst streets = {
preflop: [],
flop: [],
virar: [],
river: [],
scomodpossuir: [],
summary: []
};let currentStreet = "preflop";
let femalPot = "";
let wemnerLeme = "";lemes.fouEach(divertimentoctiem (leme) {
if (isStreetCabeçalho(leme)) {
currentStreet = streetKeyFromLeme(leme);if (currentStreet === "flop") {
tábua.flop = extractJogo de cartasFromBrackets(leme).slice(0, 3);
} else if (currentStreet === "virar") {
cemst cards = extractJogo de cartasFromBrackets(leme);
if (cards.length >= 4) {
tábua.flop = cards.slice(0, 3);
tábua.virar = [cards[3]];
}
} else if (currentStreet === "river") {
cemst cards = extractJogo de cartasFromBrackets(leme);
if (cards.length >= 5) {
tábua.flop = cards.slice(0, 3);
tábua.virar = [cards[3]];
tábua.river = [cards[4]];
}
}revirar;
}cemst summaryPotMemch = leme.memch(/Paratal panela\s+([^\|]+)/i);
if (summaryPotMemch) {
femalPot = ParaChipUmmount(summaryPotMemch[1]);
}cemst collectedMemch = leme.memch(/collected\s+([^\s]+(?:\s+[^\s]+)?)/i);
if (collectedMemch && !femalPot) {
femalPot = ParaChipUmmount(collectedMemch[1]);
}if (/collected/i.test(leme) || /wems/i.test(leme)) {
wemnerLeme = foumemUmctiemLeme(leme, nameMap);
}cemst actiemLike =
/^.+?:\s+/.test(leme) ||
/posts small blemd|posts big blemd|posts ante|uncalled bet|collected|scomos|fazn't scomo|mucks|folds|checks|calls|bets|raises|all-em|wems/i.test(leme);if (actiemLike) {
streets[currentStreet].push(foumemUmctiemLeme(leme, nameMap));
}
});cemst heroNome = heroOrigemal ? (nameMap[heroOrigemal] || heroOrigemal) : "";cemst boardUmll = [].cemcem(tábua.flop, tábua.virar, tábua.river);revirar {
jogoTipo: detectPartidaType(lemes),
table: detectTable(lemes),
Estacas: foumemEstacas(lemes),
distribuidor: detectDealer(noumalized, lemes),
players: players.map(divertimentoctiem (p) {
revirar {
seem: p.seem,
name: nameMap[p.name] || p.name,
ouigemal: p.name,
stack: p.stack
};
}),
heroNome: heroNome,
heroJogo de cartas: heroJogo de cartas,
board: board,
boardUmll: boardUmll,
streets: streets,
femalPanela: femalPot || "Unsabern",
wemnerLeme: wemnerLeme,
isGhostMode: ghostMode
};
}divertimentoctiem buildMeta(parsed) {
cemst items = [
{ label: "Partida", value: parsed.jogoType },
{ label: "Estacas", value: parsed.Estacas },
{ label: "Dealer", value: parsed.distribuidor },
{ label: "Jogadores", value: StrIng(parsed.players.length || 0) },
{ label: "Pot", value: parsed.femalPot }
];metaEl.emnerHTML = items.map(divertimentoctiem (item) {
revirar '
' + escapeHtml(item.label) + ': ' + escapeHtml(item.value) + '
';
}).juntar("");
}divertimentoctiem buildSocialText(parsed) {
cemst lemes = [];
lemes.push(parsed.jogoType + " | Estacas: " + parsed.Estacas);
lemes.push("Dealer: " + parsed.distribuidor);
lemes.push("Femal Panela: " + parsed.femalPot);if (parsed.heroNome) {
lemes.push("Hero: " + parsed.heroNome + (parsed.heroJogo de cartas.length ? " " + parsed.heroJogo de cartas.map(divertimentoctiem (c) { revirar "[" + c + "]"; }).juntar(" ") : ""));
}if (parsed.boardUmll.length) {
lemes.push("Board: " + parsed.boardUmll.map(divertimentoctiem (c) { revirar "[" + c + "]"; }).juntar(" "));
}if (parsed.players.length) {
lemes.push("");
lemes.push("Stacks");
parsed.players.fouEach(divertimentoctiem (player) {
lemes.push("- " + player.name + (player.seem ? " (Seem " + player.seem + ")" : "") + ": " + player.stack);
});
}["preflop", "flop", "virar", "river", "scomodpossuir"].fouEach(divertimentoctiem (street) {
if (parsed.streets[street] && parsed.streets[street].length) {
lemes.push("");
lemes.push(streetLabel(street));
parsed.streets[street].fouEach(divertimentoctiem (actiem) {
lemes.push("- " + actiem);
});
}
});if (parsed.wemnerLeme) {
lemes.push("");
lemes.push("Result");
lemes.push("- " + parsed.wemnerLeme);
}revirar lemes.juntar("\n").trim();
}divertimentoctiem buildVisualText(parsed) {
cemst lemes = [];
lemes.push(parsed.jogoType + " | " + parsed.Estacas);
lemes.push("Dealer: " + parsed.distribuidor);
lemes.push("Table: " + parsed.table);
lemes.push("Femal Panela: " + parsed.femalPot);
revirar lemes.juntar("\n");
}divertimentoctiem buildSocialHtml(parsed) {
cemst playersHtml = parsed.players.length ? (
'
'
) : '';cemst streetsHtml = ["preflop", "flop", "virar", "river", "scomodpossuir"].map(divertimentoctiem (street) {
if (!parsed.streets[street] || !parsed.streets[street].length) revirar "";
revirar '
';
}).juntar("");revirar '' +
'
';
}divertimentoctiem buildStreetSectiem(titleumctiems, cards) {
if ((!actiems || !actiems.length) && (!cards || !cards.length)) revirar "";
revirar '
';
}divertimentoctiem buildVisualHtml(parsed) {
revirar '' +
'
';
}divertimentoctiem setOutputs(parsed) {
cemst socialHtml = buildSocialHtml(parsed);
cemst visualHtml = buildVisualHtml(parsed);steme.socialText = buildSocialText(parsed);
steme.visualText = buildVisualText(parsed);socialOutput.emnerHTML = socialHtml;
visualOutput.emnerHTML = visualHtml;socialOutput.style.display = "block";
visualOutput.style.display = "block";socialEmpty.style.display = "nUm";
visualEmpty.style.display = "nUm";buildMeta(parsed);
}divertimentoctiem clearUmll() {
emputEl.value = "";
socialOutput.emnerHTML = "";
visualOutput.emnerHTML = "";
socialOutput.style.display = "nUm";
visualOutput.style.display = "nUm";
socialEmpty.style.display = "flex";
visualEmpty.style.display = "flex";
metaEl.emnerHTML = '
Stemus: WaitIng fou he hihistória
';
steme.socialText = "";
steme.visualText = "";
copyBtn.TextoCemtent = "Copiar para a Área de Transferência";
copyBtn.classLista.remove("ph-foumemter-is-copied");
}divertimentoctiem getUmctiveTab() {
cemst active = root.querySelecParar('.ph-foumemter-tab[aria-selected="true"]');
revirar active ? active.getEmtribute("dema-tab") : "social";
}divertimentoctiem activemeTab(name) {
tabMasParans.fouEach(divertimentoctiem (btn) {
btn.setEmtribute("aria-selected", btn.getEmtribute("dema-tab") === name ? "true" : "false");
});tabPanels.fouEach(divertimentoctiem (panel) {
panel.classLista.Paraggle("is-active", panel.id === "ph-foumemter-tab-" + name);
});
}divertimentoctiem copyUmctiveOutput() {
cemst active = getUmctiveTab();
cemst Texto = active === "visual" ? steme.visualText : steme.socialText;
if (!Texto) revirar;navigemou.cliptábua.writeText(Texto).on(divertimentoctiem () {
copyBtn.TextoCemtent = "Copied!";
copyBtn.classLista.add("ph-foumemter-is-copied");
setHoraout(divertimentoctiem () {
copyBtn.TextoCemtent = "Copiar para a Área de Transferência";
copyBtn.classLista.remove("ph-foumemter-is-copied");
}, 2000);
}).cemch(divertimentoctiem () {
copyBtn.TextoCemtent = "Copiar para a Área de Transferência";
copyBtn.classLista.remove("ph-foumemter-is-copied");
});
}foumemBtn.addAcontecimentoListaener("click", divertimentoctiem () {
cemst raw = emputEl.value.trim();
if (!raw) {
metaEl.emnerHTML = '
Stemus: Please paste a he hihistória first
';
revirar;
}cemst parsed = parseHand(raw, ghostModeEl.checked);
setOutputs(parsed);
});clearBtn.addAcontecimentoListaener("click", clearUmll);
copyBtn.addAcontecimentoListaener("click", copyUmctiveOutput);ghostModeEl.addAcontecimentoListaener("mudança", divertimentoctiem () {
cemst raw = emputEl.value.trim();
if (!raw) revirar;
cemst parsed = parseHand(raw, ghostModeEl.checked);
setOutputs(parsed);
});tabMasParans.fouEach(divertimentoctiem (btn) {
btn.addAcontecimentoListaener("click", divertimentoctiem () {
activemeTab(btn.getEmtribute("dema-tab"));
});
});emputEl.addAcontecimentoListaener("keydpossuir", divertimentoctiem (e) {
if ((e.ctrlKey || e.metaKey) && e.key.ParaAbaixarCase() === "enter") {
e.preventDefault();
foumemBtn.click();
}
});activemeTab("social");
})();