2020-06-16 09:32:48 +00:00
|
|
|
import { getPageHTML } from "../wiki";
|
|
|
|
import { darken, ColorFmt, lighten } from "../darkmode";
|
|
|
|
import * as React from "react";
|
2020-06-16 10:51:24 +00:00
|
|
|
import { useState, useEffect, useRef } from "react";
|
|
|
|
import userscript from "../userscript";
|
2020-06-16 15:08:44 +00:00
|
|
|
import speen from "~/assets/images/speen.svg";
|
2020-06-16 09:32:48 +00:00
|
|
|
|
2020-06-16 15:08:44 +00:00
|
|
|
export default function WikiPage({ page, visible }) {
|
2020-06-16 16:10:44 +00:00
|
|
|
const [data, setData] = useState({
|
|
|
|
loaded: false,
|
|
|
|
processed: false,
|
|
|
|
html: "",
|
|
|
|
});
|
2020-06-16 10:51:24 +00:00
|
|
|
const containerRef = useRef(null);
|
|
|
|
|
|
|
|
// Fetch page
|
2020-06-16 09:32:48 +00:00
|
|
|
useEffect(() => {
|
2020-06-16 16:21:12 +00:00
|
|
|
console.log(page + ": fetching");
|
2020-06-16 09:32:48 +00:00
|
|
|
(async () => {
|
|
|
|
let html = await getPageHTML(page);
|
2020-06-16 16:10:44 +00:00
|
|
|
// Convert relative links to absolute
|
|
|
|
html = html.replace(/"\/wiki/gi, '"//tgstation13.org/wiki');
|
|
|
|
setData({ loaded: true, processed: false, html });
|
2020-06-16 09:32:48 +00:00
|
|
|
})();
|
|
|
|
}, []);
|
2020-06-16 10:51:24 +00:00
|
|
|
|
2020-06-16 16:10:44 +00:00
|
|
|
// Process page
|
2020-06-16 10:51:24 +00:00
|
|
|
useEffect(() => {
|
2020-06-16 16:21:12 +00:00
|
|
|
console.log(page + ": processing");
|
2020-06-16 16:10:44 +00:00
|
|
|
if (data.loaded == true && data.processed == false) {
|
2020-06-16 10:51:24 +00:00
|
|
|
userscript(containerRef.current, page);
|
2020-06-16 16:21:12 +00:00
|
|
|
console.log(page + ": userscript applied");
|
2020-06-16 10:51:24 +00:00
|
|
|
}
|
|
|
|
}, [data]);
|
|
|
|
|
2020-06-16 16:10:44 +00:00
|
|
|
// Page fetched, instance userscript
|
|
|
|
useEffect(() => {
|
|
|
|
if (data.loaded) {
|
2020-06-16 16:21:12 +00:00
|
|
|
console.log(page + ": loaded!");
|
2020-06-16 16:10:44 +00:00
|
|
|
}
|
|
|
|
}, [data]);
|
|
|
|
|
2020-06-16 09:32:48 +00:00
|
|
|
if (!data.loaded) {
|
2020-06-16 15:08:44 +00:00
|
|
|
return (
|
2020-06-16 16:10:44 +00:00
|
|
|
<div
|
|
|
|
className="page waiting"
|
|
|
|
style={{
|
|
|
|
visibility: visible ? "" : "hidden",
|
|
|
|
}}
|
|
|
|
>
|
2020-06-16 15:08:44 +00:00
|
|
|
<div className="speen">
|
|
|
|
<img src={speen} />
|
2020-06-17 00:43:10 +00:00
|
|
|
<p>You start skimming through the manual...</p>
|
2020-06-16 15:08:44 +00:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
);
|
2020-06-16 09:32:48 +00:00
|
|
|
} else {
|
|
|
|
return (
|
|
|
|
<div
|
2020-06-16 10:51:24 +00:00
|
|
|
ref={containerRef}
|
2020-06-16 09:32:48 +00:00
|
|
|
className="page"
|
2020-06-16 15:08:44 +00:00
|
|
|
style={{
|
2020-06-16 16:00:29 +00:00
|
|
|
visibility: visible ? "" : "hidden",
|
2020-06-16 15:08:44 +00:00
|
|
|
}}
|
2020-06-16 09:32:48 +00:00
|
|
|
dangerouslySetInnerHTML={{ __html: data.html }}
|
|
|
|
></div>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|