From dfc2fa5c891dfe83049cc36977faa418a84c4b45 Mon Sep 17 00:00:00 2001 From: harukin-expo-dev-env Date: Wed, 11 Jun 2025 13:21:40 +0000 Subject: [PATCH 1/8] =?UTF-8?q?=E3=82=A2=E3=82=A4=E3=82=B3=E3=83=B3?= =?UTF-8?q?=E3=81=AE=E5=8F=96=E5=BE=97=E3=81=8C=E3=82=AD=E3=83=A3=E3=83=83?= =?UTF-8?q?=E3=82=B7=E3=83=A5=E5=84=AA=E5=85=88=E3=81=95=E3=82=8C=E3=81=A1?= =?UTF-8?q?=E3=82=83=E3=81=86=E7=8A=B6=E6=85=8B=E3=81=AB=E3=81=AA=E3=81=A3?= =?UTF-8?q?=E3=81=A6=E3=81=84=E3=81=9F=E3=81=AE=E3=81=A7=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/custom-train-data.ts | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/components/custom-train-data.ts b/components/custom-train-data.ts index 3cf8526..59c049a 100644 --- a/components/custom-train-data.ts +++ b/components/custom-train-data.ts @@ -1,5 +1,6 @@ import dayjs from "dayjs"; export const customTrainDataDetector = (TrainNumber: string) => { + const trainGetText = `?trainNum=${TrainNumber}&month=${dayjs().format("M")}&day=${dayjs().format("D")}`; switch (TrainNumber) { //しおかぜメイン //8000 ノーマル @@ -49,7 +50,7 @@ export const customTrainDataDetector = (TrainNumber: string) => { return { type: "LTDEXP", trainName: "しおかぜ", - trainIcon: `https://n8n.haruk.in/webhook/anpanman-pictures.png?trainNum=${TrainNumber}`, + trainIcon: `https://n8n.haruk.in/webhook/anpanman-pictures.png${trainGetText}`, infoUrl: "https://www.jr-eki.com/aptrain/naani/yosan/train.html", trainNumDistance: 0, info: "いしづちと併結 / アンパンマン列車で運転", @@ -114,7 +115,7 @@ export const customTrainDataDetector = (TrainNumber: string) => { return { type: "LTDEXP", trainName: "いしづち", - trainIcon: `https://n8n.haruk.in/webhook/anpanman-pictures.png?trainNum=${TrainNumber}`, + trainIcon: `https://n8n.haruk.in/webhook/anpanman-pictures.png${trainGetText}`, infoUrl: "https://www.jr-eki.com/aptrain/naani/yosan/train.html", trainNumDistance: 1000, info: "しおかぜと併結 / アンパンマン列車で運転", @@ -173,7 +174,7 @@ export const customTrainDataDetector = (TrainNumber: string) => { return { type: "LTDEXP", trainName: "いしづち", - trainIcon: `https://n8n.haruk.in/webhook/anpanman-pictures.png?trainNum=${TrainNumber}`, + trainIcon: `https://n8n.haruk.in/webhook/anpanman-pictures.png${trainGetText}`, infoUrl: "https://www.jr-eki.com/aptrain/naani/yosan/train.html", trainNumDistance: 940, info: "アンパンマン列車で運転", @@ -247,7 +248,7 @@ export const customTrainDataDetector = (TrainNumber: string) => { return { type: "LTDEXP", trainName: "南風", - trainIcon: `https://n8n.haruk.in/webhook/anpanman-pictures.png?trainNum=${TrainNumber}`, + trainIcon: `https://n8n.haruk.in/webhook/anpanman-pictures.png${trainGetText}`, infoUrl: "https://www.jr-eki.com/aptrain/naani/dosan/train.html", trainNumDistance: 30, info: "アンパンマン列車で運転", @@ -587,7 +588,7 @@ export const customTrainDataDetector = (TrainNumber: string) => { return { type: "LTDEXP", trainName: "宇和海", - trainIcon: `https://n8n.haruk.in/webhook/anpanman-pictures.png?trainNum=${TrainNumber}`, + trainIcon: `https://n8n.haruk.in/webhook/anpanman-pictures.png${trainGetText}`, infoUrl: "https://www.jr-eki.com/aptrain/naani/yosan/train.html", trainNumDistance: 1050, info: "アンパン列車で運転", @@ -621,7 +622,7 @@ export const customTrainDataDetector = (TrainNumber: string) => { return { type: "LTDEXP", trainName: "あしずり", - trainIcon: `https://n8n.haruk.in/webhook/anpanman-pictures.png?trainNum=${TrainNumber}`, + trainIcon: `https://n8n.haruk.in/webhook/anpanman-pictures.png${trainGetText}`, infoUrl: "https://www.jr-eki.com/aptrain/naani/first-generation/jikoku.html", trainNumDistance: 2070, From 8e7ccba5cc6b9c3dfe27c15d29f7331ca55e8ca4 Mon Sep 17 00:00:00 2001 From: harukin-expo-dev-env Date: Thu, 12 Jun 2025 08:54:39 +0000 Subject: [PATCH 2/8] =?UTF-8?q?=E3=83=87=E3=82=B6=E3=82=A4=E3=83=B3?= =?UTF-8?q?=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/webViewInjectjavascript.ts | 53 +++++++++++++++++++++++++++------- 1 file changed, 43 insertions(+), 10 deletions(-) diff --git a/lib/webViewInjectjavascript.ts b/lib/webViewInjectjavascript.ts index 3645b7f..897b297 100644 --- a/lib/webViewInjectjavascript.ts +++ b/lib/webViewInjectjavascript.ts @@ -54,7 +54,7 @@ export const injectJavascriptData: InjectJavascriptData = ( const trainIcon = ` const setStationIcon = (setIconElem,img,hasProblem) =>{ const position = setIconElem.getAttribute("style").includes("left"); - setIconElem.insertAdjacentHTML('beforebegin', ""); + setIconElem.insertAdjacentHTML('beforebegin', ""); setIconElem.remove(); } @@ -1041,6 +1041,15 @@ export const injectJavascriptData: InjectJavascriptData = ( else if(列番データ.indexOf("R") != -1){ trainName = "回送"; } + else if(列番データ.indexOf("E") != -1){ + trainName = "回送"; + } + else if(列番データ.indexOf("A") != -1){ + trainName = "回送"; + } + else if(列番データ.indexOf("B") != -1){ + trainName = "回送"; + } else if(列番データ.indexOf("S") != -1){ trainName = "臨時列車"; } @@ -1251,8 +1260,10 @@ export const injectJavascriptData: InjectJavascriptData = ( 行き先情報.innerText = ""; ${uiSetting === "tokyo" ? ` 行き先情報.insertAdjacentHTML('beforebegin', "

" + (ToData ? ToData + "行 " : ToData) + "

"); - 行き先情報.insertAdjacentHTML('beforebegin', "

" + returnText1 + "

"); - 行き先情報.insertAdjacentHTML('beforebegin', "

" + TrainNumber + (JRF ? "":"レ") + "

"); + 行き先情報.insertAdjacentHTML('beforebegin', "

" + (isWanman ? "ワンマン " : "") + "

"); + 行き先情報.insertAdjacentHTML('beforebegin', "

" + trainName + "

"); + 行き先情報.insertAdjacentHTML('beforebegin', "

" + viaData + "

"); + 行き先情報.insertAdjacentHTML('beforebegin', "

" + TrainNumber + (JRF ? "":"レ") + "

"); 行き先情報.insertAdjacentHTML('beforebegin', "

" + (hasProblem ? "‼️停止中‼️" : "") + "

"); `: ` 行き先情報.insertAdjacentHTML('beforebegin', "

" + returnText1 + "

"); @@ -1266,13 +1277,35 @@ export const injectJavascriptData: InjectJavascriptData = ( ` -const setNewTrainItem = (element)=>{ - element.style.borderColor = 'white'; +const setNewTrainItem = (element,hasProblem)=>{ + if(element.getAttribute('offclick').includes("express")){ + element.style.borderColor = 'rgba(255, 0, 0, 1)'; + }else if(element.getAttribute('offclick').includes("rapid")){ + element.style.borderColor = 'rgba(0, 140, 255, 1)'; + }else { + element.style.borderColor = 'white'; + } element.style.borderWidth = '2px'; element.style.borderStyle = 'solid'; element.style.borderRadius = '10%'; - element.style.backgroundColor = 'rgba(255, 255, 255, 0.8)'; - element.style.boxShadow = '0 0 4px rgba(0, 0, 0, 0.2)'; + var 列番データ = element.getAttribute('offclick').split('"')[1]; + switch(true){ + case 列番データ.indexOf("H") != -1: + case 列番データ.indexOf("R") != -1: + case 列番データ.indexOf("E") != -1: + case 列番データ.indexOf("A") != -1: + case 列番データ.indexOf("B") != -1: + element.style.backgroundColor = 'rgba(199, 199, 199, 0.8)'; + break; + default: + element.style.backgroundColor = 'rgba(255, 255, 255, 0.8)'; + break; + } + if(hasProblem){ + element.style.boxShadow = '0 0 6px rgba(255, 0, 0, 0.77)'; + }else{ + element.style.boxShadow = '0 0 4px rgba(0, 0, 0, 0.2)'; + } element.style.margin = '2px'; element.style.display = 'flex'; element.style.alignItems = 'center'; @@ -1287,12 +1320,12 @@ const setNewTrainItem = (element)=>{ element.addEventListener('touchend', () => element.style.transform = 'scale(1)'); if(element.getAttribute("style").includes("left")){ // borderを使って五角形を生成 下り - element.style.borderRadius = '20% 20% 80% 80%'; + element.style.borderRadius = '10% 10% 40% 40%'; element.style.flexDirection = 'column-reverse'; } else if(element.getAttribute("style").includes("right")){ // borderを使って五角形を生成 上り - element.style.borderRadius = '80% 80% 20% 20%'; + element.style.borderRadius = '40% 40% 10% 10%'; element.style.flexDirection = 'column'; } @@ -1387,7 +1420,7 @@ const setStrings = () =>{ } ` : ""} nameReplace(列車名データ,列番データ,行き先情報,hasProblem); - ${uiSetting === "tokyo" ? `setNewTrainItem(element);`: ``} + ${uiSetting === "tokyo" ? `setNewTrainItem(element,hasProblem);`: ``} } try{ for(let d of document.getElementById('disp').childNodes){ From c92f02fa0e35f1e2200e171fb191fb9e91346cfd Mon Sep 17 00:00:00 2001 From: harukin-expo-dev-env Date: Sun, 15 Jun 2025 05:20:11 +0000 Subject: [PATCH 3/8] =?UTF-8?q?=E6=8A=95=E7=A8=BF=E6=A9=9F=E8=83=BD?= =?UTF-8?q?=E3=81=B8=E3=81=AE=E3=82=A6=E3=82=A3=E3=83=B3=E3=83=89=E3=82=A6?= =?UTF-8?q?=E3=82=92=E4=BD=9C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- GeneralWebView.tsx | 30 +++++++++++++++++++ MenuPage.js | 2 ++ Top.js | 2 ++ .../EachTrainInfoCore/HeaderText.tsx | 13 ++++++-- 4 files changed, 44 insertions(+), 3 deletions(-) create mode 100644 GeneralWebView.tsx diff --git a/GeneralWebView.tsx b/GeneralWebView.tsx new file mode 100644 index 0000000..dbc47ea --- /dev/null +++ b/GeneralWebView.tsx @@ -0,0 +1,30 @@ +import React, { CSSProperties } from "react"; +import { View, ViewProps } from "react-native"; +import { WebView } from "react-native-webview"; +import { BigButton } from "./components/atom/BigButton"; +import { useNavigation } from "@react-navigation/native"; +export default ({ route }) => { + if (!route.params) { + return null; + } + const { uri, useExitButton = true } = route.params; + const { goBack } = useNavigation(); + return ( + + { + const { data } = event.nativeEvent; + const {type} = JSON.parse(data); + if (type === "windowClose") return goBack(); + }} + /> + {useExitButton && } + + ); +}; +const styles: ViewProps["style"] = { + height: "100%", + backgroundColor: "#0099CC", +}; diff --git a/MenuPage.js b/MenuPage.js index de4f199..6f00ec3 100644 --- a/MenuPage.js +++ b/MenuPage.js @@ -18,6 +18,7 @@ import AllTrainDiagramView from "./components/AllTrainDiagramView"; import { useNavigation } from "@react-navigation/native"; import { news } from "./config/newsUpdate"; import { useBottomTabBarHeight } from "@react-navigation/bottom-tabs"; +import GeneralWebView from "./GeneralWebView"; const Stack = createStackNavigator(); export function MenuPage() { @@ -128,6 +129,7 @@ export function MenuPage() { component={AllTrainDiagramView} /> + ); } diff --git a/Top.js b/Top.js index 4e547b8..5f25b74 100644 --- a/Top.js +++ b/Top.js @@ -13,6 +13,7 @@ import { useTrainMenu } from "./stateBox/useTrainMenu"; import { AS } from "./storageControl"; import { news } from "./config/newsUpdate"; import { Linking, Platform } from "react-native"; +import GeneralWebView from "./GeneralWebView"; const Stack = createStackNavigator(); export const Top = () => { const { webview } = useCurrentTrain(); @@ -64,6 +65,7 @@ export const Top = () => { component={TrainBase} /> + = ({ return ( scrollHandlers.ref.current?.scrollTo({ y: 0, animated: true })}> - { + navigate("generalWebView", { + uri: "https://jr-shikoku-data-post-system.pages.dev?trainNum=" + trainNum, + useExitButton: false + }); + SheetManager.hide("EachTrainInfo"); + }} > = ({ {isOneMan && } {trainName} - + From 61aca4c75e2bd2a4f6c1fe3968b575c1126206cc Mon Sep 17 00:00:00 2001 From: harukin-expo-dev-env Date: Sun, 15 Jun 2025 05:20:47 +0000 Subject: [PATCH 4/8] =?UTF-8?q?inject=E3=81=AE=E3=83=87=E3=82=B6=E3=82=A4?= =?UTF-8?q?=E3=83=B3=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/webViewInjectjavascript.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/webViewInjectjavascript.ts b/lib/webViewInjectjavascript.ts index 897b297..0b7beda 100644 --- a/lib/webViewInjectjavascript.ts +++ b/lib/webViewInjectjavascript.ts @@ -1302,7 +1302,7 @@ const setNewTrainItem = (element,hasProblem)=>{ break; } if(hasProblem){ - element.style.boxShadow = '0 0 6px rgba(255, 0, 0, 0.77)'; + element.style.boxShadow = '0 0 10px rgba(255, 0, 0, 0.9)'; }else{ element.style.boxShadow = '0 0 4px rgba(0, 0, 0, 0.2)'; } From c526055ddadcbf51c4f9692d0b4d39a4c0c3cd72 Mon Sep 17 00:00:00 2001 From: harukin-expo-dev-env Date: Sun, 15 Jun 2025 09:09:05 +0000 Subject: [PATCH 5/8] =?UTF-8?q?=E8=B2=A8=E7=89=A9=E3=81=AE=E8=A1=A8?= =?UTF-8?q?=E7=A4=BA=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/webViewInjectjavascript.ts | 80 ++++++++++++++++++---------------- 1 file changed, 43 insertions(+), 37 deletions(-) diff --git a/lib/webViewInjectjavascript.ts b/lib/webViewInjectjavascript.ts index 0b7beda..fe5c3d5 100644 --- a/lib/webViewInjectjavascript.ts +++ b/lib/webViewInjectjavascript.ts @@ -1000,6 +1000,39 @@ export const injectJavascriptData: InjectJavascriptData = ( `; const normal_train_name = ` + const getJRF = num =>{ + 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 undefined; + } + } const nameReplace = (列車名データ,列番データ,行き先情報,hasProblem) =>{ let isWanman = false; let trainName = ""; @@ -1055,37 +1088,6 @@ export const injectJavascriptData: InjectJavascriptData = ( } - const getJRF = num =>{ - 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 "臨時貨物"; - } - } let JRF = true; const JRFTemp = getJRF(列番データ); @@ -1259,11 +1261,11 @@ export const injectJavascriptData: InjectJavascriptData = ( const returnText2 = (ToData ? ToData+"行 " : ToData)+ TrainNumber; 行き先情報.innerText = ""; ${uiSetting === "tokyo" ? ` - 行き先情報.insertAdjacentHTML('beforebegin', "

" + (ToData ? ToData + "行 " : ToData) + "

"); - 行き先情報.insertAdjacentHTML('beforebegin', "

" + (isWanman ? "ワンマン " : "") + "

"); - 行き先情報.insertAdjacentHTML('beforebegin', "

" + trainName + "

"); - 行き先情報.insertAdjacentHTML('beforebegin', "

" + viaData + "

"); 行き先情報.insertAdjacentHTML('beforebegin', "

" + TrainNumber + (JRF ? "":"レ") + "

"); + 行き先情報.insertAdjacentHTML('beforebegin', "

" + (isWanman ? "ワンマン " : "") + "

"); + 行き先情報.insertAdjacentHTML('beforebegin', "

" + viaData + "

"); + 行き先情報.insertAdjacentHTML('beforebegin', "

" + trainName + "

"); + 行き先情報.insertAdjacentHTML('beforebegin', "

" + (ToData ? ToData + "行 " : ToData) + "

"); 行き先情報.insertAdjacentHTML('beforebegin', "

" + (hasProblem ? "‼️停止中‼️" : "") + "

"); `: ` 行き先情報.insertAdjacentHTML('beforebegin', "

" + returnText1 + "

"); @@ -1278,23 +1280,27 @@ export const injectJavascriptData: InjectJavascriptData = ( const setNewTrainItem = (element,hasProblem)=>{ + var 列番データ = element.getAttribute('offclick').split('"')[1]; + const JRFTemp = getJRF(列番データ); if(element.getAttribute('offclick').includes("express")){ element.style.borderColor = 'rgba(255, 0, 0, 1)'; }else if(element.getAttribute('offclick').includes("rapid")){ element.style.borderColor = 'rgba(0, 140, 255, 1)'; - }else { + }else if(JRFTemp){ + element.style.borderColor = 'rgba(0, 134, 158, 0.8)'; + }else{ element.style.borderColor = 'white'; } element.style.borderWidth = '2px'; element.style.borderStyle = 'solid'; element.style.borderRadius = '10%'; - var 列番データ = element.getAttribute('offclick').split('"')[1]; switch(true){ case 列番データ.indexOf("H") != -1: case 列番データ.indexOf("R") != -1: case 列番データ.indexOf("E") != -1: case 列番データ.indexOf("A") != -1: case 列番データ.indexOf("B") != -1: + case !!JRFTemp: element.style.backgroundColor = 'rgba(199, 199, 199, 0.8)'; break; default: From b143e4251d118001cad75bc14a53663a2ebf3c42 Mon Sep 17 00:00:00 2001 From: harukin-expo-dev-env Date: Sun, 15 Jun 2025 09:43:05 +0000 Subject: [PATCH 6/8] =?UTF-8?q?=E8=A1=8C=E3=81=8D=E5=85=88=E6=83=85?= =?UTF-8?q?=E5=A0=B1=E3=82=92=E7=8B=AC=E8=87=AA=E3=82=B5=E3=83=BC=E3=83=90?= =?UTF-8?q?=E3=83=BC=E3=83=99=E3=83=BC=E3=82=B9=E3=81=AB=E3=81=99=E3=82=8B?= =?UTF-8?q?=E3=82=88=E3=81=86=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/webViewInjectjavascript.ts | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/lib/webViewInjectjavascript.ts b/lib/webViewInjectjavascript.ts index fe5c3d5..dc6568a 100644 --- a/lib/webViewInjectjavascript.ts +++ b/lib/webViewInjectjavascript.ts @@ -34,6 +34,21 @@ export const injectJavascriptData: InjectJavascriptData = ( fetch("https://n8n.haruk.in/webhook/jr-shikoku-position-custom-datalist").then((response) => response.json()).then((data) => { trainDataList = data[0].data; }).then(()=>setReload()); + let trainDiagramData2 = {}; + fetch("https://n8n.haruk.in/webhook/JR-shikoku-diagram-migrate-original") + .then((response) => response.json()) + .then((res)=>res.data) + .then((res) => { + const data = {}; + res.forEach((d) => { + const keys = Object.keys(d); + data[keys] = d[keys]; + }); + return data; + }) + .then((data) => { + trainDiagramData2 = data; + }); let probremsData = []; fetch("https://n8n.haruk.in/webhook/jrshikoku-position-problems").then((response) => response.json()).then((data) => { probremsData = data.data; @@ -1041,12 +1056,11 @@ export const injectJavascriptData: InjectJavascriptData = ( let TrainNumber = 列番データ; try{ - const diagram = trainTimeInfo[列番データ]; + const diagram = trainDiagramData2[列番データ] || trainTimeInfo[列番データ]; if(diagram){ const diagramData = diagram.split("#"); ToData = diagramData[diagramData.length - 2].split(",")[0]; } - }catch(e){} if(列車名データ.split(":")[1]){ const textBase = 列車名データ.split(":")[1].replace("\\r",""); From c98407527b36709272887adf5d6320434fb980c2 Mon Sep 17 00:00:00 2001 From: harukin-expo-dev-env Date: Sun, 15 Jun 2025 16:35:39 +0000 Subject: [PATCH 7/8] =?UTF-8?q?=E8=A1=8C=E3=81=8D=E5=85=88=E3=81=AE?= =?UTF-8?q?=E8=A3=8F=E3=81=AB=E9=A7=85=E3=81=AE=E8=B7=AF=E7=B7=9A=E3=82=AB?= =?UTF-8?q?=E3=83=A9=E3=83=BC=E3=82=92=E8=A8=AD=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/webViewInjectjavascript.ts | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/lib/webViewInjectjavascript.ts b/lib/webViewInjectjavascript.ts index dc6568a..c4187ed 100644 --- a/lib/webViewInjectjavascript.ts +++ b/lib/webViewInjectjavascript.ts @@ -30,6 +30,10 @@ export const injectJavascriptData: InjectJavascriptData = ( // 上部ヘッダーの取り扱い、自動再読み込み、setStringsの実行 const bootData = ` + let stationList = {}; + fetch("https://n8n.haruk.in/webhook/jr-shikoku-station-list").then((response) => response.json()).then((data) => { + stationList = data; + }); let trainDataList = []; fetch("https://n8n.haruk.in/webhook/jr-shikoku-position-custom-datalist").then((response) => response.json()).then((data) => { trainDataList = data[0].data; @@ -1275,11 +1279,27 @@ export const injectJavascriptData: InjectJavascriptData = ( const returnText2 = (ToData ? ToData+"行 " : ToData)+ TrainNumber; 行き先情報.innerText = ""; ${uiSetting === "tokyo" ? ` + let stationIDs = []; + let stationLines = []; + Object.keys(stationList).forEach((key) => { + const data = stationList[key].find(e => e.Station_JP === ToData )?.StationNumber; + if(data){ + stationIDs.push(data); + stationLines.push(key); + } + }); + let getColors = []; + if(stationLines.length === 0){ + getColors = ["#000"]; + }else{ + getColors = stationLines.map(e => GetLineBarColor(e)); + } + const gradient = getColors.length > 1 ? "linear-gradient(130deg, " + getColors[0] + " 0%, "+ getColors[0]+"50%, "+ getColors[1]+"50%, " + getColors[1] + " 100%)" : getColors[0]; 行き先情報.insertAdjacentHTML('beforebegin', "

" + TrainNumber + (JRF ? "":"レ") + "

"); 行き先情報.insertAdjacentHTML('beforebegin', "

" + (isWanman ? "ワンマン " : "") + "

"); 行き先情報.insertAdjacentHTML('beforebegin', "

" + viaData + "

"); 行き先情報.insertAdjacentHTML('beforebegin', "

" + trainName + "

"); - 行き先情報.insertAdjacentHTML('beforebegin', "

" + (ToData ? ToData + "行 " : ToData) + "

"); + 行き先情報.insertAdjacentHTML('beforebegin', "

" + (ToData ? ToData + "行" : ToData) + "

"); 行き先情報.insertAdjacentHTML('beforebegin', "

" + (hasProblem ? "‼️停止中‼️" : "") + "

"); `: ` 行き先情報.insertAdjacentHTML('beforebegin', "

" + returnText1 + "

"); From 570a55f4307025eaad90d9bf617e82fa87cf24a1 Mon Sep 17 00:00:00 2001 From: harukin-expo-dev-env Date: Thu, 3 Jul 2025 12:08:43 +0000 Subject: [PATCH 8/8] =?UTF-8?q?pushtoken=E3=82=92=E9=80=81=E4=BF=A1?= =?UTF-8?q?=E3=81=97=E3=81=A6true=E3=81=98=E3=82=83=E3=81=AA=E3=81=8B?= =?UTF-8?q?=E3=81=A3=E3=81=9F=E3=82=89webview=E3=81=8C=E9=96=8B=E3=81=91?= =?UTF-8?q?=E3=82=8C=E3=81=AA=E3=81=84=E3=82=88=E3=81=86=E3=81=AB=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EachTrainInfoCore/HeaderText.tsx | 8 +++++++- menu.js | 4 ++-- stateBox/useTrainMenu.js | 20 +++++++++++++++++++ 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/components/ActionSheetComponents/EachTrainInfoCore/HeaderText.tsx b/components/ActionSheetComponents/EachTrainInfoCore/HeaderText.tsx index 5500354..69d0663 100644 --- a/components/ActionSheetComponents/EachTrainInfoCore/HeaderText.tsx +++ b/components/ActionSheetComponents/EachTrainInfoCore/HeaderText.tsx @@ -9,6 +9,8 @@ import { TrainViewIcon } from "./trainViewIcon"; import { OneManText } from "./HeaderTextParts/OneManText"; import { customTrainDataDetector } from "@/components/custom-train-data"; import { InfogramText } from "@/components/ActionSheetComponents/EachTrainInfoCore/HeaderTextParts/InfogramText"; +import { useTrainMenu } from "@/stateBox/useTrainMenu"; +import { useNotification } from "@/stateBox/useNotifications"; type Props = { data: { trainNum: string; limited: string }; @@ -42,6 +44,9 @@ export const HeaderText: FC = ({ }) => { const { limited, trainNum } = data; + const { updatePermission } = useTrainMenu(); + const {expoPushToken} = useNotification(); + // 列車名、種別、フォントの取得 const [typeName, trainName, fontAvailable, isOneMan, infogram] = useMemo(() => { @@ -124,11 +129,12 @@ export const HeaderText: FC = ({ style={{ borderRadius: 5, flexDirection: "row", alignItems: "center" }} onLongPress={() => { navigate("generalWebView", { - uri: "https://jr-shikoku-data-post-system.pages.dev?trainNum=" + trainNum, + uri: "https://jr-shikoku-data-post-system.pages.dev?trainNum=" + trainNum + "&token=" + expoPushToken, useExitButton: false }); SheetManager.hide("EachTrainInfo"); }} + disabled={!updatePermission} > { - scrollRef.current.scrollTo({ + scrollRef?.current.scrollTo({ y: mapHeight > 80 ? mapHeight - 80 : 0, animated: bool, }); }; const goToMap = () => { - scrollRef.current.scrollTo({ + scrollRef?.current.scrollTo({ y: 0, animated: true, }); diff --git a/stateBox/useTrainMenu.js b/stateBox/useTrainMenu.js index c4d8467..f169fc0 100644 --- a/stateBox/useTrainMenu.js +++ b/stateBox/useTrainMenu.js @@ -5,6 +5,8 @@ import { ASCore } from "../storageControl"; import { getStationList2 } from "../lib/getStationList"; import { injectJavascriptData } from "../lib/webViewInjectjavascript"; +import { useNotification } from "../stateBox/useNotifications"; + const initialState = { selectedLine: undefined, setSelectedLine: () => {}, @@ -28,6 +30,8 @@ const initialState = { setTrainInfo: () => {}, trainMenu: "true", setTrainMenu: () => {}, + updatePermission : false, + setUpdatePermission : () => {}, injectJavascript: "", }; @@ -38,6 +42,7 @@ export const useTrainMenu = () => { }; export const TrainMenuProvider = ({ children }) => { + const { expoPushToken } = useNotification(); const [selectedLine, setSelectedLine] = useState(undefined); const [mapsStationData, setMapsStationData] = useState(undefined); useEffect(() => { @@ -50,6 +55,19 @@ export const TrainMenuProvider = ({ children }) => { const [stationMenu, setStationMenu] = useState(undefined); const [LoadError, setLoadError] = useState(false); + //更新権限所有確認 + const [updatePermission, setUpdatePermission] = useState(false); + useEffect(()=>{ + fetch("https://n8n.haruk.in/webhook/data-edit-permission?token=" + expoPushToken).then((res)=>res.json()) + .then((res)=>{ + if(res.data == true){ + setUpdatePermission(true); + }else{ + setUpdatePermission(false); + } + }) + }, [expoPushToken]) + //列車情報表示関連 const [trainInfo, setTrainInfo] = useState({ trainNum: undefined, @@ -106,6 +124,8 @@ export const TrainMenuProvider = ({ children }) => { setTrainInfo, trainMenu, setTrainMenu, + updatePermission, + setUpdatePermission, injectJavascript, }} >