Content pages

This commit is contained in:
Tom Moor
2018-12-20 20:00:58 -08:00
parent d1b352963f
commit b7bea4941e
18 changed files with 195 additions and 88 deletions

View File

@@ -0,0 +1,45 @@
// @flow
import * as React from 'react';
import Grid from 'styled-components-grid';
import { Helmet } from 'react-helmet';
import Markdown from '../components/Markdown';
import Header from '../components/Header';
import Content from '../components/Content';
import Menu from './Menu';
import integrations from './content';
type TIntegration = {
slug: string,
name: string,
url: string,
description: string,
};
type Props = {
integration: TIntegration,
content: string,
};
export default function Integration({ integration, content }: Props) {
return (
<Grid>
<Helmet>
<title>{integration.name} Integration</title>
</Helmet>
<Header background="#F4F7FA">
<h1>{integration.name} Integration</h1>
<p>{integration.description}</p>
</Header>
<Content>
<Grid>
<Grid.Unit size={{ desktop: 1 / 4 }}>
<Menu integrations={integrations} />
</Grid.Unit>
<Grid.Unit size={{ desktop: 3 / 4 }}>
<Markdown source={content} />
</Grid.Unit>
</Grid>
</Content>
</Grid>
);
}

View File

@@ -0,0 +1,48 @@
// @flow
import * as React from 'react';
import styled from 'styled-components';
import { map, groupBy } from 'lodash';
export default function IntegrationMenu({ integrations }: { integrations: * }) {
const categories = groupBy(integrations, i => i.category);
return (
<nav>
{map(categories, (integrations, category) => (
<React.Fragment key={category}>
<h3>{category}</h3>
<List>
{integrations.map(i => (
<li key={i.slug}>
<MenuItem href={`/integrations/${i.slug}`}>
<Logo src={`/images/${i.slug}.png`} alt={i.name} />
<span>{i.name}</span>
</MenuItem>
</li>
))}
</List>
</React.Fragment>
))}
</nav>
);
}
const MenuItem = styled.a`
display: flex;
align-items: center;
font-size: 16px;
color: ${props => props.theme.text};
`;
const Logo = styled.img`
user-select: none;
height: 18px;
border-radius: 2px;
margin-right: 8px;
`;
const List = styled.ul`
list-style: none;
margin: 0;
padding: 0;
`;

View File

@@ -0,0 +1,138 @@
[
{
"slug": "figma",
"name": "Figma",
"url": "https://figma.com",
"category": "Design",
"description": "Figma is a collaborative interface design tool",
"content": "Embed interactive Figma designs into your Outline docs. Paste a link to a Figma public share link to instantly convert into a rich preview."
},
{
"slug": "framer",
"name": "Framer",
"url": "https://framer.com",
"category": "Design",
"description": "Framer is an interactive design and prototyping tool",
"content": "Embed interactive Framer prototypes into your Outline docs. Paste a link to a Framer cloud link to instantly convert into an interactive embed."
},
{
"slug": "invision",
"name": "InVision",
"url": "https://invision.com",
"category": "Design",
"description": "InVision is an online design and prototyping tool",
"content": "Embed interactive InVision prototypes into your Outline docs. Paste an InVision share link to instantly convert into an interactive prototype."
},
{
"slug": "marvel",
"name": "Marvel",
"url": "https://marvelapp.com",
"category": "Design",
"description": "The all-in-one platform powering design",
"content": "Marvel prototypes inside your Outline docs. Paste a Marvel link to instantly convert into an interactive prototype."
},
{
"slug": "airtable",
"name": "Airtable",
"url": "https://airtable.com",
"category": "Collaboration",
"description": "Part spreadsheet, part database, and entirely flexible",
"content": "Embed interactive tables into your Outline docs. Paste a link to an Airtable public share link to instantly convert into a rich preview."
},
{
"slug": "lucidchart",
"name": "Lucidchart",
"url": "https://lucidchart.com",
"category": "Collaboration",
"description": "Create flowcharts and technical diagrams with ease",
"content": "Embed an interactive chart inside your Outline doc. Paste a link to any shared Lucidchart to instantly convert into a rich preview."
},
{
"slug": "realtime-board",
"name": "Realtime Board",
"url": "https://realtimeboard.com",
"category": "Collaboration",
"description": "Simple whiteboarding for cross-functional team collaboration",
"content": "Embed an interactive whiteboard inside your Outline doc. Paste a link to any shared Realtime Board to instantly convert to a board."
},
{
"slug": "slack",
"name": "Slack",
"url": "https://slack.com",
"category": "Collaboration",
"description": "Chat, collaboration, and file sharing for teams",
"content": ""
},
{
"slug": "trello",
"name": "Trello",
"url": "https://trello.com",
"category": "Collaboration",
"description": "Boards, lists, and cards to organize your projects",
"content": ""
},
{
"slug": "typeform",
"name": "Typeform",
"url": "https://typeform.com",
"category": "Collaboration",
"description": "Data collection tool and surveys, for professionals",
"content": ""
},
{
"slug": "codepen",
"name": "Codepen",
"url": "https://codepen.io",
"category": "Developers",
"description": "A social development environment and editor",
"content": ""
},
{
"slug": "github-gist",
"name": "GitHub Gist",
"url": "https://gist.github.com",
"category": "Developers",
"description": "Sharable code snippets, hosted by GitHub",
"content": ""
},
{
"slug": "mode-analytics",
"name": "Mode Analytics",
"url": "https://modeanalytics.com",
"category": "Developers",
"description": "Connect and analyze data from anywhere",
"content": ""
},
{
"slug": "numeracy",
"name": "Numeracy",
"url": "https://numeracy.io",
"category": "Developers",
"description": "A SQL pad for writing, iterating, and exploring data",
"content": ""
},
{
"slug": "loom",
"name": "Loom",
"url": "https://useloom.com",
"category": "Media",
"description": "Get your message across with instantly shareable videos",
"content": ""
},
{
"slug": "youtube",
"name": "YouTube",
"url": "https://youtube.com",
"category": "Media",
"description": "A popular little website for sharing videos",
"content": ""
},
{
"slug": "vimeo",
"name": "Vimeo",
"url": "https://vimeo.com",
"category": "Media",
"description": "A customizable and embeddable video player",
"content": ""
}
]

View File

@@ -0,0 +1,5 @@
In an Outline document, paste a link to a [Figma](https://figma.com) design and we will instantly convert it to an interactive, live preview.
Because Figma is an online design tool you can see design work happening in realtime, right within Outline. Embed design specs, product designs, or marketing materials easily.
> This integration works without any additional settings or authentication.

View File

@@ -0,0 +1,77 @@
// @flow
import * as React from 'react';
import { map, groupBy } from 'lodash';
import styled from 'styled-components';
import Grid from 'styled-components-grid';
import { Helmet } from 'react-helmet';
import Header from '../components/Header';
import Content from '../components/Content';
import integrations from './content';
const categories = groupBy(integrations, i => i.category);
function Integrations() {
return (
<Grid>
<Helmet>
<title>Integrations</title>
</Helmet>
<Header background="#FFB500">
<h1>Integrations</h1>
<p>
Outline is designed to integrate with your existing workflow and
tools.
</p>
</Header>
<Content>
{map(categories, (integrations, category) => (
<div key={category}>
<h2>{category}</h2>
<Category>
{integrations.map(i => (
<Grid.Unit size={{ desktop: 1 / 4 }} key={i.slug}>
<Integration href={`/integrations/${i.slug}`}>
<Logo src={`/images/${i.slug}.png`} alt={i.name} />
<h3>{i.name}</h3>
<p>{i.description}</p>
</Integration>
</Grid.Unit>
))}
</Category>
</div>
))}
</Content>
</Grid>
);
}
const Logo = styled.img`
height: 60px;
border-radius: 4px;
`;
const Category = styled(Grid)`
margin: 0 -1em;
`;
const Integration = styled.a`
display: block;
padding: 2em 2em 1em;
margin: 1em;
border-radius: 4px;
border: 2px solid ${props => props.theme.slateLight};
color: ${props => props.theme.text};
font-size: 16px;
transition: background 200ms ease-in-out;
h3,
p {
margin: 0.5em 0;
}
&:hover {
background: ${props => props.theme.slateLight};
}
`;
export default Integrations;