export interface MDCard { "card-number": string; "card-total": string; "card-set": string; language: string; "card-title": string; "mana-cost": string; "super-type": string; type: string; "sub-type": string; "text-size": string; rarity: string; artist?: string; power?: string; toughness?: string; loyalty?: string; artwork?: string; designer?: string; "card-template"?: string; "card-border"?: string; "card-overlay"?: string; "land-overlay"?: string; watermark?: string; "pt-color"?: string; "card-layout"?: string; "color-indicator"?: string; "set-symbol"?: string; centered?: boolean; "large-size"?: boolean; shiftrulestext?: boolean; colorshifted?: boolean; foil?: boolean; lighten?: boolean; "rules-text": string; "flavor-text": string; } const urlbase = "https://mtg.design/render?"; export function getCardData(data: MDCard) { var card = ""; var manaCost = data["mana-cost"] .toUpperCase() .replace(/([\d\w])\/([\d\w])/g, "<$1/$2>") .replace(/(\d\d+)/g, "{$1}") .replace(/(\w)(?!\/)/g, "{$1}") .replace(/\{(\w)\}\>/g, "$1>") .replace(/\{(\d)\}\{(\d)\}/g, "$1$2") .replace(/\/g, "}"); var identity, border, frame, color = 0; if (/W/.test(manaCost)) color += 1; if (/U/.test(manaCost)) color += 2; if (/B/.test(manaCost)) color += 4; if (/R/.test(manaCost)) color += 8; if (/G/.test(manaCost)) color += 16; switch (color) { case 0: border = "C"; frame = "C"; break; case 1: border = "W"; frame = "W"; break; case 2: border = "U"; frame = "U"; break; case 4: border = "B"; frame = "B"; break; case 8: border = "R"; frame = "R"; break; case 16: border = "G"; frame = "G"; break; case 3: border = "WU"; frame = "Gld"; if (/[WUBRG]\/[WUBRG]/.test(manaCost)) frame = border; break; case 5: border = "WB"; frame = "Gld"; if (/[WUBRG]\/[WUBRG]/.test(manaCost)) frame = border; break; case 6: border = "UB"; frame = "Gld"; if (/[WUBRG]\/[WUBRG]/.test(manaCost)) frame = border; break; case 9: border = "RW"; frame = "Gld"; if (/[WUBRG]\/[WUBRG]/.test(manaCost)) frame = border; break; case 10: border = "UR"; frame = "Gld"; if (/[WUBRG]\/[WUBRG]/.test(manaCost)) frame = border; break; case 12: border = "BR"; frame = "Gld"; if (/[WUBRG]\/[WUBRG]/.test(manaCost)) frame = border; break; case 17: border = "GW"; frame = "Gld"; if (/[WUBRG]\/[WUBRG]/.test(manaCost)) frame = border; break; case 18: border = "GU"; frame = "Gld"; if (/[WUBRG]\/[WUBRG]/.test(manaCost)) frame = border; break; case 20: border = "BG"; frame = "Gld"; if (/[WUBRG]\/[WUBRG]/.test(manaCost)) frame = border; break; case 24: border = "RG"; frame = "Gld"; if (/[WUBRG]\/[WUBRG]/.test(manaCost)) frame = border; break; case 7: case 11: case 13: case 14: case 15: case 19: case 21: case 22: case 23: case 25: case 26: case 27: case 28: case 29: case 30: case 31: border = "Gld"; frame = "Gld"; } var key = [ "card-number", "card-total", "card-set", "language", "card-title", "mana-cost", "super-type", "type", "sub-type", "text-size", "rarity", "artist", "power", "toughness", "loyalty", "artwork", "designer", "card-template", "card-border", "card-overlay", "land-overlay", "watermark", "pt-color", "card-layout", "color-indicator", "set-symbol" ]; var toggle = [ "centered", "large-size", "shiftrulestext", "colorshifted", "foil", "lighten" ]; for (var i = 0; i < key.length; i++) { var value = data[key[i]]; if (value) { card += "&" + key[i] + "=" + encodeURIComponent(value.replace(/\s+$/, "")); } } for (var i = 0; i < toggle.length; i++) { var value = data[toggle[i]] == true; if (value) { card += "&" + toggle[i] + "=true"; } } if (data.type == "Planeswalker") { card += "&pw-size=" + data["pw-size"]; //TODO Proper pw card += "&rules-text=" + data["loyalty-ability-1"] + ": " + encodeURIComponent(data["rules-text"] + " "); /* for (var i = 2; i <= $("#pw-size").val(); i++) { card += "&pw-text" + i + "=" + $("#loyalty-ability-" + i).val() + ": " + encodeURIComponent($("#planeswalker-text-" + i).val() + " "); } */ } else { card += "&rules-text=" + encodeURIComponent(data["rules-text"]); card += "&flavor-text=" + encodeURIComponent(data["flavor-text"]); } card += "&card-template=" + encodeURIComponent(frame) + "&card-accent=" + encodeURIComponent(border); card += "&edit=false"; return urlbase + card.substring(1); }