Application Module Structure

Application Module Structure

When working with cssobj, there's some best practice of module structure, like below module structure:

base_style_module -> style_factory_module -> application_module

For example, you have an photo application, that user can choose layout of their photoes.

code of base_style_module

// FILE: base-style.js

// option (opt): per rule based
// state:        per stylesheet (result) based

// state can be mobile, or pc
export const float = opt => ({
  .img { width: opt.width + 'px', float:'left', padding: v => v.result.state.platform == 'mobile' ? '0px' : '30px' }
})

export const flex = opt => ({
  .img { width: opt.width + 'px', flex: 1}
})

code of style_factory_module

// FILE: style-factory.js
import cssobj from 'cssobj'
import { getState } from './state-manager'
import * as css from './base-style'

// create empty <style> container
export const pageStyle = cssobj({}, {local:true}, getState() )

// can change from float layout into flex layout
// return cssobj result
export function changeLayout (type, opt, state) {
  return pageStyle.update( css[type](opt), state )
}

code of application_module

import {changeLayout} from './style-factory'

element.onclick = e => {
  changeLayout('flex', {width: 100}, {platform: 'pc'})
}

Above, just a basic template, more work should be done in real world

Some other pattern, contribution is welcome