Switch page title for different pages
This commit is contained in:
@@ -47,6 +47,7 @@ If an item is overwritten in a new release, the attributes from the new item are
|
|||||||
- [x] Implement search
|
- [x] Implement search
|
||||||
- [ ] Finalize CSS
|
- [ ] Finalize CSS
|
||||||
- [ ] Get contents for how-to-use page
|
- [ ] Get contents for how-to-use page
|
||||||
- [ ] Show item history on details
|
- [ ] Show item history on details (relevant with 2nd release)
|
||||||
- [ ] Better semantic and SEO
|
- [ ] Better semantic and SEO
|
||||||
- [ ] Make mobile friendly
|
- [ ] Make mobile friendly
|
||||||
|
- [ ] Create more react components for already existing CSS comps
|
||||||
|
|||||||
@@ -44,9 +44,13 @@ delete window.__TECHRADAR__;
|
|||||||
// Create Redux store with initial state
|
// Create Redux store with initial state
|
||||||
const store = createStore(appReducer, preloadedState, applyMiddleware(historyManager))
|
const store = createStore(appReducer, preloadedState, applyMiddleware(historyManager))
|
||||||
|
|
||||||
|
const handleSetTitle = (title) => {
|
||||||
|
document.title = `${title} | AOE Technology Radar`;
|
||||||
|
};
|
||||||
|
|
||||||
render(
|
render(
|
||||||
<Provider store={store}>
|
<Provider store={store}>
|
||||||
<App />
|
<App onSetTitle={handleSetTitle} />
|
||||||
</Provider>,
|
</Provider>,
|
||||||
document.getElementById('root')
|
document.getElementById('root')
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import HeroHeadline from './HeroHeadline';
|
import HeroHeadline from './HeroHeadline';
|
||||||
import Fadeable from './Fadeable';
|
import Fadeable from './Fadeable';
|
||||||
|
import SetTitle from './SetTitle';
|
||||||
|
|
||||||
export default function PageHelp({ leaving, onLeave }) {
|
export default function PageHelp({ leaving, onLeave, ...props }) {
|
||||||
return (
|
return (
|
||||||
<Fadeable leaving={leaving} onLeave={onLeave}>
|
<Fadeable leaving={leaving} onLeave={onLeave}>
|
||||||
|
<SetTitle {...props} title="How to use AOE Technology Radar" />
|
||||||
<HeroHeadline>How to use AOE Technology Radar</HeroHeadline>
|
<HeroHeadline>How to use AOE Technology Radar</HeroHeadline>
|
||||||
</Fadeable>
|
</Fadeable>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -2,10 +2,12 @@ import React from 'react';
|
|||||||
import HeroHeadline from './HeroHeadline';
|
import HeroHeadline from './HeroHeadline';
|
||||||
import QuadrantGrid from './QuadrantGrid';
|
import QuadrantGrid from './QuadrantGrid';
|
||||||
import Fadeable from './Fadeable';
|
import Fadeable from './Fadeable';
|
||||||
|
import SetTitle from './SetTitle';
|
||||||
|
|
||||||
export default function PageIndex({ leaving, onLeave, items, navigate }) {
|
export default function PageIndex({ leaving, onLeave, items, navigate, ...props }) {
|
||||||
return (
|
return (
|
||||||
<Fadeable leaving={leaving} onLeave={onLeave}>
|
<Fadeable leaving={leaving} onLeave={onLeave}>
|
||||||
|
<SetTitle {...props} title="Technology Radar" />
|
||||||
<div className="headline-group">
|
<div className="headline-group">
|
||||||
<HeroHeadline alt="Mar 2017">AOE Technology Radar (beta)</HeroHeadline>
|
<HeroHeadline alt="Mar 2017">AOE Technology Radar (beta)</HeroHeadline>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import Badge from './Badge';
|
|||||||
import ItemList from './ItemList';
|
import ItemList from './ItemList';
|
||||||
import Link from './Link';
|
import Link from './Link';
|
||||||
import Fadeable from './Fadeable';
|
import Fadeable from './Fadeable';
|
||||||
|
import SetTitle from './SetTitle';
|
||||||
import { createAnimation, createAnimationRunner } from '../animation';
|
import { createAnimation, createAnimationRunner } from '../animation';
|
||||||
|
|
||||||
import { translate } from '../../common/config';
|
import { translate } from '../../common/config';
|
||||||
@@ -150,6 +151,7 @@ class PageItem extends React.Component {
|
|||||||
const itemsInRing = this.getItemsInRing(this.props);
|
const itemsInRing = this.getItemsInRing(this.props);
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
|
<SetTitle {...this.props} title={item.title} />
|
||||||
<div className="item-page">
|
<div className="item-page">
|
||||||
<div className="item-page__nav">
|
<div className="item-page__nav">
|
||||||
<div className="item-page__nav__inner">
|
<div className="item-page__nav__inner">
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import Badge from './Badge';
|
|||||||
import Link from './Link';
|
import Link from './Link';
|
||||||
import Search from './Search';
|
import Search from './Search';
|
||||||
import Fadeable from './Fadeable';
|
import Fadeable from './Fadeable';
|
||||||
|
import SetTitle from './SetTitle';
|
||||||
import { groupByFirstLetter } from '../../common/model';
|
import { groupByFirstLetter } from '../../common/model';
|
||||||
import { translate } from '../../common/config';
|
import { translate } from '../../common/config';
|
||||||
|
|
||||||
@@ -83,6 +84,7 @@ class PageOverview extends React.Component {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<Fadeable leaving={this.props.leaving} onLeave={this.props.onLeave}>
|
<Fadeable leaving={this.props.leaving} onLeave={this.props.onLeave}>
|
||||||
|
<SetTitle {...this.props} title="Technologies Overview" />
|
||||||
<HeadlineGroup>
|
<HeadlineGroup>
|
||||||
<HeroHeadline>Technologies Overview</HeroHeadline>
|
<HeroHeadline>Technologies Overview</HeroHeadline>
|
||||||
</HeadlineGroup>
|
</HeadlineGroup>
|
||||||
|
|||||||
@@ -3,14 +3,16 @@ import HeroHeadline from './HeroHeadline';
|
|||||||
import HeadlineGroup from './HeadlineGroup';
|
import HeadlineGroup from './HeadlineGroup';
|
||||||
import QuadrantSection from './QuadrantSection';
|
import QuadrantSection from './QuadrantSection';
|
||||||
import Fadeable from './Fadeable';
|
import Fadeable from './Fadeable';
|
||||||
|
import SetTitle from './SetTitle';
|
||||||
|
|
||||||
import { translate } from '../../common/config';
|
import { translate } from '../../common/config';
|
||||||
import { groupByQuadrants } from '../../common/model';
|
import { groupByQuadrants } from '../../common/model';
|
||||||
|
|
||||||
export default function PageQuadrant({ leaving, onLeave, pageName, items }) {
|
export default function PageQuadrant({ leaving, onLeave, pageName, items, ...props }) {
|
||||||
const groups = groupByQuadrants(items);
|
const groups = groupByQuadrants(items);
|
||||||
return (
|
return (
|
||||||
<Fadeable leaving={leaving} onLeave={onLeave}>
|
<Fadeable leaving={leaving} onLeave={onLeave}>
|
||||||
|
<SetTitle {...props} title={translate(pageName)} />
|
||||||
<HeadlineGroup>
|
<HeadlineGroup>
|
||||||
<HeroHeadline>{translate(pageName)}</HeroHeadline>
|
<HeroHeadline>{translate(pageName)}</HeroHeadline>
|
||||||
</HeadlineGroup>
|
</HeadlineGroup>
|
||||||
|
|||||||
16
js/components/SetTitle.js
Normal file
16
js/components/SetTitle.js
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
import React from 'react';
|
||||||
|
|
||||||
|
class SetTitle extends React.Component {
|
||||||
|
constructor(props) {
|
||||||
|
super(props);
|
||||||
|
if (typeof props.onSetTitle === 'function' && props.title) {
|
||||||
|
props.onSetTitle(props.title);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default SetTitle;
|
||||||
10
js/server.js
10
js/server.js
@@ -14,10 +14,12 @@ export const renderPage = (radar, pageName) => {
|
|||||||
pageState: {},
|
pageState: {},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
let pageTitle;
|
||||||
|
|
||||||
// Render the component to a string
|
// Render the component to a string
|
||||||
const html = renderToString(
|
const html = renderToString(
|
||||||
<Provider store={store}>
|
<Provider store={store}>
|
||||||
<App />
|
<App onSetTitle={(title) => { pageTitle = title; }} />
|
||||||
</Provider>
|
</Provider>
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -25,14 +27,14 @@ export const renderPage = (radar, pageName) => {
|
|||||||
const preloadedState = store.getState()
|
const preloadedState = store.getState()
|
||||||
|
|
||||||
// Send the rendered page back to the client
|
// Send the rendered page back to the client
|
||||||
return renderFullPage(html, preloadedState);
|
return renderFullPage(html, pageTitle, preloadedState);
|
||||||
}
|
}
|
||||||
|
|
||||||
const renderFullPage = (html, preloadedState) => {
|
const renderFullPage = (html, pageTitle, preloadedState) => {
|
||||||
return `
|
return `
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title>AOE Technology Radar</title>
|
<title>${pageTitle} | AOE Technology Radar</title>
|
||||||
<link rel="stylesheet" href="/styles.css"/>
|
<link rel="stylesheet" href="/styles.css"/>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|||||||
Reference in New Issue
Block a user