@abcnews/google-doc-scrollyteller 中文文档教程
GoogleDocScrollyteller
一个用于 React 的 @abcnews/scrollyteller 预览组件,它加载、解析 & 从公共 Google 文档呈现类似奥德赛的内容,以及创建可粘贴的 Core Media 富文本.
Usage
只有一个强制属性,一个 renderPreview
函数,它将 scrollyteller 定义作为属性(config
和 panels
),并期望返回一个包含
的组件。
JavaScript usage
import GoogleDocScrollyteller from '@abcnews/google-doc-scrollyteller';
import Scrollyteller from '@abcnews/scrollyteller';
import React, { useState } from 'react';
import Graphic from '<somewhere>';
const Block = ({ panels, config }) => {
const [graphicProps, setGraphicProps] = useState(null);
return (
<Scrollyteller
panels={panels}
{...config}
onMarker={(data) => setGraphicProps(data)}
>
<Graphic {...graphicProps} />
</Scrollyteller>
);
};
const App = () => (
<GoogleDocScrollyteller
renderPreview={(props) => <Block {...props} />}
/>
);
export default App;
TypeScript usage
import GoogleDocScrollyteller from '@abcnews/google-doc-scrollyteller';
import Scrollyteller from '@abcnews/scrollyteller';
import type { ScrollytellerDefinition } from '@abcnews/scrollyteller';
import React, { useState } from 'react';
import Graphic from '<somewhere>';
import type { GraphicProps } from '<somewhere>';
const Block: React.FC<ScrollytellerDefinition<GraphicProps>> = ({
panels,
config,
}) => {
const [graphicProps, setGraphicProps] = useState<GraphicProps>(null!);
return (
<Scrollyteller<PanelData>
panels={panels}
{...config}
onMarker={(data: GraphicProps) => setGraphicProps(data)}
>
<Graphic {...graphicProps} />
</Scrollyteller>
);
};
const App: React.FC = () => (
<GoogleDocScrollyteller<PanelData>
renderPreview={(props) => <Block {...props} />}
/>
);
export default App;
Optional props
TODO
preprocessCoreEl
loadScrollytellerArgs
postprocessScrollytellerDefinition
renderFallbackImagesButton
Development
此项目使用 tsdx 构建/开发工具和 np 用于发布管理。
推荐的工作流程是在一个终端中运行 TSDX:
npm start
这构建到 /dist
并以监视模式运行项目,因此您在 src
中保存的任何编辑都会导致重建到 /分布。
然后在另一个中运行示例:
cd example
npm i
aunty serve
该示例导入并实时重新加载 /dist
中的任何内容,因此如果您看到过时的组件,确保 TSDX 按照上面的建议在监视模式下运行。
要进行一次性构建,请使用 npm run build
。
要运行测试,请使用 npm test
或 yarn test
。
Example
主要是为了帮助开发和演示用法,/example
中有一个示例项目。 它使用 aunty 作为构建工具来匹配通常的 ABC 新闻交互式开发工作流程。
Jest
Jest 测试设置为使用 npm test
或 yarn test
运行。
Bundle analysis
使用 size-limit 和 npm run size
计算你的库的实际成本,并用<代码>npm 运行分析。
Releasing
要将新版本发布到 NPM,请运行 npm run release
并按照提示操作。
Jest
Jest 测试设置为使用 npm test
或 yarn test
运行。
Bundle analysis
使用 size-limit 和 npm run size
计算你的库的实际成本,并用<代码>npm 运行分析。
Optimizations
请参阅主要的 tsdx
优化文档。 尤其要知道您可以利用仅限开发的优化:
// ./types/index.d.ts
declare var __DEV__: boolean;
// inside your code...
if (__DEV__) {
console.log('foo');
}
Authors
- Colin Gourlay (gourlay.colin@abc.net.au)
- Simon Elvery (elvery.simon@abc.net.au)
查看贡献者的完整列表。
GoogleDocScrollyteller
An @abcnews/scrollyteller preview component for React, which loads, parses & renders Odyssey-like content from a public Google Doc, as well as creating pastable Core Media rich-text.
Usage
The <GoogleDocScrollyteller>
only has one mandatory prop, a renderPreview
function, which takes a scrollyteller definition as props (config
and panels
), and is expected to return a component containing a<Scrollyteller>
.
JavaScript usage
import GoogleDocScrollyteller from '@abcnews/google-doc-scrollyteller';
import Scrollyteller from '@abcnews/scrollyteller';
import React, { useState } from 'react';
import Graphic from '<somewhere>';
const Block = ({ panels, config }) => {
const [graphicProps, setGraphicProps] = useState(null);
return (
<Scrollyteller
panels={panels}
{...config}
onMarker={(data) => setGraphicProps(data)}
>
<Graphic {...graphicProps} />
</Scrollyteller>
);
};
const App = () => (
<GoogleDocScrollyteller
renderPreview={(props) => <Block {...props} />}
/>
);
export default App;
TypeScript usage
import GoogleDocScrollyteller from '@abcnews/google-doc-scrollyteller';
import Scrollyteller from '@abcnews/scrollyteller';
import type { ScrollytellerDefinition } from '@abcnews/scrollyteller';
import React, { useState } from 'react';
import Graphic from '<somewhere>';
import type { GraphicProps } from '<somewhere>';
const Block: React.FC<ScrollytellerDefinition<GraphicProps>> = ({
panels,
config,
}) => {
const [graphicProps, setGraphicProps] = useState<GraphicProps>(null!);
return (
<Scrollyteller<PanelData>
panels={panels}
{...config}
onMarker={(data: GraphicProps) => setGraphicProps(data)}
>
<Graphic {...graphicProps} />
</Scrollyteller>
);
};
const App: React.FC = () => (
<GoogleDocScrollyteller<PanelData>
renderPreview={(props) => <Block {...props} />}
/>
);
export default App;
Optional props
TODO
preprocessCoreEl
loadScrollytellerArgs
postprocessScrollytellerDefinition
renderFallbackImagesButton
Development
This project uses tsdx for build/dev tooling and np for release management.
The recommended workflow is to run TSDX in one terminal:
npm start
This builds to /dist
and runs the project in watch mode so any edits you save inside src
causes a rebuild to /dist
.
Then run the example inside another:
cd example
npm i
aunty serve
The example imports and live reloads whatever is in /dist
, so if you are seeing an out of date component, make sure TSDX is running in watch mode as recommended above.
To do a one-off build, use npm run build
.
To run tests, use npm test
or yarn test
.
Example
Mostly to aid development and demonstrate usage, there is an example project in /example
. It uses aunty as the build tool to match the usual ABC News interactive development work flow.
Jest
Jest tests are set up to run with npm test
or yarn test
.
Bundle analysis
Calculates the real cost of your library using size-limit with npm run size
and visulize it with npm run analyse
.
Releasing
To release a new version to NPM run npm run release
and follow the prompts.
Jest
Jest tests are set up to run with npm test
or yarn test
.
Bundle analysis
Calculates the real cost of your library using size-limit with npm run size
and visulize it with npm run analyze
.
Optimizations
Please see the main tsdx
optimizations docs. In particular, know that you can take advantage of development-only optimizations:
// ./types/index.d.ts
declare var __DEV__: boolean;
// inside your code...
if (__DEV__) {
console.log('foo');
}
Authors
- Colin Gourlay (gourlay.colin@abc.net.au)
- Simon Elvery (elvery.simon@abc.net.au)
See the full list of contributors.