Skip to content

nju33/diz-theme

Repository files navigation

diz-theme

Basic of the Diz theme

Build Status XO code style

Install

$ yarn add -D diz-theme
$ npm i -D diz-theme

Example (When using React)

import React from 'react'
import {render} from 'react-dom';
import {renderToString} from 'react-dom/server';
import Theme from 'diz-theme';
import JSX from 'path/to/jsx.jsx'

class YourThemeName extends Theme {
  // Path to node_mdoules under development of this project.
  // If you are using yarn link, for example,
  // this project's dependency package can not be seen from diz
  static nodeModulesPath = path.join(__dirname, '../node_modules/');

  // To add to the entry of `webpack.entry`
  static path = __filename;

  constructor(props, propsStr) {
    super();
    this.props = props
    this.propsStr = propsStr
    // ...
  }

  render() {
    if (YourThemeName.isBrowser()) {
      // Processing on browser side
      render(<YourThemeName {...this.props}/>, document.getElementById('blog'));
    } else {
      // Processing on client side
      const contents = renderToString(<YourThemeName {...this.props}/>);
      return this.wrapMain(contents);
      // return <!doctype HTML>...
      // The returned HTML becomes the contents of the file
    }
  }
}

if (YourThemeName.isBrowser()) {
  window.__DIZ__ = {};
  // This function execution statement should be kept in the client side
  // when creating HTML. For example, `this.wrapMain` method.
  //
  // In the following, props are passing,
  // but I write object values using propsStr in `this.wrapMain`
  window.__DIZ__.render = props => {
    const renderer = new YourThemeName(props);
    renderer.render();
  };
}

License

The MIT License (MIT) Copyright (c) 2016 nju33 [email protected]