newsを変数管理式に変更

This commit is contained in:
harukin-DeskMini 2022-07-28 05:02:52 +09:00
parent 69de6e358a
commit 197765e7f1
3 changed files with 147 additions and 92 deletions

176
Apps.js
View File

@ -1,20 +1,22 @@
import React, { useEffect, useRef, useState } from 'react'; import React, { useEffect, useRef, useState } from "react";
import {View, Platform,ToastAndroid} from 'react-native'; import { View, Platform, ToastAndroid } from "react-native";
import {WebView} from 'react-native-webview'; import { WebView } from "react-native-webview";
import Constants from 'expo-constants'; import Constants from "expo-constants";
import AsyncStorage from '@react-native-async-storage/async-storage'; import AsyncStorage from "@react-native-async-storage/async-storage";
import { news } from "./config/newsUpdate";
/* /*
import StatusbarDetect from './StatusbarDetect'; import StatusbarDetect from './StatusbarDetect';
var Status = StatusbarDetect(); */ var Status = StatusbarDetect(); */
export var webview = null; export var webview = null;
export default function Apps (props) { export default function Apps(props) {
const { navigation: { navigate } } = props; const {
var urlcache=""; navigation: { navigate },
} = props;
var urlcache = "";
const webview = useRef(); const webview = useRef();
const [iconSetting, setIconSetting] = useState(undefined) const [iconSetting, setIconSetting] = useState(undefined);
const bootData = ` const bootData = `
document.getElementById('header').querySelector('a').style.display = 'none'; document.getElementById('header').querySelector('a').style.display = 'none';
@ -34,7 +36,7 @@ export default function Apps (props) {
setReload(); setReload();
`; `;
const trainIconMaker = ` const trainIconMaker = `
const setStationIcon = (行き先アイコン,img) =>{ const setStationIcon = (行き先アイコン,img) =>{
let newItem = document.createElement("div"); let newItem = document.createElement("div");
if(行き先アイコン.getAttribute("style").includes("left")){ if(行き先アイコン.getAttribute("style").includes("left")){
@ -45,11 +47,11 @@ const trainIconMaker = `
} }
行き先アイコン.remove(); 行き先アイコン.remove();
} }
` `;
const trainIcon =
iconSetting == "true"
const trainIcon = iconSetting == "true" ? ` ? `
switch(列番データ){ switch(列番データ){
//しおかぜメイン //しおかぜメイン
//8000 ノーマル //8000 ノーマル
@ -466,12 +468,16 @@ switch(列番データ){
default: default:
break; break;
} }
` : ``; `
: ``;
const JRF_icon = iconSetting == "true" ? ` const JRF_icon =
iconSetting == "true"
? `
JRF || setStationIcon(element.getElementsByTagName("img")[0],'http://www.trainfrontview.net/f/ef210a.png'); JRF || setStationIcon(element.getElementsByTagName("img")[0],'http://www.trainfrontview.net/f/ef210a.png');
` : ``; `
const normal_train_name = ` : ``;
const normal_train_name = `
if(new RegExp(/^4[1-9]\\d\\d[DM]$/).test(列番データ) || new RegExp(/^5[1-7]\\d\\d[DM]$/).test(列番データ)){ if(new RegExp(/^4[1-9]\\d\\d[DM]$/).test(列番データ) || new RegExp(/^5[1-7]\\d\\d[DM]$/).test(列番データ)){
行き先情報.innerText = "ワンマン\\n"+行き先情報.innerText; 行き先情報.innerText = "ワンマン\\n"+行き先情報.innerText;
flag=true; flag=true;
@ -491,8 +497,9 @@ const normal_train_name = `
else if(列番データ.indexOf("S") != -1){ else if(列番データ.indexOf("S") != -1){
行き先情報.innerText = 行き先情報.innerText+"臨時列車\\n"; 行き先情報.innerText = 行き先情報.innerText+"臨時列車\\n";
} }
` `;
const JRF_name = ` const JRF_name =
`
let JRF = false; let JRF = false;
switch(列番データ){ switch(列番データ){
case "71": case "71":
@ -537,7 +544,7 @@ const JRF_name = `
default: default:
JRF = true; JRF = true;
} }
`+JRF_icon; ` + JRF_icon;
const TKT_name = ` const TKT_name = `
//安芸行と併結列車を個別に表示、それ以外をdefaultで下りなら既定の行き先を、上りなら奈半利行を設定 //安芸行と併結列車を個別に表示、それ以外をdefaultで下りなら既定の行き先を、上りなら奈半利行を設定
@ -574,9 +581,10 @@ const JRF_name = `
break; break;
} }
` `;
const textInsert = ` const textInsert =
`
const setStrings = () =>{ const setStrings = () =>{
try { try {
var elements = document.querySelectorAll('[onclick]'); var elements = document.querySelectorAll('[onclick]');
@ -587,7 +595,12 @@ const setStrings = () =>{
var flag=false; var flag=false;
var TrainType = undefined; var TrainType = undefined;
if(行き先情報.innerText.includes(列番データ))continue; //回避 if(行き先情報.innerText.includes(列番データ))continue; //回避
`+trainIcon+normal_train_name+JRF_name+TKT_name+` ` +
trainIcon +
normal_train_name +
JRF_name +
TKT_name +
`
//列番付与 //列番付与
行き先情報.innerText = 行き先情報.innerText+列番データ+(JRF ? "":"レ"); 行き先情報.innerText = 行き先情報.innerText+列番データ+(JRF ? "":"レ");
} }
@ -685,69 +698,84 @@ observer.observe(target, {
childList: true, // 子ノードの変化を監視 childList: true, // 子ノードの変化を監視
//subtree: true // 子孫ノードも監視対象に含める //subtree: true // 子孫ノードも監視対象に含める
}); });
` `;
const injectJavascriptData = bootData+trainIconMaker+textInsert; const injectJavascriptData = bootData + trainIconMaker + textInsert;
useEffect(() => {
useEffect(()=>{
AsyncStorage.getItem("status") AsyncStorage.getItem("status")
.then(d=>{ .then((d) => {
if(d != "2022/06/11"){ if (d != news) {
navigate('news'); navigate("news");
} }
}) })
.catch(e=>{ .catch((e) => {
navigate('news'); navigate("news");
}) });
},[]) }, []);
useEffect(()=>{ useEffect(() => {
AsyncStorage.getItem("iconSwitch").then( d =>{ AsyncStorage.getItem("iconSwitch")
if(d){ .then((d) => {
setIconSetting(d); if (d) {
} setIconSetting(d);
else{ } else {
AsyncStorage.setItem("iconSwitch","true").then(()=>Updates.reloadAsync()) AsyncStorage.setItem("iconSwitch", "true").then(() =>
} Updates.reloadAsync()
);
}
}).catch(d=>AsyncStorage.setItem("iconSwitch","true").then(()=>Updates.reloadAsync())) })
},[]) .catch((d) =>
AsyncStorage.setItem("iconSwitch", "true").then(() =>
Updates.reloadAsync()
)
);
}, []);
return ( return (
<View style={{height:"100%",paddingTop: Platform.OS == "ios" ? Constants.statusBarHeight: 0,}}> <View
style={{
height: "100%",
paddingTop: Platform.OS == "ios" ? Constants.statusBarHeight : 0,
}}
>
{/* {Status} */} {/* {Status} */}
<WebView <WebView
useWebKit={true} useWebKit={true}
ref={webview} ref={webview}
source={{uri: 'https://train.jr-shikoku.co.jp/sp.html'}} source={{ uri: "https://train.jr-shikoku.co.jp/sp.html" }}
originWhitelist={['https://train.jr-shikoku.co.jp','https://train.jr-shikoku.co.jp/sp.html']} originWhitelist={[
mixedContentMode={'compatibility'} "https://train.jr-shikoku.co.jp",
javaScriptEnabled={true} "https://train.jr-shikoku.co.jp/sp.html",
allowsBackForwardNavigationGestures={true} ]}
setSupportMultipleWindows={false} mixedContentMode={"compatibility"}
onNavigationStateChange={ javaScriptEnabled={true}
event =>{ allowsBackForwardNavigationGestures={true}
setSupportMultipleWindows={false}
onNavigationStateChange={(event) => {
console.log(event); console.log(event);
if(event.url != urlcache){//URL二重判定回避 if (event.url != urlcache) {
//URL二重判定回避
urlcache = event.url; urlcache = event.url;
if (event.url.includes("https://train.jr-shikoku.co.jp/usage.htm")) { if (
if(Platform.OS==="android")navigate('howto'); event.url.includes("https://train.jr-shikoku.co.jp/usage.htm")
) {
if (Platform.OS === "android") navigate("howto");
webview?.current.goBack(); webview?.current.goBack();
//Actions.howto(); //Actions.howto();
} } else if (
else if (event.url.includes("https://train.jr-shikoku.co.jp/train.html")) { event.url.includes("https://train.jr-shikoku.co.jp/train.html")
) {
//Actions.trainbase({info: event.url}); //Actions.trainbase({info: event.url});
if(Platform.OS==="android")navigate('trainbase', {info: event.url}); if (Platform.OS === "android")
navigate("trainbase", { info: event.url });
webview?.current.goBack(); webview?.current.goBack();
} }
} }
} }}
} onMessage={(event) => {}}
onMessage={(event)=>{}} injectedJavaScript={injectJavascriptData}
injectedJavaScript={injectJavascriptData}/> />
</View> </View>
); );
} }

View File

@ -1,19 +1,45 @@
import React, { } from 'react'; import React from "react";
import {View,Text,TouchableOpacity } from 'react-native'; import { View, Text, TouchableOpacity } from "react-native";
import {WebView} from 'react-native-webview'; import { WebView } from "react-native-webview";
import StatusbarDetect from '../StatusbarDetect'; import StatusbarDetect from "../StatusbarDetect";
import AsyncStorage from '@react-native-async-storage/async-storage'; import AsyncStorage from "@react-native-async-storage/async-storage";
import { news } from "../config/newsUpdate";
var Status = StatusbarDetect(); var Status = StatusbarDetect();
export default function News(props){ export default function News(props) {
const { navigation: { navigate } } = props; const {
return( navigation: { navigate },
<View style={{height:"100%",backgroundColor:"#0099CC"}}> } = props;
<WebView useWebKit={true} source={{uri: 'https://nexcloud.haruk.in/sites/press-harukin/JRShikokuApps/2022-6-11'}} mixedContentMode={'compatibility'} javaScriptEnabled={true}/> return (
<TouchableOpacity style={{padding:10,flexDirection:"row",borderColor:"white",borderWidth:1,margin:10,borderRadius:5,alignItems:"center"}} onPress={()=>{AsyncStorage.setItem('status', "2022/04/14");navigate('Apps');}}> <View style={{ height: "100%", backgroundColor: "#0099CC" }}>
<View style={{flex:1}} /> <WebView
<Text style={{fontSize:25,fontWeight:"bold",color:"white"}}>更新情報を閉じる</Text> useWebKit={true}
<View style={{flex:1}} /> source={{
</TouchableOpacity> uri: `https://nexcloud.haruk.in/sites/press-harukin/JRShikokuApps/${news}`,
</View> }}
) mixedContentMode={"compatibility"}
} javaScriptEnabled={true}
/>
<TouchableOpacity
style={{
padding: 10,
flexDirection: "row",
borderColor: "white",
borderWidth: 1,
margin: 10,
borderRadius: 5,
alignItems: "center",
}}
onPress={() => {
AsyncStorage.setItem("status", news);
navigate("Apps");
}}
>
<View style={{ flex: 1 }} />
<Text style={{ fontSize: 25, fontWeight: "bold", color: "white" }}>
更新情報を閉じる
</Text>
<View style={{ flex: 1 }} />
</TouchableOpacity>
</View>
);
}

1
config/newsUpdate.js Normal file
View File

@ -0,0 +1 @@
export const news = "2022/06/11";