Merge commit 'f0c5402050fef1c949b1b82a89a9df220cb24b9f' into patch/6.x

This commit is contained in:
harukin-expo-dev-env 2025-03-22 11:34:19 +00:00
commit 8c75e06ac1
14 changed files with 546 additions and 253 deletions

View File

@ -27,15 +27,16 @@ export function AppContainer() {
const [fontLoaded, error] = useFonts({
"JR-Nishi": require("./assets/fonts/jr-nishi.otf"),
Zou: require("./assets/fonts/DelaGothicOne-Regular.ttf"),
"JNR-font": require("./assets/fonts/JNRfont_pict.ttf"),
});
return (
<NavigationContainer ref={navigationRef}>
<Tab.Navigator
tabBarOptions={{ keyboardHidesTabBar: Platform.OS === "android" }}
initialRouteName="topMenu"
screenOptions={{
lazy: false,
animation: "shift",
tabBarHideOnKeyboard: Platform.OS === "android",
}}
detachInactiveScreens={false}
lazy={false}

2
Top.js
View File

@ -6,7 +6,7 @@ import TrainBase from "./components/trainbaseview";
import HowTo from "./howto";
import News from "./components/news";
import TrainMenu from "./components/trainMenu";
import FavoriteList from "./components/FavoriteList";
import { FavoriteList } from "./components/FavoriteList";
import { optionData } from "./lib/stackOption";
import { useCurrentTrain } from "./stateBox/useCurrentTrain";
import { useTrainMenu } from "./stateBox/useTrainMenu";

Binary file not shown.

View File

@ -0,0 +1,94 @@
◆国鉄っぽいフォントぽいフォントピクトfor Win(xp)
 かつて日本国有鉄道(国鉄)の吊り下げ式駅名標や駅の案内で使用されていたもピクトグラム
(プラスアルファ)を搭載したフォントです。
 東海地方~四国で広く使用されていたものを見本としています。
◆作成ソフト
TTEditにより作成しています。
◆インストールの方法
 「スタート」から設定、コントロールパネルを開き、さらに「フォント」フォルダを開きます。
ファイルメニューから「新しいフォントのインストール」で、フォントを選択のうえインストール
してください。
 また、フォントファイルを適宜の場所に解凍し、上記「フォント」フォルダを開いたうえで、
ドラッグアンドドロップする方法でもインストールできます。
◆収録文字・記号一覧
左側が入力文字、右側が表示されるピクト類です。
0…公衆電話
1…エスカレーター(のぼり)
2…エスカレーター(くだり)
3…階段(おり)
4…階段(のぼり)
B…国鉄バスつばめマーク(つばめ左向き)
C…国鉄バスつばめマーク(つばめ右向き)
G…グリーン車マーク
J…国鉄「JNR」ロゴ
L…L特急マーク
M…公衆便所(男性)
S…シルバーシート
W…公衆便所(女性)
い…手荷物一時預かり
お…大阪市内の駅マーク
き…京都市内の駅マーク
く…北九州市内の駅マーク
け…禁煙マーク
こ…神戸市内の駅マーク
さ…札幌市内の駅マーク
し…新幹線
せ…仙台市内の駅マーク
た…タクシー
つ…つばめマーク(つばめ左向き)
ツ…つばめマーク(つばめ右向き)
て…手荷物預かり
で…国電
と…東京都区内の駅マーク
な…名古屋市内の駅マーク
は…国鉄ハイウェイバス
ば…路線バス
ひ…広島市内の駅マーク
ふ…福岡市内の駅マーク
ぶ…寝台急行マーク
ブ…寝台特急マーク
や…東京山手線内の駅マーク
ゆ…温泉マーク
よ…横浜市内の駅マーク
れ…レール
ろ…コインロッカー
←…矢印(左向き)
→…矢印(右向き)
↑…矢印(上向き)
↓…矢印(下向き)
◆ご使用に当たってのお願い
 フォントは無料にて配布しています。商用利用には耐えられない出来だと思いますが、ご自身
の責任においてご自由にお使いください。
 インストール及び使用にあたっても、ご自身の責任においてご使用ください。インストールや
使用によって蒙る損害については、当方は一切責任を負いかねます。
◆Windows Vistaをお使いの方へ
 Windows Vistaをお使いの方で、フォントのエッジを滑らかにしたい方は、スクリーンフ
ォントの縁を滑らかにする方法を「標準」にしてください。Clear Typeだと滑らかに表示されない
場合があります。
 ・標準への変更方法
 1.ウィンドウ上で右クリックをします。
 2.現れたメニュー中の「個人設定」を選択。
 3.続いて「ウィンドウの色とデザイン」を選択。
 4.一番下の「「デザイン」プロパティを開きます」をクリックします。
 5.現れた別ウィンドウの「効果」ボタンをクリック。
 「次の方法でスクリーンフォントの縁を滑らかにする」のところを「Clear Type」から「標
   準」にします。
 ※これでこのフォントについてはより滑らかに表示されますが、他のフォントが滑らかに表示さ
れない場合が多くなります。
◆フォント自体についての若干のご説明
 このフォントは、前述のとおり、国鉄において東海地区から四国地区の吊り下げ式駅名標や各種
案内表示で使用されたものを見本としています。もともとは、「鉄道掲示基準規程」という通達に
定められているピクトグラムです。
--------------------------------------
作成者Yokochan
ホームページ「旅と鉄の盲腸」http://travelcecum.xsrv.jp/font.htm
連絡先travel_cecum@yahoo.co.jp

View File

@ -923,7 +923,7 @@
"585D":"徳島,発,22:55#阿波富田,発,22:58#二軒屋,発,23:01#文化の森,発,23:03#地蔵橋,発,23:07#中田,発,23:11#南小松島,発,23:15#阿波赤石,発,23:19#立江,発,23:22#羽ノ浦,発,23:26#西原,発,23:29#阿波中島,発,23:32#阿南,着,23:36#",
// 臨時列車
"9395D":"高松,発,22:10#昭和町,発,22:12#栗林公園北口,発,22:15#栗林,発,22:18#木太町,発,22:22#屋島,発,22:26#古高松南,発,22:38#八栗口,発,22:41#讃岐牟礼,発,22:44#志度,発,22:48#オレンジタウン,発,22:52#造田,発,22:56#神前,発,22:59#讃岐津田,発,23:05#鶴羽,発,23:09#丹生,発,23:14#三本松,着,23:18#WEST LIVE TOUR 2025臨/三本松,提,https://www.jr-shikoku.co.jp/03_news/pdf/20250228_20250323_west-live-tour-2025.pdf#普通 三本松行,提,https://www.jr-shikoku.co.jp/03_news/pdf/20250228_20250323_west-live-tour-2025.pdf#",
"9174M":"高松,発,22:00#坂出,発,22:16#児島,発,22:39#茶屋町,発,22:55#早島,発,22:59#妹尾,発,23:03#岡山,着,23:12#WEST LIVE TOUR 2025臨,提,https://www.jr-shikoku.co.jp/03_news/pdf/20250228_20250323_west-live-tour-2025.pdf#快速マリンライナー94号 岡山行,提,https://www.jr-shikoku.co.jp/03_news/pdf/20250228_20250323_west-live-tour-2025.pdf#",
"9395D":"WEST LIVE TOUR 2025臨,提,https://www.jr-shikoku.co.jp/03_news/pdf/20250228_20250323_west-live-tour-2025.pdf#高松,発,22:10#昭和町,発,22:12#栗林公園北口,発,22:15#栗林,発,22:18#木太町,発,22:22#屋島,発,22:26#古高松南,発,22:38#八栗口,発,22:41#讃岐牟礼,発,22:44#志度,発,22:48#オレンジタウン,発,22:52#造田,発,22:56#神前,発,22:59#讃岐津田,発,23:05#鶴羽,発,23:09#丹生,発,23:14#三本松,着,23:18#",
"9174M":"WEST LIVE TOUR 2025臨,提,https://www.jr-shikoku.co.jp/03_news/pdf/20250228_20250323_west-live-tour-2025.pdf#高松,発,22:00#坂出,発,22:16#児島,発,22:39#茶屋町,発,22:55#早島,発,22:59#妹尾,発,23:03#岡山,着,23:12#",
}

View File

@ -189,7 +189,8 @@ export const EachTrainInfoCore = ({
const count = position * 44 - 50;
// 0.5秒待機してからスクロール
setTimeout(
() => scrollHandlers.ref.current?.scrollTo({ y: count, animated: true }),
() =>
scrollHandlers.ref.current?.scrollTo({ y: count, animated: true }),
400
);
}
@ -291,7 +292,7 @@ export const EachTrainInfoCore = ({
} else if (pos[1] == "児島" && pos[0] == "宇多津") {
setCurrentPosition(["Y09", "M12"]);
return;
}else if (pos[0] == "伊予若宮" && pos[1] == "伊予白滝") {
} else if (pos[0] == "伊予若宮" && pos[1] == "伊予白滝") {
setCurrentPosition(["S18", "S14"]);
return;
} else if (pos[0] == "伊予白滝" && pos[1] == "伊予若宮") {
@ -380,13 +381,6 @@ export const EachTrainInfoCore = ({
}
};
const headerItem = {
currentTrainData,
currentPosition,
nearTrainIDList,
openTrainInfo,
navigate,
};
return (
<View
style={{
@ -419,6 +413,7 @@ export const EachTrainInfoCore = ({
tailStation={tailStation}
navigate={navigate}
from={from}
scrollHandlers={scrollHandlers}
/>
<DynamicHeaderScrollView
@ -431,8 +426,28 @@ export const EachTrainInfoCore = ({
maxHeight: isLandscape ? height - 94 : (height / 100) * 70,
},
}}
shortHeader={<ShortHeader {...headerItem} />}
longHeader={<LongHeader {...headerItem} />}
shortHeader={
<ShortHeader
{...{
currentTrainData,
currentPosition,
nearTrainIDList,
openTrainInfo,
navigate,
}}
/>
}
longHeader={
<LongHeader
{...{
currentTrainData,
currentPosition,
nearTrainIDList,
openTrainInfo,
navigate,
}}
/>
}
topStickyContent={
<ScrollStickyContent
{...{ currentTrainData, showThrew, setShowThrew, haveThrough }}

View File

@ -7,6 +7,8 @@ import { migrateTrainName } from "../../../lib/eachTrainInfoCoreLib/migrateTrain
import { TrainIconStatus } from "./trainIconStatus";
import { TrainViewIcon } from "./trainViewIcon";
import { OneManText } from "./HeaderTextParts/OneManText";
import { customTrainDataDetector } from "@/components/custom-train-data";
import { InfogramText } from "@/components/ActionSheetComponents/EachTrainInfoCore/HeaderTextParts/InfogramText";
type Props = {
data: { trainNum: string; limited: string };
@ -18,10 +20,11 @@ type Props = {
navigate: any;
from: string;
fontLoaded: boolean;
scrollHandlers: any;
};
const textConfig: TextStyle = {
fontSize: 18,
fontSize: 17,
fontWeight: "bold",
color: "white",
};
@ -35,105 +38,87 @@ export const HeaderText: FC<Props> = ({
tailStation,
navigate,
from,
scrollHandlers
}) => {
const { limited, trainNum } = data;
// 貨物の判定
const freightDetect = (num:string)=>{
switch(num){
case "71":
return "貨物 東京(タ)→高松(タ)";
case "73":
case "75":
return "貨物 大阪(タ)→高松(タ)";
case "3079":
return "貨物 高松(タ)→伊予三島";
case "3071":
case "3077":
return "貨物 高松(タ)→新居浜";
case "3073":
return "貨物 高松(タ)→松山貨物";
case "70":
return "貨物 高松(タ)→東京(タ)";
case "74":
case "76":
return "貨物 高松(タ)→大阪(タ)";
case "3078":
return "貨物 伊予三島→高松(タ)";
case "3070":
return "貨物 新居浜→高松(タ)";
case "3076":
return "貨物 新居浜→高松(タ)";
case "3072":
return "貨物 松山貨物→高松(タ)";
case "9070":
return "貨物 臨時";
default:
return false;
}
}
// 列車名、種別、フォントの取得
const [typeName, trainName, fontAvailable] = useMemo(() => {
if (!limited) return "";
const limitedArray = limited.split(":");
const [type, fontAvailable] = (() => {
const d = getType(limitedArray[0]);
const [typeName, trainName, fontAvailable, isOneMan, infogram] =
useMemo(() => {
const customTrainData = customTrainDataDetector(trainNum);
const [type, fontAvailable, isOneMan] = (() => {
switch (customTrainData.type) {
case "LTDEXP":
return ["特急", true, false];
case "Rapid":
return ["快速", true, false];
case "Normal":
return ["普通", true, false];
case "OneManRapid":
return ["快速", true, true];
case "OneMan":
return ["普通", true, true];
case "NightLTDEXP":
return ["特急", true, false];
case "SPCL":
return ["臨時", false, false];
case "SPCL_EXP":
return ["臨時特急", false, false];
case "SPCL_Rapid":
return ["臨時快速", true, false];
case "SPCL_Normal":
return ["臨時", true, false];
case "Freight":
return ["貨物", false, false];
case "Other":
switch (true) {
case !!trainNum.includes("T"):
return ["単機回送", false, false];
case !!trainNum.includes("R"):
case !!trainNum.includes("E"):
case !!trainNum.includes("L"):
case !!trainNum.includes("A"):
case !!trainNum.includes("B"):
return ["回送", false, false];
case !!trainNum.includes("H"):
return ["試運転", false, false];
}
return ["", false, false];
}
})();
switch (true) {
case !!d:
return [d, true];
case !!trainNum.includes("T"):
return ["単機回送", false];
case !!trainNum.includes("R"):
case !!trainNum.includes("E"):
case !!trainNum.includes("L"):
case !!trainNum.includes("A"):
case !!trainNum.includes("B"):
return ["回送", false];
case !!trainNum.includes("H"):
return ["試運転", false];
case !!trainNum.match("D"):
case !!trainNum.match("M"):
return ["普通", true];
case !!freightDetect(trainNum):
return [freightDetect(trainNum), false];
case customTrainData.trainName !== "":
// 特急の場合は、列車名を取得
// 列番対称データがある場合はそれから列車番号を取得
const distance = customTrainData.trainNumDistance;
const number =
distance !== null ? ` ${parseInt(trainNum) - distance}` : "";
const trainName = customTrainData.trainName + number;
return [
type,
trainName,
fontAvailable,
isOneMan,
customTrainData.infogram,
];
case trainData[trainData.length - 1] === undefined:
return [type, "", fontAvailable, isOneMan, customTrainData.infogram];
default:
return ["", false];
// 行先がある場合は、行先を取得
return [
type,
migrateTrainName(
trainData[trainData.length - 1].split(",")[0] + "行き"
),
fontAvailable,
isOneMan,
customTrainData.infogram,
];
}
})();
switch (true) {
case !!limitedArray[1]:
// 特急の場合は、列車名を取得
return [type, migrateTrainName(limitedArray[1]), fontAvailable];
case trainData.length == 0:
// 特急以外の場合は、列車番号を取得
return [type, "", fontAvailable];
default:
// 行先がある場合は、行先を取得
return [
type,
migrateTrainName(
trainData[trainData.length - 1].split(",")[0] + "行き"
),
fontAvailable,
];
}
}, [limited, trainData]);
// 1人運転の判定
const isOneMan = useMemo(() => {
const OneManRegex = new RegExp(/^4[1-9]\d\d[DM]$/);
const OneManRegex2 = new RegExp(/^5[1-7]\d\d[DM]$/);
return !!(
OneManRegex.test(trainNum) ||
OneManRegex2.test(trainNum) ||
trainNum === "3621D"
);
}, [trainNum]);
}, [trainData]);
return (
<View style={{ padding: 10, flexDirection: "row", alignItems: "center" }}>
<View style={{ padding: 10, flexDirection: "row", alignItems: "center" }} onTouchStart={()=>scrollHandlers.ref.current?.scrollTo({ y: 0, animated: true })}>
<TrainIconStatus {...{ data, navigate, from }} />
<View
style={{ borderRadius: 5, flexDirection: "row", alignItems: "center" }}
@ -143,7 +128,7 @@ export const HeaderText: FC<Props> = ({
fontSize: 20,
color: "white",
fontFamily: fontAvailable ? "JR-Nishi" : undefined,
fontWeight: !fontAvailable ?"bold":undefined,
fontWeight: !fontAvailable ? "bold" : undefined,
marginRight: 5,
}}
>
@ -151,6 +136,7 @@ export const HeaderText: FC<Props> = ({
</Text>
{isOneMan && <OneManText />}
<Text style={textConfig}>{trainName}</Text>
<InfogramText infogram={infogram} />
</View>
<View style={{ flex: 1 }} />

View File

@ -0,0 +1,18 @@
import React, { FC } from "react";
import { Text } from "react-native";
type props = {
infogram: string;
}
export const InfogramText: FC<props> = ({infogram}) => {
return (
<Text
style={{
fontSize: 20,
color: "white",
fontFamily: "JNR-font",
}}
>
{infogram}
</Text>
);
};

View File

@ -49,6 +49,11 @@ export const AppsWebView = ({ openStationACFromEachTrainInfo }) => {
const onMessage = (event) => {
const { data } = event.nativeEvent;
/**
* {type,trainNum,limited}
* {type,currentLines}
* {type,event,id,name,pdf,map,url,chk}
*/
if (data.includes("train.html")) {
navigate("trainbase", { info: data, from: "Train" });
return;

View File

@ -17,7 +17,7 @@ import { SwitchArea } from "../atom/SwitchArea";
import { useNotification } from "../../stateBox/useNotifications";
import { SheetHeaderItem } from "@/components/atom/SheetHeaderItem";
const versionCode = "6.0";
const versionCode = "6.0.1";
export const SettingTopPage = ({
testNFC,

View File

@ -28,6 +28,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
"http://jr-shikoku.co.jp/01_trainbus/vehicle-info/shiokaze.html",
trainNumDistance: 0,
info: "いしづちと併結 / 8000系で運転",
infogram: ""
};
case "2M":
return {
@ -38,6 +39,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
"http://jr-shikoku.co.jp/01_trainbus/vehicle-info/shiokaze.html",
trainNumDistance: 0,
info: "8000系で運転",
infogram: ""
};
//8000 アンパン
case "10M":
@ -51,6 +53,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
infoUrl: "https://www.jr-eki.com/aptrain/naani/yosan/train.html",
trainNumDistance: 0,
info: "いしづちと併結 / アンパンマン列車で運転",
infogram: ""
};
//8600
case "8M":
@ -69,6 +72,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
"http://jr-shikoku.co.jp/01_trainbus/vehicle-info/shiokaze.html",
trainNumDistance: 0,
info: "いしづちと併結 / 8600系で運転",
infogram: ""
};
//いしづちメイン
@ -99,6 +103,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
"http://jr-shikoku.co.jp/01_trainbus/vehicle-info/ishizuchi.html",
trainNumDistance: 1000,
info: "しおかぜと併結 / 8000系で運転",
infogram: ""
};
//8000 アンパン
@ -113,6 +118,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
infoUrl: "https://www.jr-eki.com/aptrain/naani/yosan/train.html",
trainNumDistance: 1000,
info: "しおかぜと併結 / アンパンマン列車で運転",
infogram: ""
};
//8600
@ -132,6 +138,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
"http://jr-shikoku.co.jp/01_trainbus/vehicle-info/ishizuchi.html",
trainNumDistance: 1000,
info: "しおかぜと併結 / 8600系で運転",
infogram: ""
};
//MEXP
@ -145,6 +152,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
"http://jr-shikoku.co.jp/01_trainbus/vehicle-info/morning.html",
trainNumDistance: null,
info: "8000系で運転",
infogram: ""
};
//8600
case "1091M":
@ -156,6 +164,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
"http://jr-shikoku.co.jp/01_trainbus/vehicle-info/morning.html",
trainNumDistance: null,
info: "8600系で運転",
infogram: ""
};
//三桁いしづち
//8000 アンパン
@ -168,10 +177,21 @@ export const customTrainDataDetector = (TrainNumber: string) => {
infoUrl: "https://www.jr-eki.com/aptrain/naani/yosan/train.html",
trainNumDistance: 940,
info: "アンパンマン列車で運転",
infogram: ""
};
//8600
case "1043M":
case "1042M":
return {
type: "LTDEXP",
trainName: "いしづち",
trainIcon: "https://storage.haruk.in/s8600_isz.png",
infoUrl:
"http://jr-shikoku.co.jp/01_trainbus/vehicle-info/ishizuchi.html",
trainNumDistance: 940,
info: "8600系で運転",
infogram: ""
};
case "1046M":
return {
type: "LTDEXP",
@ -181,6 +201,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
"http://jr-shikoku.co.jp/01_trainbus/vehicle-info/ishizuchi.html",
trainNumDistance: 940,
info: "8600系で運転",
infogram: ""
};
//南風 2700ーマル
@ -209,6 +230,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
infoUrl: "http://jr-shikoku.co.jp/01_trainbus/vehicle-info/nanpu.html",
trainNumDistance: 30,
info: "2700系で運転",
infogram: ""
};
//2700アンパン
@ -231,6 +253,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
infoUrl: "https://www.jr-eki.com/aptrain/naani/dosan/train.html",
trainNumDistance: 30,
info: "アンパンマン列車で運転",
infogram: ""
};
//うずしお
@ -256,6 +279,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
"http://jr-shikoku.co.jp/01_trainbus/vehicle-info/uzushio.html",
trainNumDistance: 3000,
info: "2700系で運転",
infogram: ""
};
//2700 二両編成
@ -277,6 +301,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
"http://jr-shikoku.co.jp/01_trainbus/vehicle-info/uzushio.html",
trainNumDistance: 3000,
info: "2700系で運転",
infogram: ""
};
//2600
@ -298,6 +323,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
"http://jr-shikoku.co.jp/01_trainbus/vehicle-info/uzushio.html",
trainNumDistance: 3000,
info: "2600系で運転",
infogram: ""
};
@ -377,6 +403,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
infoUrl: "http://jr-shikoku.co.jp/01_trainbus/vehicle-info/marine.html",
trainNumDistance: 3100,
info: "",
infogram: ""
};
case "3102M":
case "3101M":
@ -390,6 +417,103 @@ export const customTrainDataDetector = (TrainNumber: string) => {
infoUrl: "http://jr-shikoku.co.jp/01_trainbus/vehicle-info/marine.html",
trainNumDistance: 3100,
info: "",
infogram: ""
};
//下りサンポート
case "1219M":
return {
type: "Normal",
trainName: "南風リレー",
trainIcon: "",
infoUrl: "",
trainNumDistance: null,
info: " 土曜・休日は多度津-琴平間運休",
infogram: ""
};
case "111M":
case "115M":
case "117M":
case "121M":
case "123M":
case "127M":
case "131M":
case "139M":
case "147M":
case "151M":
return {
type: "Rapid",
trainName: "サンポート南風リレー",
trainIcon: null,
infoUrl: null,
trainNumDistance: null,
info: null,
infogram: ""
};
case "5109M":
case "5135M":
case "5251M":
return {
type: "OneManRapid",
trainName: "サンポート南風リレー",
trainIcon: null,
infoUrl: null,
trainNumDistance: null,
info: null,
infogram: ""
};
case "137M":
return {
type: "Rapid",
trainName: "サンポート",
trainIcon: null,
infoUrl: null,
trainNumDistance: null,
info: "土曜・休日運休",
infogram: ""
};
//上りサンポート
case "116M":
return {
type: "Normal",
trainName: "南風リレー",
trainIcon: null,
infoUrl: null,
trainNumDistance: null,
info: null,
infogram: ""
};
case "130M":
case "132M":
case "136M":
case "140M":
case "144M":
case "146M":
case "150M":
case "156M":
return {
type: "Rapid",
trainName: "サンポート南風リレー",
trainIcon: "",
infoUrl: "",
trainNumDistance: null,
info: "",
infogram: ""
};
case "5118M":
case "5120M":
case "5124M":
case "5126M":
case "5252M":
return {
type: "OneManRapid",
trainName: "サンポート南風リレー",
trainIcon: null,
infoUrl: null,
trainNumDistance: null,
info: null,
infogram: ""
};
//サンライズ瀬戸
@ -403,6 +527,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
"https://www.jr-odekake.net/train/sunriseseto_izumo/index.html",
trainNumDistance: null,
info: "",
infogram: "ブ"
};
case "8041M": //琴平延長高松迄
case "8031M": //琴平延長高松以降
@ -414,6 +539,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
"https://www.jr-odekake.net/train/sunriseseto_izumo/index.html",
trainNumDistance: null,
info: "琴平延長運転日",
infogram: "ブ"
};
//宇和海
@ -451,6 +577,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
infoUrl: "http://jr-shikoku.co.jp/01_trainbus/vehicle-info/uwakai.html",
trainNumDistance: 1050,
info: "2000系で運転",
infogram: ""
};
//2000 アンパン込み
case "1058D":
@ -466,6 +593,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
infoUrl: "https://www.jr-eki.com/aptrain/naani/yosan/train.html",
trainNumDistance: 1050,
info: "アンパン列車で運転",
infogram: ""
};
//しまんと
case "2002D":
@ -480,6 +608,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
"http://jr-shikoku.co.jp/01_trainbus/vehicle-info/shimanto.html",
trainNumDistance: 2000,
info: "2700系で運転",
infogram: ""
};
//あしずり 2000
@ -499,14 +628,25 @@ export const customTrainDataDetector = (TrainNumber: string) => {
"http://jr-shikoku.co.jp/01_trainbus/vehicle-info/ashizuri.html",
trainNumDistance: 2070,
info: "2000系で運転",
infogram: ""
};
//あしずり 2700
case "2072D":
case "2078D":
case "2084D":
case "2075D":
case "2077D":
return {
type: "LTDEXP",
trainName: "あしずり",
trainIcon: "https://storage.haruk.in/s2700_asi.png",
infoUrl:
"http://jr-shikoku.co.jp/01_trainbus/vehicle-info/ashizuri.html",
trainNumDistance: 2070,
info: "2700系で運転",
infogram: ""
};
case "2072D":
case "2083D":
return {
type: "LTDEXP",
@ -516,6 +656,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
"http://jr-shikoku.co.jp/01_trainbus/vehicle-info/ashizuri.html",
trainNumDistance: 2070,
info: "2700系で運転",
infogram: ""
};
//剣山
@ -534,6 +675,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
"http://jr-shikoku.co.jp/01_trainbus/vehicle-info/tsurugisan.html",
trainNumDistance: 4000,
info: "キハ185系で運転",
infogram: ""
};
//よしのがわトロッコ
@ -547,6 +689,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
"http://jr-shikoku.co.jp/01_trainbus/event_train/yoshino_torokko.html",
trainNumDistance: null,
info: "",
infogram: ""
};
//岡山高松アントロ
@ -563,6 +706,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
"https://www.jr-eki.com/aptrain/naani/torokko_seto/jikoku.html",
trainNumDistance: null,
info: "",
infogram: ""
};
//伊予灘ものがたり
@ -575,6 +719,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
infoUrl: "https://iyonadamonogatari.com/",
trainNumDistance: null,
info: "",
infogram: ""
};
case "8092D":
case "8094D":
@ -585,6 +730,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
infoUrl: "https://iyonadamonogatari.com/",
trainNumDistance: null,
info: "",
infogram: ""
};
//千年ものがたり
@ -597,6 +743,7 @@ export const customTrainDataDetector = (TrainNumber: string) => {
infoUrl: "https://www.jr-shikoku.co.jp/sennenmonogatari/",
trainNumDistance: null,
info: "",
infogram: ""
};
//夜明けものがたり
@ -611,27 +758,41 @@ export const customTrainDataDetector = (TrainNumber: string) => {
infoUrl: "https://www.jr-shikoku.co.jp/yoakenomonogatari/index.html",
trainNumDistance: null,
info: "",
infogram: ""
};
case "9174M":
return {
type: "SPCL",
trainName: "[快速]マリンライナー94号",
type: "SPCL_Rapid",
trainName: "マリンライナー94号",
trainIcon: "https://storage.haruk.in/s5001.png",
infoUrl: "http://jr-shikoku.co.jp/01_trainbus/vehicle-info/marine.html",
trainNumDistance: null,
info: "WEST LIVE TOUR 2025臨 3/21,22のみ運転",
infogram: ""
};
case "9395D":
return {
type: "SPCL",
trainName: "普通列車",
trainIcon: "",
infoUrl: "",
type: "SPCL_Normal",
trainName: "",
trainIcon: null,
infoUrl: null,
trainNumDistance: null,
info: "WEST LIVE TOUR 2025臨 3/21,22のみ運転",
infogram: ""
};
default:
if (
if(getJRF(TrainNumber) !== null){
return {
type: "Freight",
trainName: getJRF(TrainNumber),
trainIcon: "https://storage.haruk.in/ef210a.png",
infoUrl: null,
trainNumDistance: null,
info: "",
infogram: "",
};
}
else if (
new RegExp(/^4[1-9]\d\d[DM]$/).test(TrainNumber) ||
new RegExp(/^5[1-7]\d\d[DM]$/).test(TrainNumber) ||
new RegExp(/^3[2-9]\d\d[DM]$/).test(TrainNumber)
@ -643,48 +804,64 @@ export const customTrainDataDetector = (TrainNumber: string) => {
infoUrl: null,
trainNumDistance: null,
info: null,
infogram: ""
};
else
return {
type: "Normal",
trainName: "",
trainIcon: null,
infoUrl: null,
trainNumDistance: null,
info: null,
};
break;
else if (
new RegExp(/^[1-9]\d\d[DM]$/).test(TrainNumber) ||
new RegExp(/^1[26]\d\d[DM]$/).test(TrainNumber) ||
new RegExp(/^6\d\d\d[DM]$/).test(TrainNumber)
){
return {
type: "Normal",
trainName: "",
trainIcon: null,
infoUrl: null,
trainNumDistance: null,
info: null,
infogram: ""
};
} else {
return {
type: "Other",
trainName: "",
trainIcon: null,
infoUrl: null,
trainNumDistance: null,
info: null,
infogram: ""
};
}
}
};
export const getJRF = (num: string) => {
switch (num) {
case "71":
return "東京(タ)→高松(タ)\\n";
return "東京(タ)→高松(タ)";
case "73":
case "75":
return "大阪(タ)→高松(タ)\\n";
return "大阪(タ)→高松(タ)";
case "3079":
return "高松(タ)→伊予三島\\n";
return "高松(タ)→伊予三島";
case "3071":
case "3077":
return "高松(タ)→新居浜\\n";
return "高松(タ)→新居浜";
case "3073":
return "高松(タ)→松山貨物\\n";
return "高松(タ)→松山貨物";
case "70":
return "高松(タ)→東京(タ)\\n";
return "高松(タ)→東京(タ)";
case "74":
case "76":
return "高松(タ)→大阪(タ)\\n";
return "高松(タ)→大阪(タ)";
case "3078":
return "伊予三島→高松(タ)\\n";
return "伊予三島→高松(タ)";
case "3070":
return "新居浜→高松(タ)\\n";
return "新居浜→高松(タ)";
case "3076":
return "新居浜→高松(タ)\\n";
return "新居浜→高松(タ)";
case "3072":
return "松山貨物→高松(タ)\\n";
return "松山貨物→高松(タ)";
case "9070":
return "臨時貨物\\n";
return "臨時";
default:
return null;
}

View File

@ -23,12 +23,16 @@ type getTrainType = (d: nameString) => {
export const getTrainType: getTrainType = (nameString) => {
switch (nameString) {
case "Rapid":
case "OneManRapid":
return { color: "aqua", name: "快速", data: "rapid" };
case "LTDEXP":
return { color: "red", name: "特急", data: "express" };
case "NightLTDEXP":
return { color: "red", name: "寝台特急", data: "express" };
case "SPCL":
case "SPCL_Rapid":
case "SPCL_EXP":
case "SPCL_Normal":
return { color: "#297bff", name: "臨時", data: "normal" };
case "OneMan":
return { color: "white", name: "普通列車(ワンマン)", data: "normal" };

View File

@ -902,97 +902,89 @@ export const injectJavascriptData: InjectJavascriptData = (
// case "8094D":
// setStationIcon(e.querySelector("img"),'https://storage.haruk.in/s185iyoy.png');
// break;
// // 高徳線、徳島線、牟岐線、鳴門線普通列車系統
// // キハ40・47
// case "4303D":
// case "363D":
// case "369D":
// case "314D":
// case "316D":
// case "368D":
// case "4382D":
// case "951D":
// case "953D":
// case "955D":
// case "973D":
// case "975D":
// case "977D":
// case "979D":
// case "981D":
// case "950D":
// case "968D":
// case "970D":
// case "972D":
// case "974D":
// case "976D":
// case "980D":
// case "982D":
// setStationIcon(e.querySelector("img"),'https://storage.haruk.in/s40.png');
// break;
// // 1000形
// case "4309D":
// case "4311D":
// case "371D":
// case "4318D":
// case "358D":
// case "4380D":
// case "433D":
// case "473D":
// case "450D":
// case "480D":
// setStationIcon(e.querySelector("img"),'https://storage.haruk.in/s1000.png');
// break;
// // 1200形
// case "4301D":
// case "4327D":
// case "4329D":
// case "4343D":
// case "351D":
// case "353D":
// case "355D":
// case "4355D":
// case "4361D":
// case "367D":
// case "4330D":
// case "4336D":
// case "4346D":
// case "360D":
// case "362D":
// case "4370D":
// case "374D":
// case "4378D":
// case "451D":
// case "4453D":
// case "4455D":
// case "4459D":
// case "471D":
// case "475D":
// case "485D":
// case "4430D":
// case "434D":
// case "438D":
// case "4460D":
// case "4466D":
// case "4470D":
// case "474D":
// case "484D":
// case "957D":
// case "4959D":
// case "4963D":
// case "4967D":
// case "4971D":
// case "4983D":
// case "952D":
// case "4954D":
// case "4958D":
// case "4962D":
// case "4966D":
// case "4978D":
// setStationIcon(e.querySelector("img"),'https://storage.haruk.in/s1200n.png');
// break;
// 高徳線、徳島線、牟岐線、鳴門線普通列車系統
// キハ40・47
case "4303D":
case "371D":
case "316D":
case "362D":
case "4376D":
case "951D":
case "953D":
case "955D":
case "973D":
case "975D":
case "977D":
case "979D":
case "981D":
case "950D":
case "968D":
case "970D":
case "972D":
case "974D":
case "976D":
case "980D":
case "982D":
setStationIcon(e.querySelector("img"),'https://storage.haruk.in/s40.png');
break;
// 1000形
case "4311D":
case "363D":
case "356D":
case "4374D":
case "433D":
case "4447D":
case "451D":
case "450D":
case "4458D":
case "474D":
setStationIcon(e.querySelector("img"),'https://storage.haruk.in/s1000.png');
break;
// 1200形
case "4301D":
case "4327D":
case "4329D":
case "4343D":
case "353D":
case "355D":
case "367D":
case "310D":
case "4326D":
case "4334D":
case "4342D":
case "358D":
case "364D":
case "4453D":
case "4455D":
case "4457D":
case "463D":
case "475D":
case "477D":
case "485D":
case "4430D":
case "434D":
case "438D":
case "4460D":
case "4464D":
case "4466D":
case "478D":
case "484D":
case "957D":
case "4959D":
case "4963D":
case "4967D":
case "4971D":
case "952D":
case "4954D":
case "4958D":
case "4962D":
case "4966D":
setStationIcon(e.querySelector("img"),'https://storage.haruk.in/s1200n.png');
break;
// default: //指定車両でなく、Regexでの指定に移動
default: //指定車両でなく、Regexでの指定に移動
// // 琴平直通系普通電車
// if(new RegExp(/^(1|4|5)2\\d\\dM$/).test(列番データ)){
// setStationIcon(e.querySelector("img"),'https://storage.haruk.in/s7200.png');
@ -1006,30 +998,31 @@ export const injectJavascriptData: InjectJavascriptData = (
// setStationIcon(e.querySelector("img"),'https://storage.haruk.in/s7000.png');
// break;
// }// 高徳線 普通列車系統
// else if(new RegExp(/^(4|5)3\\d\\dD$/).test(列番データ)){
// setStationIcon(e.querySelector("img"),'https://storage.haruk.in/s1500.png');
// break;
// }
// else if(new RegExp(/^3\\d\\dD$/).test(列番データ)){
// setStationIcon(e.querySelector("img"),'https://storage.haruk.in/s1500.png');
// break;
// }// 徳島線 普通列車系統
// else if(new RegExp(/^(4|5)4\\d\\dD$/).test(列番データ)){
// setStationIcon(e.querySelector("img"),'https://storage.haruk.in/s1500.png');
// break;
// }
// else if(new RegExp(/^4\\d\\dD$/).test(列番データ)){
// setStationIcon(e.querySelector("img"),'https://storage.haruk.in/s1500.png');
// break;
// }// 鳴門線普通列車系統
// else if(new RegExp(/^(4|5)9(5|6|7|8)\\dD$/).test(列番データ)){
// setStationIcon(e.querySelector("img"),'https://storage.haruk.in/s1500.png');
// break;
// }
// else if(new RegExp(/^9(5|6|7|8)\\dD$/).test(列番データ)){
// setStationIcon(e.querySelector("img"),'https://storage.haruk.in/s1500.png');
// break;
// }
// else
if(new RegExp(/^(4|5)3\\d\\dD$/).test()){
setStationIcon(e.querySelector("img"),'https://storage.haruk.in/s1500.png');
break;
}
else if(new RegExp(/^3\\d\\dD$/).test()){
setStationIcon(e.querySelector("img"),'https://storage.haruk.in/s1500.png');
break;
}// 徳島線 普通列車系統
else if(new RegExp(/^(4|5)4\\d\\dD$/).test()){
setStationIcon(e.querySelector("img"),'https://storage.haruk.in/s1500.png');
break;
}
else if(new RegExp(/^4\\d\\dD$/).test()){
setStationIcon(e.querySelector("img"),'https://storage.haruk.in/s1500.png');
break;
}// 鳴門線普通列車系統
else if(new RegExp(/^(4|5)9(5|6|7|8)\\dD$/).test()){
setStationIcon(e.querySelector("img"),'https://storage.haruk.in/s1500.png');
break;
}
else if(new RegExp(/^9(5|6|7|8)\\dD$/).test()){
setStationIcon(e.querySelector("img"),'https://storage.haruk.in/s1500.png');
break;
}
// 牟岐線普通列車系統 一旦閉鎖
// else if(new RegExp(/^(4|5)5\\d\\dD$/).test(列番データ)){
// setStationIcon(e.querySelector("img"),'https://storage.haruk.in/s7200.png');

View File

@ -16,8 +16,8 @@ export const AllTrainDiagramProvider = ({ children }) => {
[allTrainDiagram]
);
const customData = {
"9395D":"高松,発,22:10#昭和町,発,22:12#栗林公園北口,発,22:15#栗林,発,22:18#木太町,発,22:22#屋島,発,22:26#古高松南,発,22:38#八栗口,発,22:41#讃岐牟礼,発,22:44#志度,発,22:48#オレンジタウン,発,22:52#造田,発,22:56#神前,発,22:59#讃岐津田,発,23:05#鶴羽,発,23:09#丹生,発,23:14#三本松,着,23:18#WEST LIVE TOUR 2025臨/三本松,提,https://www.jr-shikoku.co.jp/03_news/pdf/20250228_20250323_west-live-tour-2025.pdf#普通 三本松行,提,https://www.jr-shikoku.co.jp/03_news/pdf/20250228_20250323_west-live-tour-2025.pdf#",
"9174M":"高松,発,22:00#坂出,発,22:16#児島,発,22:39#茶屋町,発,22:55#早島,発,22:59#妹尾,発,23:03#岡山,着,23:12#WEST LIVE TOUR 2025臨,提,https://www.jr-shikoku.co.jp/03_news/pdf/20250228_20250323_west-live-tour-2025.pdf#快速マリンライナー94号 岡山行,提,https://www.jr-shikoku.co.jp/03_news/pdf/20250228_20250323_west-live-tour-2025.pdf#",
"9395D":"WEST LIVE TOUR 2025臨,提,https://www.jr-shikoku.co.jp/03_news/pdf/20250228_20250323_west-live-tour-2025.pdf#高松,発,22:10#昭和町,発,22:12#栗林公園北口,発,22:15#栗林,発,22:18#木太町,発,22:22#屋島,発,22:26#古高松南,発,22:38#八栗口,発,22:41#讃岐牟礼,発,22:44#志度,発,22:48#オレンジタウン,発,22:52#造田,発,22:56#神前,発,22:59#讃岐津田,発,23:05#鶴羽,発,23:09#丹生,発,23:14#三本松,着,23:18#",
"9174M":"WEST LIVE TOUR 2025臨,提,https://www.jr-shikoku.co.jp/03_news/pdf/20250228_20250323_west-live-tour-2025.pdf#高松,発,22:00#坂出,発,22:16#児島,発,22:39#茶屋町,発,22:55#早島,発,22:59#妹尾,発,23:03#岡山,着,23:12#",
};
useEffect(() => {