mirror of
				https://github.com/DerTyp7/explainegy-nextjs.git
				synced 2025-10-31 05:37:12 +01:00 
			
		
		
		
	jh
This commit is contained in:
		| @@ -20,6 +20,11 @@ export default function ContentTable({ | ||||
| 						); | ||||
| 					})} | ||||
| 				</div> | ||||
| 				{tutorialMeta?.contentTable?.length < 15 ? ( | ||||
| 					<div className={styles.adContainer}>Future advertisement</div> | ||||
| 				) : ( | ||||
| 					"" | ||||
| 				)} | ||||
| 			</div> | ||||
| 		</div> | ||||
| 	); | ||||
|   | ||||
| @@ -6,13 +6,29 @@ import Prism from "prismjs"; | ||||
| import "../../../styles/prism_themes/prism-one-dark.css"; | ||||
| //import "../../../styles/prism_themes/prism-one-light.css";
 | ||||
| 
 | ||||
| export default function LoadPrism() { | ||||
| export default function LoadMarkdown() { | ||||
| 	useEffect(() => { | ||||
| 		document.querySelectorAll("pre").forEach((pre) => { | ||||
| 			if (pre.classList.length < 1) { | ||||
| 				pre.classList.add("language-"); | ||||
| 			} | ||||
| 		}); | ||||
| 
 | ||||
| 		document.querySelectorAll("blockquote").forEach((bq) => { | ||||
| 			bq.classList.add("blockquote"); | ||||
| 		}); | ||||
| 
 | ||||
| 		document.querySelectorAll("li").forEach((li) => { | ||||
| 			let paragraphText = ""; | ||||
| 			li.querySelectorAll("p").forEach((p) => { | ||||
| 				paragraphText = p.innerHTML; | ||||
| 			}); | ||||
| 
 | ||||
| 			if (paragraphText != "") { | ||||
| 				li.innerHTML = paragraphText; | ||||
| 			} | ||||
| 		}); | ||||
| 
 | ||||
| 		Prism.highlightAll(); | ||||
| 	}, []); | ||||
| 	return <div></div>; | ||||
| @@ -3,7 +3,26 @@ import styles from "../../../styles/Sidebar.module.scss"; | ||||
| export default function Sidebar() { | ||||
| 	return ( | ||||
| 		<div className={styles.sidebar}> | ||||
| 			<div className={styles.stickyContainer}>Sidebar</div> | ||||
| 			<div className={styles.stickyContainer}> | ||||
| 				<div className={styles.sidebarContainer}> | ||||
| 					<h3>Popular</h3> | ||||
| 					<a href="#"> Set up Docker</a> | ||||
| 					<a href="#"> Set up Docker</a> | ||||
| 					<a href="#"> Set up Docker</a> | ||||
| 					<a href="#"> Set up Docker</a> | ||||
| 					<a href="#"> Set up Docker</a> | ||||
| 				</div> | ||||
|  | ||||
| 				<div className={styles.sidebarContainer}> | ||||
| 					<h3>Related</h3> | ||||
| 					<a href="#"> Set up Docker</a> | ||||
| 					<a href="#"> Set up Docker</a> | ||||
| 					<a href="#"> Set up Docker</a> | ||||
| 					<a href="#"> Set up Docker</a> | ||||
| 					<a href="#"> Set up Docker</a> | ||||
| 				</div> | ||||
| 				<div className={styles.adContainer}>Future advertisement</div> | ||||
| 			</div> | ||||
| 		</div> | ||||
| 	); | ||||
| } | ||||
|   | ||||
							
								
								
									
										15
									
								
								app/tutorials/[tutorialId]/head.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								app/tutorials/[tutorialId]/head.tsx
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | ||||
| import { GetTutorialMeta, TutorialMeta } from "./page"; | ||||
| export default async function Head({ | ||||
| 	params, | ||||
| }: { | ||||
| 	params: { tutorialId: string }; | ||||
| }) { | ||||
| 	const tutorialId: string = params.tutorialId; | ||||
| 	const tutorialMeta: TutorialMeta = await GetTutorialMeta(tutorialId); | ||||
| 	return ( | ||||
| 		<> | ||||
| 			<title>{tutorialMeta.title}</title> | ||||
| 			<meta name="viewport" content="width=device-width, initial-scale=1" /> | ||||
| 		</> | ||||
| 	); | ||||
| } | ||||
| @@ -1,3 +1,4 @@ | ||||
| import "../../../styles/markdown.scss"; | ||||
| export default function Layout({ children }) { | ||||
| 	return <div>{children}</div>; | ||||
| } | ||||
|   | ||||
| @@ -5,7 +5,8 @@ import { getDownloadURL, ref } from "firebase/storage"; | ||||
| import ContentTable from "./ContentTable"; | ||||
| import Sidebar from "./Sidebar"; | ||||
| import styles from "../../../styles/Tutorial.module.scss"; | ||||
| import LoadPrism from "./LoadPrism"; | ||||
| import LoadMarkdown from "./LoadMarkdown"; | ||||
| import Head from "next/head"; | ||||
|  | ||||
| export type ContentTable = { | ||||
| 	anchor: string; | ||||
| @@ -18,7 +19,9 @@ export type TutorialMeta = { | ||||
| 	contentTable: ContentTable[]; | ||||
| }; | ||||
|  | ||||
| async function GetTutorialMeta(tutorialId: string): Promise<TutorialMeta> { | ||||
| export async function GetTutorialMeta( | ||||
| 	tutorialId: string | ||||
| ): Promise<TutorialMeta> { | ||||
| 	const firebaseData = await getDoc(doc(db, "tutorials", tutorialId)); | ||||
| 	const firebaseJsonData = firebaseData.data(); | ||||
|  | ||||
| @@ -36,7 +39,7 @@ async function FetchTutorialMarkdown(tutorialId: string) { | ||||
| 			ref(storage, `markdowns/${tutorialId}.md`) | ||||
| 		); | ||||
| 		const data = await fetch(url, { | ||||
| 			next: { revalidate: 10 }, | ||||
| 			next: { revalidate: 30 * 60 }, | ||||
| 		}); | ||||
| 		return await data.text(); | ||||
| 	} catch { | ||||
| @@ -68,12 +71,12 @@ export default async function Tutorial({ | ||||
| 					<h1>{tutorialMeta.title}</h1> | ||||
| 				</div> | ||||
| 				<div | ||||
| 					className={styles.markdown} | ||||
| 					className="markdown" | ||||
| 					dangerouslySetInnerHTML={{ | ||||
| 						__html: ParseMarkdown(markdown), | ||||
| 					}} | ||||
| 				></div> | ||||
| 				<LoadPrism /> | ||||
| 				<LoadMarkdown /> | ||||
| 			</div> | ||||
| 			<Sidebar /> | ||||
| 		</div> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Janis
					Janis