@ridi/react-viewer
v0.3.12
Published
React-Redux based comics viewer
Keywords
Readme
@ridi/react-viewer
Demo
https://ridi.github.io/react-viewer/demo/
Installation
npm install @ridi/react-viewerHow to Use
Initialize
Add @ridi/react-viewer reducer into your reducers.
import { reducers as viewerScreen } from '@ridi/react-viewer';
import { combineReducers } from 'redux';
const appReducer = combineReducers({
...
viewerScreen,
...
});Connect ViewerHelper, PageCalculator, ReadPositionHelper with redux store.
import { createStore } from 'redux';
import { ViewerHelper, PageCalculator, ReadPositionHelper } from '@ridi/react-viewer';
const store = createStore( ... );
ViewerHelper.connect(store, { ...options });
PageCalculator.connect(store, { ...options });
ReadPositionHelper.connect(store);ViewerHelper's options = defaults:
paddingVertical= DEFAULT_PADDING_VERTICAL(35),pageMaxWidth= PAGE_MAX_WIDTH(700),pageViewerSelector= PAGE_VIEWER_SELECTOR(#viewer_contents .pages),extendedTouchWidth= EXTENDED_TOUCH_WIDTH(100),
PageCalculator's options = defaults:
containExtraPage= 1
ViewerScreen Component
ViewerScreen component provides all functionality of viewer and renders viewer body.
Put ViewerScreen component into your component.
import React from 'react';
import ViewerScreen from '@ridi/react-viewer';
export default ViewerPage extends React.Component {
render() {
return <ViewerScreen />;
}
};ViewerScreen's properties:
onMount(func): called after viewer is mountedonUnmount(func): called after viewer is unmountedonMoveWrongDirection(func): called when user try to tap wrong direction to the next page (onpageviewerType)footer(node): markup for the footer areafontDomain(string): prefixed URL for searching font filesignoreScroll(bool): temporarily disable scrolling (onscrollviewerType)disablePageCalculation(bool): temporarily disable page calculation (onpageviewerType)
You can extend or replace child components of ViewerScreen with the HoC-style function createStyledViewerScreen().
// Signature
createStyledViewerScreen = ({
TouchableScrollScreen = ScrollScreen,
StyledScrollContents = ScrollContents,
TouchablePageScreen = PageScreen,
StyledPageContents = PageContents,
SizingWrapper = SizingWrapper,
} = {}) => ViewerScreenThis is an example.
import {
createStyledViewerScreen,
SizingWrapper,
ScrollContents,
PageContents,
ScrollScreen,
PageScreen,
} from '@ridi/react-viewer';
const TouchableScrollScreen = ScrollScreen.extend`...`;
const TouchablePageScreen = PageScreen.extend`...`;
...
createStyledViewerScreen({
TouchablePageScreen,
TouchableScrollScreen,
...,
})Render Contents
- Update meta data with
updateMetaData - Render contents with
renderSpineorrenderImages
updateMetaData
Dispatch updateMetaData action to update content's metadata.
import {
updateMetaData,
ContentType,
AvailableViewerType,
BindingType,
} from '@ridi/react-viewer';
const contentType = ContentType.COMIC;
const viewerType = AvailableViewerType.BOTH;
const bindingType = BindingType.LEFT;
dispatch(updateMetaData(contentType, viewerType, bindingType));viewerType: available viewer type (BOTH: 0, SCROLL: 1, PAGE: 2)contentType: content type (WEB_NOVEL: 10, COMIC: 20, WEBTOON: 30)bindingType: binding type (LEFT: 0, RIGHT: 1)
renderSpine
And then dispatch renderSpine action to render html into the viewer after loading contents data.
import { renderSpine } from '@ridi/react-viewer';
...
const index = 0;
const html = '<h1>hello, world</h1>';
dispatch(renderSpine(index, html));renderImages
If you have image contents to render lazily, dispatch renderImages instead of renderSpine.
import { renderImages } from '@ridi/react-viewer';
...
const images = [{ src: '/image_1.jpg' }, { src: '/image_2.jpg' }, ...];
dispatch(renderImages(images));How to Run Demo
$ npm install
$ npm run install:demo
$ npm run watchBrowse http://localhost:8000.
