diff --git a/package.json b/package.json index 56a7a58..f25038b 100644 --- a/package.json +++ b/package.json @@ -3,30 +3,43 @@ "version": "1.0.0", "private": true, "dependencies": { - "@types/jest": "24.0.13", + "@types/async-lock": "^1.1.1", + "@types/jest": "24.0.22", "@types/jsonp": "^0.2.0", "@types/lokijs": "^1.5.2", - "@types/node": "12.0.2", - "@types/rc-tree": "^1.11.3", - "@types/react": "16.8.18", - "@types/react-dom": "16.8.4", - "@types/react-helmet": "^5.0.8", - "@types/react-overlays": "^1.1.2", - "@types/react-router-dom": "^4.3.1", - "axios": "^0.18.0", + "@types/node": "12.12.6", + "@types/pako": "^1.0.1", + "@types/react": "16.9.11", + "@types/react-dom": "16.9.3", + "@types/react-helmet": "^5.0.14", + "@types/react-html-parser": "^2.0.1", + "@types/react-overlays": "^1.1.3", + "@types/react-router-dom": "^5.1.2", + "@types/react-router-hash-link": "^1.2.1", + "@types/xregexp": "^3.0.30", + "async-lock": "^1.2.2", + "axios": "^0.19.0", "jsonp": "^0.2.1", - "lokijs": "^1.5.6", - "rc-tree": "^2.0.0", - "react": "^16.8.6", - "react-app-polyfill": "^1.0.1", - "react-dom": "^16.8.6", + "lokijs": "^1.5.8", + "moment": "^2.24.0", + "pako": "^1.0.10", + "rc-tree": "3.0.0-alpha.37", + "react": "^16.11.0", + "react-app-polyfill": "^1.0.4", + "react-cookie": "^4.0.1", + "react-dom": "^16.11.0", + "react-ga": "^2.7.0", "react-helmet": "^5.2.1", + "react-html-parser": "^2.0.2", + "react-image-lightbox": "^5.1.0", "react-overlays": "^1.2.0", - "react-router-dom": "^5.0.0", - "react-scripts": "3.0.1", - "react-spinner-material": "^1.1.1", - "react-transition-group": "^4.0.1", - "typescript": "3.4.5" + "react-router-dom": "^5.1.2", + "react-router-hash-link": "^1.2.2", + "react-scripts": "3.2.0", + "react-spinner-material": "^1.1.3", + "react-transition-group": "^4.3.0", + "typescript": "3.7.2", + "xregexp": "^4.2.4" }, "scripts": { "start": "react-scripts start", diff --git a/src/App.tsx b/src/App.tsx index 689c099..35e91bf 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,6 +1,6 @@ import React, { Component } from 'react'; import { BrowserRouter } from 'react-router-dom'; -import AppRoot from './components/AppRoot'; +import AppRoot from './common/AppRoot'; import './App.css'; class App extends Component { diff --git a/src/assets/images/theme/tree-leaf1.gif b/src/assets/images/theme/tree-leaf1.gif deleted file mode 100644 index ac34c41..0000000 Binary files a/src/assets/images/theme/tree-leaf1.gif and /dev/null differ diff --git a/src/assets/images/theme/tree-leaf2.gif b/src/assets/images/theme/tree-leaf2.gif deleted file mode 100644 index 6408cf1..0000000 Binary files a/src/assets/images/theme/tree-leaf2.gif and /dev/null differ diff --git a/src/assets/images/theme/tree-line.gif b/src/assets/images/theme/tree-line.gif deleted file mode 100644 index aab1527..0000000 Binary files a/src/assets/images/theme/tree-line.gif and /dev/null differ diff --git a/src/assets/images/theme/tree-parent1.gif b/src/assets/images/theme/tree-parent1.gif deleted file mode 100644 index ac2389d..0000000 Binary files a/src/assets/images/theme/tree-parent1.gif and /dev/null differ diff --git a/src/assets/images/theme/tree-parent2.gif b/src/assets/images/theme/tree-parent2.gif deleted file mode 100644 index d35fc5a..0000000 Binary files a/src/assets/images/theme/tree-parent2.gif and /dev/null differ diff --git a/src/assets/images/theme/tree-root.gif b/src/assets/images/theme/tree-root.gif deleted file mode 100644 index 960a061..0000000 Binary files a/src/assets/images/theme/tree-root.gif and /dev/null differ diff --git a/src/components/About.module.css b/src/common/About.module.css similarity index 100% rename from src/components/About.module.css rename to src/common/About.module.css diff --git a/src/components/About.tsx b/src/common/About.tsx similarity index 100% rename from src/components/About.tsx rename to src/common/About.tsx diff --git a/src/common/AppRoot.tsx b/src/common/AppRoot.tsx new file mode 100644 index 0000000..d52db08 --- /dev/null +++ b/src/common/AppRoot.tsx @@ -0,0 +1,81 @@ +import React, { Component } from 'react'; +import { ReactCookieProps, withCookies } from 'react-cookie'; +import ReactGA from 'react-ga'; +import Helmet from 'react-helmet'; +import { RouteComponentProps, withRouter } from 'react-router-dom'; +import Config, { MultiLang } from '../config'; +import Functions from '../functions'; +import Container from './Container'; +import Footer from './Footer'; +import Header from './Header'; + + +interface Props extends RouteComponentProps, ReactCookieProps { } +interface State { + lang: MultiLang; +} + +class AppRoot extends Component { + + constructor(props: Props) { + super(props); + this.state = { lang: 'en' }; + if (Config.GOOGLE_ANALYTICS_TRACKING_ID !== '') { + ReactGA.initialize(Config.GOOGLE_ANALYTICS_TRACKING_ID); + } + } + + static getDerivedStateFromProps(nextProps: Props, prevState: State) { + const params = new URLSearchParams(nextProps.location.search); + const param_lang = params.get('ml_lang'); + const cookie_lang = typeof nextProps.cookies !== 'undefined' ? nextProps.cookies.get('ml_lang') : null; + let lang = param_lang || (typeof cookie_lang === 'string' ? cookie_lang : null) || prevState.lang; + if (lang !== 'en' && lang !== 'ja') { + lang = 'en'; + } + if (cookie_lang !== lang) { + if (typeof nextProps.cookies !== 'undefined') { + nextProps.cookies.set('ml_lang', lang, { path: '/' }); + } + } + if (prevState.lang !== lang) { + return { lang }; + } + return null; + } + + componentDidMount() { + const { pathname } = this.props.location; + if (Config.GOOGLE_ANALYTICS_TRACKING_ID !== '') { + ReactGA.set({ page: pathname }); + ReactGA.pageview(pathname); + } + } + + componentDidUpdate(prevProps: Props) { + const { pathname, search } = this.props.location; + if (Config.GOOGLE_ANALYTICS_TRACKING_ID !== '') { + ReactGA.set({ page: pathname }); + ReactGA.pageview(pathname); + } + if (pathname !== prevProps.location.pathname || search !== prevProps.location.search) { + window.scrollTo(0, 0); + } + } + + render() { + const { lang } = this.state; + return ( + <> + + {Functions.siteTitle(lang)} - {Functions.siteSlogan(lang)} + +
+ +