Sha256: cc175f19262788b723c2cb07c375d318f7f8039a2ec2aa828f454fd6dcff8307

Contents?: true

Size: 1.9 KB

Versions: 2

Compression:

Stored size: 1.9 KB

Contents

ALL_INSTANCES = []

class Lanes.React.Viewport extends Lanes.Models.State

    @all: -> ALL_INSTANCES
    @displayError: (msg) -> _.first(ALL_INSTANCES)?.displayError(msg)

    session:
        width:      'number'
        height:     'number'
        el:         'element'
        selector:   'string'
        domRoot:    'element'
        reactRoot:  'object'
        lanes:      'element'
        modalProps: 'object'

    constructor: ->
        super
        ALL_INSTANCES.push(this)
        return unless @selector
        @domRoot = document.body.querySelector(@selector)
        _.dom(@domRoot).addClass('lanes-root')
        Lanes.fatal("Root selector #{@selector} not found") unless root
        _.dom(@domRoot).html = "<div class='lanes'/>"
        this.lanes = @domRoot.querySelector('.lanes')
        Lanes.lib.ResizeSensor(@domRoot, _.debounce( =>
            @_updateDimensions()
        , 250))
        this._updateDimensions()

    onBoot: ->
        prev = _.dom(this.domRoot.previousElementSibling)
        prev.addClass('complete') if prev.hasClass('loading')
        _.delay(->
            prev.remove()
        , 100)

    _updateDimensions: ->
        this.set
            width:  @lanes.clientWidth
            height: @lanes.clientHeight


    displayError: (msg) ->
        @modalProps = {
            show: true, buttons: ['OK'], title: 'Error',
            body: -> React.createElement('h3', {}, msg)
        }

    hideModal: ->
        @modalProps = {show: false}

    displayModal: (props) ->
        @modalProps = _.extend(props, show: true)

    renderRoot: ->
        cntrl = Lanes.Extensions.controlling()
        component = cntrl?.rootComponent?(this) ||
            Lanes.React.Root.DefaultComponentNotFound
        root = React.createElement(Lanes.React.Root, {viewport: @},
            React.createElement(component, extension: cntrl)
        )
        @reactRoot = Lanes.Vendor.ReactDOM.render(root, @lanes)

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
lanes-0.5.0 client/lanes/react/Viewport.coffee
lanes-0.4.0 client/lanes/react/Viewport.coffee