diff --git a/frontend/src/views/UserCP.vue b/frontend/src/views/UserCP.vue index 0e53332..5027f97 100644 --- a/frontend/src/views/UserCP.vue +++ b/frontend/src/views/UserCP.vue @@ -61,6 +61,97 @@ export default { this.goHome() } }) + }, + + parseDecklist() { + let fileContent = `--Generated By FF Decks (www.ffdecks.com)-- +Deck Name: Ashe turbo +Created by: hawks1997 + + +Forward(26): +3 Garland (6-002) +3 Rain (8-134) +3 Garnet (3-129) +2 Zidane (8-115) +3 Ashe (2-121) +3 Basch (2-014) +3 Steiner (4-129) +3 Vivi (3-017) +3 Cecil (2-129) + +Summon(8): +2 Cuchulainn, the Impure (2-133) +2 Bahamut (4-016) +1 Phoenix (5-019) +3 Leviathan (6-125) + +Backup(16): +2 Sage (2-005) +2 Vermilion Bird l'Cie Caetuna (6-010) +2 Yotsuyu (8-020) +2 Rasler (5-166) +2 Red Mage (1-003) +3 Hilda (6-122) +3 Astrologian (2-130) + +Monster(0):` + + // select the line containing 'deck name:' + // and its successor + let metaRE = /^deck name: (.+)$[\s]*?^(.+)$/im + let metaData = metaRE.exec(fileContent) + + // extract matches + let deckData = { + name: metaData[1], + note: metaData[2], + cards: [] + } + + // select all lines containing card serial numbers + let cardLinesRE = /^.*\b\d-\d{3}[A-Z]?\b.*$/gm + let cardLines = fileContent.match(cardLinesRE) + + cardLines.forEach(cardLine => { + // extract serial (guaranteed to be in here!) + let serialRE = /\b(\d-\d{3})[A-Z]?\b/i + let serial = serialRE.exec(cardLine)[1] + + // strip out serial number + cardLine = cardLine.replace(serialRE, '') + + let countREs = [ + // prioritize a count with "times" symbol *, x, × + /\b([1-3])(?:[*×]|[x]\b)/, + /(?:[*×]|\b[x])([1-3])\b/, + // next priority: with whitespace + /\s+([1-3])\s+/, + /\s+([1-3])\b/, + /\b([1-3])\s+/, + // least priority: any single digit + /\b([1-3])\b/ + ] + + // fallback value + let count = '0' + for (let i = 0; i < countREs.length; i++) { + let data = countREs[i].exec(cardLine) + + if (data) { + count = data[1] + break + } + } + + // push card data into deck + deckData.cards.push({ + serial: serial, + count: count + }) + }) + + console.log(deckData) } }, @@ -69,6 +160,7 @@ export default { }, mounted() { + this.parseDecklist() axios .post('/user/info', {