mtgetk/mtgdesign.ts

245 lines
5.1 KiB
TypeScript
Raw Normal View History

2019-09-02 15:49:41 +00:00
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, "{")
.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);
}