Skip to content

Commit 889bda7

Browse files
authored
feat: page titles and example controls (#89)
* feat: configure titles using router injector * feat: example controls * feedback: pin deps
1 parent c0f8544 commit 889bda7

File tree

7 files changed

+72
-25
lines changed

7 files changed

+72
-25
lines changed

package-lock.json

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
"@dojo/framework": "~7.0.0"
1717
},
1818
"dependencies": {
19+
"@fortawesome/fontawesome-free": "5.15.3",
1920
"canonical-path": "1.0.0",
2021
"cldr-data": "36.0.0",
2122
"postcss": "7.0.21",

src/App.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ import getWidgetProperties from './interfaces.block';
1818
import getTheme from './theme.block';
1919
import code from './code.block';
2020

21+
import '@fortawesome/fontawesome-free/css/all.css';
22+
2123
function getWidgetFileNames(config: any): { [index: string]: string } {
2224
return Object.keys(config.widgets).reduce((newConfig, widget) => {
2325
return {

src/Example.tsx

Lines changed: 56 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -85,31 +85,68 @@ export default factory(function Example({
8585
dimensions.height = '600px';
8686
}
8787

88+
const isFullscreen = icache.get('isFullscreen');
89+
const isCodeShowing = icache.getOrSet('isCodeShowing', true);
90+
8891
return (
8992
<div>
9093
{isOverview && <div innerHTML={widgetReadme} />}
9194
{isOverview && <HorizontalRule />}
9295
<h2 classes="text-2xl h mb-4">{example.title || 'Example'}</h2>
93-
<div classes="bg-white rounded-t-lg overflow-hidden border-b-0 border-t border-l border-r border-gray-400 p-4">
94-
{example.sandbox ? (
95-
<iframe
96-
src={`?cacheBust=${widgetName}-${
97-
example.filename
98-
}-${themeName}#widget/${widgetName}/sandbox/${example.filename.toLowerCase()}?theme=${themeName}`}
99-
classes="w-full iframe"
100-
styles={dimensions}
101-
/>
102-
) : (
103-
<div key="example-container" styles={example.size ? dimensions : {}}>
104-
<example.module />
105-
</div>
106-
)}
107-
</div>
108-
<div classes="rounded-b-lg bg-gray-800">
109-
<pre classes="bg-blue-900 language-ts rounded px-4 py-4">
110-
<code classes="language-ts" innerHTML={widgetExample} />
111-
</pre>
96+
<div
97+
classes={`bg-white overflow-hidden border-t border-l border-r border-gray-400 ${
98+
!isCodeShowing ? 'border-b' : 'border-b-0'
99+
} ${isFullscreen ? 'fixed top-0 left-0 w-screen h-screen z-50' : 'rounded-t-lg'}`}
100+
>
101+
<div
102+
classes={`border border-gray-400 border-t-0 border-l-0 border-r-0 flex justify-end ${
103+
isFullscreen ? 'p-6' : 'px-4 py-2'
104+
}`}
105+
>
106+
<button
107+
classes={`border-0 appearance-none bg-transparent cursor-pointer p-0 ${
108+
isFullscreen ? 'text-black mr-6' : 'text-gray-500 mr-4'
109+
}`}
110+
onclick={() => icache.set('isFullscreen', !isFullscreen)}
111+
>
112+
{isFullscreen ? (
113+
<i class="fas fa-compress-alt"></i>
114+
) : (
115+
<i class="fas fa-expand-alt"></i>
116+
)}
117+
</button>
118+
<button
119+
classes={`border-0 appearance-none bg-transparent cursor-pointer p-0 ${
120+
isCodeShowing ? 'text-black' : 'text-gray-500'
121+
}`}
122+
onclick={() => icache.set('isCodeShowing', !isCodeShowing)}
123+
>
124+
<i class="fas fa-code"></i>
125+
</button>
126+
</div>
127+
<div classes="p-4">
128+
{example.sandbox ? (
129+
<iframe
130+
src={`?cacheBust=${widgetName}-${
131+
example.filename
132+
}-${themeName}#widget/${widgetName}/sandbox/${example.filename.toLowerCase()}?theme=${themeName}`}
133+
classes="w-full iframe"
134+
styles={dimensions}
135+
/>
136+
) : (
137+
<div key="example-container" styles={example.size ? dimensions : {}}>
138+
<example.module />
139+
</div>
140+
)}
141+
</div>
112142
</div>
143+
{isCodeShowing && (
144+
<div classes="rounded-b-lg bg-gray-800">
145+
<pre classes="bg-blue-900 language-ts rounded px-4 py-4">
146+
<code classes="language-ts" innerHTML={widgetExample} />
147+
</pre>
148+
</div>
149+
)}
113150
{codesandboxPath && (
114151
<div classes="my-4">
115152
<a href={codesandboxPath}>

src/index.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,12 @@ export default ({ config }: { config: Config }) => {
6161
const theme = getThemeFromConfig(config);
6262
const registry = new Registry();
6363
registerThemeInjector(theme.theme, registry);
64-
registerRouterInjector(routes, registry);
64+
registerRouterInjector(routes, registry, {
65+
setDocumentTitle: ({ params, title }) => {
66+
const section = params.widget || title;
67+
return `Parade${section ? ` - ${section}` : ''}`;
68+
}
69+
});
6570

6671
const r = renderer(() => <App config={config} />);
6772
r.mount({ registry, domNode: document.getElementById('app')!, transition });

src/main.css

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -149,10 +149,6 @@ h1 {
149149
}
150150
}
151151

152-
.z-100 {
153-
z-index: 1000 !important;
154-
}
155-
156152
.max-w-screen-xl {
157153
max-width: 1280px !important;
158154
}

src/routes.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ export default [
33
id: 'landing',
44
outlet: 'main',
55
path: '/',
6-
defaultRoute: true
6+
defaultRoute: true,
7+
title: 'Home'
78
},
89
{
910
id: 'widget',

0 commit comments

Comments
 (0)