Niedzielski has uploaded a new change for review. (
https://gerrit.wikimedia.org/r/382449 )
Change subject: New: render pages
......................................................................
New: render pages
Styling will come in T173330. A common component for header, footer, and
last modified will come in T173326.
Bug: T173328
Change-Id: Ib2eeedf4b1f8f73837af332329738c7a3f7c24b3
---
A src/common/components/header-level/header-level.tsx
A src/common/components/section/section.tsx
M src/common/pages/home.tsx
M src/common/pages/wiki.tsx
4 files changed, 89 insertions(+), 4 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/marvin refs/changes/49/382449/1
diff --git a/src/common/components/header-level/header-level.tsx
b/src/common/components/header-level/header-level.tsx
new file mode 100644
index 0000000..6b5ba24
--- /dev/null
+++ b/src/common/components/header-level/header-level.tsx
@@ -0,0 +1,26 @@
+import { h } from "preact";
+import { ChildrenProps, ClassProps, classOf } from "../preact-utils";
+
+export default function HeaderLevel({
+ level,
+ children,
+ ...props
+}: { level: number } & ChildrenProps & ClassProps): JSX.Element {
+ const classes = classOf("HeaderLevel", props.class);
+ switch (level) {
+ case 0:
+ return <div class={classes}>{children}</div>;
+ case 1:
+ return <h1 class={classes}>{children}</h1>;
+ case 2:
+ return <h2 class={classes}>{children}</h2>;
+ case 3:
+ return <h3 class={classes}>{children}</h3>;
+ case 4:
+ return <h4 class={classes}>{children}</h4>;
+ case 5:
+ return <h5 class={classes}>{children}</h5>;
+ default:
+ return <h6 class={classes}>{children}</h6>;
+ }
+}
diff --git a/src/common/components/section/section.tsx
b/src/common/components/section/section.tsx
new file mode 100644
index 0000000..8b466d8
--- /dev/null
+++ b/src/common/components/section/section.tsx
@@ -0,0 +1,22 @@
+import { h } from "preact";
+import { PageSection } from "../../models/page/page";
+import HeaderLevel from "../header-level/header-level";
+
+export interface Props {
+ section: PageSection;
+}
+
+export default function Section({ section }: Props): JSX.Element {
+ return (
+ <section class="Section">
+ <HeaderLevel class="Section-title" level={section.level}>
+ <div dangerouslySetInnerHTML={{ __html: section.titleHTML }} />
+ </HeaderLevel>
+
+ <div
+ className="Section-body"
+ dangerouslySetInnerHTML={{ __html: section.contentHTML }}
+ />
+ </section>
+ );
+}
diff --git a/src/common/pages/home.tsx b/src/common/pages/home.tsx
index 7ca4a95..bb478eb 100644
--- a/src/common/pages/home.tsx
+++ b/src/common/pages/home.tsx
@@ -26,13 +26,25 @@
},
{
title: "Bill_&_Ted's_Excellent_Adventure",
- text: "With two paragraphs"
+ text: "With two paragraphs, unencoded path, and styled title"
}
];
const testPages = [
{
title: "Ice_cream",
text: "A normal article"
+ },
+ {
+ title: "Cake_(disambiguation)",
+ text: "Disambiguation"
+ },
+ {
+ title: "Cheese_cake",
+ text: "Redirect"
+ },
+ {
+ title: "Carrot cake",
+ text: "Encoding redirect"
}
];
return (
diff --git a/src/common/pages/wiki.tsx b/src/common/pages/wiki.tsx
index af7e8d6..9044499 100644
--- a/src/common/pages/wiki.tsx
+++ b/src/common/pages/wiki.tsx
@@ -1,7 +1,12 @@
import { h } from "preact";
import App from "../components/app/app";
+import Content from "../components/content/content";
+import { Page as PageModel } from "../models/page/page";
import { PageTitleID, PageTitlePath } from "../models/page/title";
+import Page from "../components/page/page";
import { RouteParams } from "../routers/route";
+import { requestPage } from "../data-clients/page-data-client";
+import Section from "../components/section/section";
export interface Params extends RouteParams {
/**
@@ -12,10 +17,30 @@
}
export interface Props {
- title: string;
+ page: PageModel;
}
export const getInitialProps = ({ title }: Params): Promise<Props> =>
- Promise.resolve({ title });
+ requestPage({ titlePath: title }).then(page => ({ page }));
-export const Component = ({ title }: Props): JSX.Element => <App>{title}</App>;
+export const Component = ({ page }: Props): JSX.Element => (
+ <App>
+ <Page
+ title={<Title page={page} />}
+ subtitle={page.descriptionText}
+ footer={<Footer page={page} />}
+ >
+ {page.sections.map(section => <Section section={section} />)}
+ </Page>
+ </App>
+);
+
+const Title = ({ page }: Props) => (
+ <Content>
+ <h1 dangerouslySetInnerHTML={{ __html: page.titleHTML }} />
+ </Content>
+);
+
+const Footer = ({ page }: Props) => (
+ <span>Last updated {page.lastModified.toLocaleString("en-GB")}</span>
+);
--
To view, visit https://gerrit.wikimedia.org/r/382449
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib2eeedf4b1f8f73837af332329738c7a3f7c24b3
Gerrit-PatchSet: 1
Gerrit-Project: marvin
Gerrit-Branch: master
Gerrit-Owner: Niedzielski <[email protected]>
Gerrit-Reviewer: Sniedzielski <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits