Files
jrshikoku/lib/webview/trainIconMap.ts
harukin-expo-dev-env 7004eeefad Add station data, train icon mapping, and train type configuration
- Introduced `stationData.ts` to store station information including names, numbers, and features.
- Created `trainIconMap.ts` for mapping train numbers to their respective image URLs, including dynamic URLs for special trains.
- Added `trainTypeConfig.ts` to define display settings for various train types, including colors and labels for different categories.
2026-03-02 12:38:43 +00:00

456 lines
21 KiB
TypeScript

/**
* 列番号 → 列車画像URL のマッピングデータ
*
* "__anpanman__" は動的URLのセンチネル値。
* WebView inject 側で アンパンマン列車判定 URL に変換される。
* (https://n8n.haruk.in/webhook/anpanman-pictures.png?trainNum=<列番>)
*/
const AP = "__anpanman__";
/** 完全一致マッピング (列番 → URL | "__anpanman__") */
export const TRAIN_ICON_MAP: Record<string, string> = {
// ── しおかぜ ───────────────────────────────────────
// 8000 ノーマル
"2M": "https://storage.haruk.in/s8000nr.png",
"4M": "https://storage.haruk.in/s8000nr.png",
"6M": "https://storage.haruk.in/s8000nr.png",
"14M": "https://storage.haruk.in/s8000nr.png",
"16M": "https://storage.haruk.in/s8000nr.png",
"18M": "https://storage.haruk.in/s8000nr.png",
"26M": "https://storage.haruk.in/s8000nr.png",
"28M": "https://storage.haruk.in/s8000nr.png",
"30M": "https://storage.haruk.in/s8000nr.png",
"1M": "https://storage.haruk.in/s8000nr.png",
"3M": "https://storage.haruk.in/s8000nr.png",
"5M": "https://storage.haruk.in/s8000nr.png",
"13M": "https://storage.haruk.in/s8000nr.png",
"15M": "https://storage.haruk.in/s8000nr.png",
"17M": "https://storage.haruk.in/s8000nr.png",
"25M": "https://storage.haruk.in/s8000nr.png",
"27M": "https://storage.haruk.in/s8000nr.png",
"29M": "https://storage.haruk.in/s8000nr.png",
// 8000 アンパン
"10M": AP,
"22M": AP,
"9M": AP,
"21M": AP,
// 8600
"8M": "https://storage.haruk.in/s8600.png",
"12M": "https://storage.haruk.in/s8600.png",
"20M": "https://storage.haruk.in/s8600.png",
"24M": "https://storage.haruk.in/s8600.png",
"7M": "https://storage.haruk.in/s8600.png",
"11M": "https://storage.haruk.in/s8600.png",
"19M": "https://storage.haruk.in/s8600.png",
"23M": "https://storage.haruk.in/s8600.png",
// ── いしづち ───────────────────────────────────────
// 8000 ノーマル
"1004M": "https://storage.haruk.in/s8000no.png",
"1006M": "https://storage.haruk.in/s8000no.png",
"1014M": "https://storage.haruk.in/s8000no.png",
"1016M": "https://storage.haruk.in/s8000no.png",
"1018M": "https://storage.haruk.in/s8000no.png",
"1026M": "https://storage.haruk.in/s8000no.png",
"1028M": "https://storage.haruk.in/s8000no.png",
"1030M": "https://storage.haruk.in/s8000no.png",
"1001M": "https://storage.haruk.in/s8000no.png",
"1003M": "https://storage.haruk.in/s8000no.png",
"1005M": "https://storage.haruk.in/s8000no.png",
"1013M": "https://storage.haruk.in/s8000no.png",
"1015M": "https://storage.haruk.in/s8000no.png",
"1017M": "https://storage.haruk.in/s8000no.png",
"1025M": "https://storage.haruk.in/s8000no.png",
"1027M": "https://storage.haruk.in/s8000no.png",
"1029M": "https://storage.haruk.in/s8000no.png",
// 8000 アンパン
"1010M": AP,
"1022M": AP,
"1009M": AP,
"1021M": AP,
// 8600
"1008M": "https://storage.haruk.in/s8600_isz.png",
"1012M": "https://storage.haruk.in/s8600_isz.png",
"1020M": "https://storage.haruk.in/s8600_isz.png",
"1024M": "https://storage.haruk.in/s8600_isz.png",
"1007M": "https://storage.haruk.in/s8600_isz.png",
"1011M": "https://storage.haruk.in/s8600_isz.png",
"1019M": "https://storage.haruk.in/s8600_isz.png",
"1023M": "https://storage.haruk.in/s8600_isz.png",
// MEXP
"1092M": "https://storage.haruk.in/s8000nr.png",
"1091M": "https://storage.haruk.in/s8600_isz.png",
// 三桁いしづち アンパン
"1041M": AP,
"1044M": AP,
// 三桁いしづち 8600
"1043M": "https://storage.haruk.in/s8600_isz.png",
"1042M": "https://storage.haruk.in/s8600_isz.png",
"1046M": "https://storage.haruk.in/s8600_isz.png",
// ── 南風 ───────────────────────────────────────────
// 2700 ノーマル
"34D": "https://storage.haruk.in/s2700.png",
"38D": "https://storage.haruk.in/s2700.png",
"40D": "https://storage.haruk.in/s2700.png",
"42D": "https://storage.haruk.in/s2700.png",
"46D": "https://storage.haruk.in/s2700.png",
"50D": "https://storage.haruk.in/s2700.png",
"52D": "https://storage.haruk.in/s2700.png",
"54D": "https://storage.haruk.in/s2700.png",
"58D": "https://storage.haruk.in/s2700.png",
"31D": "https://storage.haruk.in/s2700.png",
"35D": "https://storage.haruk.in/s2700.png",
"39D": "https://storage.haruk.in/s2700.png",
"41D": "https://storage.haruk.in/s2700.png",
"43D": "https://storage.haruk.in/s2700.png",
"47D": "https://storage.haruk.in/s2700.png",
"51D": "https://storage.haruk.in/s2700.png",
"53D": "https://storage.haruk.in/s2700.png",
"55D": "https://storage.haruk.in/s2700.png",
// 2700 アンパン
"32D": AP,
"36D": AP,
"44D": AP,
"48D": AP,
"56D": AP,
"33D": AP,
"37D": AP,
"45D": AP,
"49D": AP,
"57D": AP,
// ── うずしお ───────────────────────────────────────
// 2700
"3004D": "https://storage.haruk.in/s2700_uzu.png",
"3006D": "https://storage.haruk.in/s2700_uzu.png",
"3010D": "https://storage.haruk.in/s2700_uzu.png",
"3014D": "https://storage.haruk.in/s2700_uzu.png",
"3016D": "https://storage.haruk.in/s2700_uzu.png",
"3022D": "https://storage.haruk.in/s2700_uzu.png",
"3028D": "https://storage.haruk.in/s2700_uzu.png",
"3003D": "https://storage.haruk.in/s2700_uzu.png",
"3007D": "https://storage.haruk.in/s2700_uzu.png",
"3013D": "https://storage.haruk.in/s2700_uzu.png",
"3019D": "https://storage.haruk.in/s2700_uzu.png",
"3025D": "https://storage.haruk.in/s2700_uzu.png",
"3031D": "https://storage.haruk.in/s2700_uzu.png",
"3008D": "https://storage.haruk.in/s2700_uzu.png",
"3020D": "https://storage.haruk.in/s2700_uzu.png",
"3026D": "https://storage.haruk.in/s2700_uzu.png",
"3001D": "https://storage.haruk.in/s2700_uzu.png",
"3005D": "https://storage.haruk.in/s2700_uzu.png",
"3011D": "https://storage.haruk.in/s2700_uzu.png",
"3017D": "https://storage.haruk.in/s2700_uzu.png",
"3023D": "https://storage.haruk.in/s2700_uzu.png",
"3029D": "https://storage.haruk.in/s2700_uzu.png",
// 2600
"3002D": AP,
"3012D": AP,
"3018D": AP,
"3024D": AP,
"3030D": AP,
"3009D": AP,
"3015D": AP,
"3021D": AP,
"3027D": AP,
"3033D": AP,
// ── マリンライナー ─────────────────────────────────
"3104M": "https://storage.haruk.in/s5001.png",
"3106M": "https://storage.haruk.in/s5001.png",
"3108M": "https://storage.haruk.in/s5001.png",
"3110M": "https://storage.haruk.in/s5001.png",
"3112M": "https://storage.haruk.in/s5001.png",
"3114M": "https://storage.haruk.in/s5001.png",
"3116M": "https://storage.haruk.in/s5001.png",
"3118M": "https://storage.haruk.in/s5001.png",
"3120M": "https://storage.haruk.in/s5001.png",
"3122M": "https://storage.haruk.in/s5001.png",
"3124M": "https://storage.haruk.in/s5001.png",
"3126M": "https://storage.haruk.in/s5001.png",
"3128M": "https://storage.haruk.in/s5001.png",
"3130M": "https://storage.haruk.in/s5001.png",
"3132M": "https://storage.haruk.in/s5001.png",
"3134M": "https://storage.haruk.in/s5001.png",
"3136M": "https://storage.haruk.in/s5001.png",
"3138M": "https://storage.haruk.in/s5001.png",
"3140M": "https://storage.haruk.in/s5001.png",
"3142M": "https://storage.haruk.in/s5001.png",
"3144M": "https://storage.haruk.in/s5001.png",
"3146M": "https://storage.haruk.in/s5001.png",
"3148M": "https://storage.haruk.in/s5001.png",
"3150M": "https://storage.haruk.in/s5001.png",
"3152M": "https://storage.haruk.in/s5001.png",
"3154M": "https://storage.haruk.in/s5001.png",
"3156M": "https://storage.haruk.in/s5001.png",
"3158M": "https://storage.haruk.in/s5001.png",
"3160M": "https://storage.haruk.in/s5001.png",
"3162M": "https://storage.haruk.in/s5001.png",
"3164M": "https://storage.haruk.in/s5001.png",
"3166M": "https://storage.haruk.in/s5001.png",
"3168M": "https://storage.haruk.in/s5001.png",
"3170M": "https://storage.haruk.in/s5001.png",
"3105M": "https://storage.haruk.in/s5001.png",
"3107M": "https://storage.haruk.in/s5001.png",
"3109M": "https://storage.haruk.in/s5001.png",
"3111M": "https://storage.haruk.in/s5001.png",
"3113M": "https://storage.haruk.in/s5001.png",
"3115M": "https://storage.haruk.in/s5001.png",
"3117M": "https://storage.haruk.in/s5001.png",
"3119M": "https://storage.haruk.in/s5001.png",
"3121M": "https://storage.haruk.in/s5001.png",
"3123M": "https://storage.haruk.in/s5001.png",
"3125M": "https://storage.haruk.in/s5001.png",
"3127M": "https://storage.haruk.in/s5001.png",
"3129M": "https://storage.haruk.in/s5001.png",
"3131M": "https://storage.haruk.in/s5001.png",
"3133M": "https://storage.haruk.in/s5001.png",
"3135M": "https://storage.haruk.in/s5001.png",
"3137M": "https://storage.haruk.in/s5001.png",
"3139M": "https://storage.haruk.in/s5001.png",
"3141M": "https://storage.haruk.in/s5001.png",
"3143M": "https://storage.haruk.in/s5001.png",
"3145M": "https://storage.haruk.in/s5001.png",
"3147M": "https://storage.haruk.in/s5001.png",
"3149M": "https://storage.haruk.in/s5001.png",
"3151M": "https://storage.haruk.in/s5001.png",
"3153M": "https://storage.haruk.in/s5001.png",
"3155M": "https://storage.haruk.in/s5001.png",
"3157M": "https://storage.haruk.in/s5001.png",
"3159M": "https://storage.haruk.in/s5001.png",
"3161M": "https://storage.haruk.in/s5001.png",
"3163M": "https://storage.haruk.in/s5001.png",
"3165M": "https://storage.haruk.in/s5001.png",
"3167M": "https://storage.haruk.in/s5001.png",
"3169M": "https://storage.haruk.in/s5001.png",
"3175M": "https://storage.haruk.in/s5001.png",
// マリンライナー(快速)
"3102M": "https://storage.haruk.in/s5001k.png",
"3101M": "https://storage.haruk.in/s5001k.png",
"3103M": "https://storage.haruk.in/s5001k.png",
"3171M": "https://storage.haruk.in/s5001k.png",
"3173M": "https://storage.haruk.in/s5001k.png",
// ── サンライズ瀬戸 ─────────────────────────────────
"5032M": "https://storage.haruk.in/w285.png",
"5031M": "https://storage.haruk.in/w285.png",
"8041M": "https://storage.haruk.in/w285.png",
"8031M": "https://storage.haruk.in/w285.png",
// ── 宇和海 ─────────────────────────────────────────
// 2000 ノーマル
"1052D": "https://storage.haruk.in/s2000_uwa.png",
"1054D": "https://storage.haruk.in/s2000_uwa.png",
"1056D": "https://storage.haruk.in/s2000_uwa.png",
"1060D": "https://storage.haruk.in/s2000_uwa.png",
"1062D": "https://storage.haruk.in/s2000_uwa.png",
"1064D": "https://storage.haruk.in/s2000_uwa.png",
"1068D": "https://storage.haruk.in/s2000_uwa.png",
"1070D": "https://storage.haruk.in/s2000_uwa.png",
"1072D": "https://storage.haruk.in/s2000_uwa.png",
"1076D": "https://storage.haruk.in/s2000_uwa.png",
"1078D": "https://storage.haruk.in/s2000_uwa.png",
"1080D": "https://storage.haruk.in/s2000_uwa.png",
"1082D": "https://storage.haruk.in/s2000_uwa.png",
"1051D": "https://storage.haruk.in/s2000_uwa.png",
"1055D": "https://storage.haruk.in/s2000_uwa.png",
"1057D": "https://storage.haruk.in/s2000_uwa.png",
"1061D": "https://storage.haruk.in/s2000_uwa.png",
"1063D": "https://storage.haruk.in/s2000_uwa.png",
"1065D": "https://storage.haruk.in/s2000_uwa.png",
"1069D": "https://storage.haruk.in/s2000_uwa.png",
"1071D": "https://storage.haruk.in/s2000_uwa.png",
"1073D": "https://storage.haruk.in/s2000_uwa.png",
"1075D": "https://storage.haruk.in/s2000_uwa.png",
"1077D": "https://storage.haruk.in/s2000_uwa.png",
"1079D": "https://storage.haruk.in/s2000_uwa.png",
"1081D": "https://storage.haruk.in/s2000_uwa.png",
// 2000 アンパン
"1058D": AP,
"1066D": AP,
"1074D": AP,
"1053D": AP,
"1059D": AP,
"1067D": AP,
// ── しまんと ───────────────────────────────────────
"2002D": "https://storage.haruk.in/s2000_smn.png",
"2004D": "https://storage.haruk.in/s2000_smn.png",
"2001D": "https://storage.haruk.in/s2000_smn.png",
"2003D": "https://storage.haruk.in/s2000_smn.png",
// ── あしずり ───────────────────────────────────────
// 2000
"2074D": "https://storage.haruk.in/s2000_smn.png",
"2076D": "https://storage.haruk.in/s2000_smn.png",
"2080D": "https://storage.haruk.in/s2000_smn.png",
"2082D": "https://storage.haruk.in/s2000_smn.png",
"2071D": "https://storage.haruk.in/s2000_smn.png",
"2073D": "https://storage.haruk.in/s2000_smn.png",
"2079D": "https://storage.haruk.in/s2000_smn.png",
"2081D": "https://storage.haruk.in/s2000_smn.png",
// 2700
"2072D": "https://storage.haruk.in/s2700_asi.png",
"2078D": "https://storage.haruk.in/s2700_asi.png",
"2084D": "https://storage.haruk.in/s2700_asi.png",
"2075D": "https://storage.haruk.in/s2700_asi.png",
"2077D": "https://storage.haruk.in/s2700_asi.png",
"2083D": "https://storage.haruk.in/s2700_asi.png",
// ── 剣山 ───────────────────────────────────────────
"4002D": "https://storage.haruk.in/s185tu.png",
"4004D": "https://storage.haruk.in/s185tu.png",
"4006D": "https://storage.haruk.in/s185tu.png",
"4001D": "https://storage.haruk.in/s185tu.png",
"4003D": "https://storage.haruk.in/s185tu.png",
"4005D": "https://storage.haruk.in/s185tu.png",
"4007D": "https://storage.haruk.in/s185tu.png",
// ── よしのがわトロッコ ─────────────────────────────
"8452D": "https://storage.haruk.in/s185to_ai.png",
"8451D": "https://storage.haruk.in/s185to_ai.png",
// ── 岡山高松/琴平アントロ ──────────────────────────
"8176D": "https://storage.haruk.in/s32to4.png",
"8179D": "https://storage.haruk.in/s32to4.png",
"8277D": "https://storage.haruk.in/s32to4.png",
"8278D": "https://storage.haruk.in/s32to4.png",
// ── 千年ものがたり ─────────────────────────────────
"8021D": "https://storage.haruk.in/s185mm1.png",
"8022D": "https://storage.haruk.in/s185mm1.png",
// ── 夜明けものがたり ───────────────────────────────
"8082D": "https://storage.haruk.in/s185ym1.png",
"8083D": "https://storage.haruk.in/s185ym1.png",
"8073D": "https://storage.haruk.in/s185ym1.png",
"8074D": "https://storage.haruk.in/s185ym1.png",
// ── ラ・マルどこまでも ─────────────────────────────
"9253M": "https://storage.haruk.in/w213w.png",
"9256M": "https://storage.haruk.in/w213w.png",
// ── 貨物 ───────────────────────────────────────────
"74": "https://storage.haruk.in/ef210a.png",
"75": "https://storage.haruk.in/ef210a.png",
"70": "https://storage.haruk.in/ef210a.png",
"71": "https://storage.haruk.in/ef210a.png",
"73": "https://storage.haruk.in/ef210a.png",
"76": "https://storage.haruk.in/ef210a.png",
"3070": "https://storage.haruk.in/ef210a.png",
"3071": "https://storage.haruk.in/ef210a.png",
"3072": "https://storage.haruk.in/ef210a.png",
"3073": "https://storage.haruk.in/ef210a.png",
"3076": "https://storage.haruk.in/ef210a.png",
"3077": "https://storage.haruk.in/ef210a.png",
"3078": "https://storage.haruk.in/ef210a.png",
"3079": "https://storage.haruk.in/ef210a.png",
"8070": "https://storage.haruk.in/ef210a.png",
"8071": "https://storage.haruk.in/ef210a.png",
"8072": "https://storage.haruk.in/ef210a.png",
"8077": "https://storage.haruk.in/ef210a.png",
// ── 伊予灘ものがたり ───────────────────────────────
"8091D": "https://storage.haruk.in/s185iyor.png",
"8093D": "https://storage.haruk.in/s185iyor.png",
"8092D": "https://storage.haruk.in/s185iyoy.png",
"8094D": "https://storage.haruk.in/s185iyoy.png",
// ── 高徳線・徳島線・牟岐線・鳴門線 キハ40・47 ────
"4303D": "https://storage.haruk.in/s40.png",
"371D": "https://storage.haruk.in/s40.png",
"316D": "https://storage.haruk.in/s40.png",
"362D": "https://storage.haruk.in/s40.png",
"4376D": "https://storage.haruk.in/s40.png",
"951D": "https://storage.haruk.in/s40.png",
"953D": "https://storage.haruk.in/s40.png",
"955D": "https://storage.haruk.in/s40.png",
"973D": "https://storage.haruk.in/s40.png",
"975D": "https://storage.haruk.in/s40.png",
"977D": "https://storage.haruk.in/s40.png",
"979D": "https://storage.haruk.in/s40.png",
"981D": "https://storage.haruk.in/s40.png",
"950D": "https://storage.haruk.in/s40.png",
"968D": "https://storage.haruk.in/s40.png",
"970D": "https://storage.haruk.in/s40.png",
"972D": "https://storage.haruk.in/s40.png",
"974D": "https://storage.haruk.in/s40.png",
"976D": "https://storage.haruk.in/s40.png",
"980D": "https://storage.haruk.in/s40.png",
"982D": "https://storage.haruk.in/s40.png",
// ── 1000形 ─────────────────────────────────────────
"4311D": "https://storage.haruk.in/s1000.png",
"363D": "https://storage.haruk.in/s1000.png",
"356D": "https://storage.haruk.in/s1000.png",
"4374D": "https://storage.haruk.in/s1000.png",
"433D": "https://storage.haruk.in/s1000.png",
"4447D": "https://storage.haruk.in/s1000.png",
"451D": "https://storage.haruk.in/s1000.png",
"450D": "https://storage.haruk.in/s1000.png",
"4458D": "https://storage.haruk.in/s1000.png",
"474D": "https://storage.haruk.in/s1000.png",
// ── 1200形 ─────────────────────────────────────────
"4301D": "https://storage.haruk.in/s1200n.png",
"4327D": "https://storage.haruk.in/s1200n.png",
"4329D": "https://storage.haruk.in/s1200n.png",
"4343D": "https://storage.haruk.in/s1200n.png",
"353D": "https://storage.haruk.in/s1200n.png",
"355D": "https://storage.haruk.in/s1200n.png",
"367D": "https://storage.haruk.in/s1200n.png",
"310D": "https://storage.haruk.in/s1200n.png",
"4326D": "https://storage.haruk.in/s1200n.png",
"4334D": "https://storage.haruk.in/s1200n.png",
"4342D": "https://storage.haruk.in/s1200n.png",
"358D": "https://storage.haruk.in/s1200n.png",
"364D": "https://storage.haruk.in/s1200n.png",
"4453D": "https://storage.haruk.in/s1200n.png",
"4455D": "https://storage.haruk.in/s1200n.png",
"4457D": "https://storage.haruk.in/s1200n.png",
"463D": "https://storage.haruk.in/s1200n.png",
"475D": "https://storage.haruk.in/s1200n.png",
"477D": "https://storage.haruk.in/s1200n.png",
"485D": "https://storage.haruk.in/s1200n.png",
"4430D": "https://storage.haruk.in/s1200n.png",
"434D": "https://storage.haruk.in/s1200n.png",
"438D": "https://storage.haruk.in/s1200n.png",
"4460D": "https://storage.haruk.in/s1200n.png",
"4464D": "https://storage.haruk.in/s1200n.png",
"4466D": "https://storage.haruk.in/s1200n.png",
"478D": "https://storage.haruk.in/s1200n.png",
"484D": "https://storage.haruk.in/s1200n.png",
"957D": "https://storage.haruk.in/s1200n.png",
"4959D": "https://storage.haruk.in/s1200n.png",
"4963D": "https://storage.haruk.in/s1200n.png",
"4967D": "https://storage.haruk.in/s1200n.png",
"4971D": "https://storage.haruk.in/s1200n.png",
"952D": "https://storage.haruk.in/s1200n.png",
"4954D": "https://storage.haruk.in/s1200n.png",
"4958D": "https://storage.haruk.in/s1200n.png",
"4962D": "https://storage.haruk.in/s1200n.png",
"4966D": "https://storage.haruk.in/s1200n.png",
// ── 半定期臨時 ─────────────────────────────────────
"9174M": "https://storage.haruk.in/s5001.png",
"9395D": "https://storage.haruk.in/s1500.png",
};
/** 正規表現パターンマッチング (完全一致で未ヒットの場合に評価) */
export const TRAIN_ICON_REGEX: Array<{ pattern: string; url: string }> = [
// 高徳線 普通
{ pattern: "^(4|5)3\\d\\dD$", url: "https://storage.haruk.in/s1500.png" },
{ pattern: "^3\\d\\dD$", url: "https://storage.haruk.in/s1500.png" },
// 徳島線 普通
{ pattern: "^(4|5)4\\d\\dD$", url: "https://storage.haruk.in/s1500.png" },
{ pattern: "^4\\d\\dD$", url: "https://storage.haruk.in/s1500.png" },
// 鳴門線 普通
{
pattern: "^(4|5)9(5|6|7|8)\\dD$",
url: "https://storage.haruk.in/s1500.png",
},
{ pattern: "^9(5|6|7|8)\\dD$", url: "https://storage.haruk.in/s1500.png" },
];