Sha256: 6f2c4c8932af62837cd4d204072dc72b61f12b3aa083b4b86b776302fdd81d90

Contents?: true

Size: 1.05 KB

Versions: 4

Compression:

Stored size: 1.05 KB

Contents

module Inesita
  module Component
    include VirtualDOM

    def parent(component)
      @parent = component
    end

    def mount(element)
      @virtual_dom = NodeFactory.new(method(:render), self).nodes.first
      @mount_point = VirtualDOM.create(@virtual_dom)
      element.inner_dom = @mount_point
    end

    def update
      if @virtual_dom && @mount_point
        new_virtual_dom =  NodeFactory.new(method(:render), self).nodes.first
        diff = VirtualDOM.diff(@virtual_dom, new_virtual_dom)
        VirtualDOM.patch(@mount_point, diff)
        @virtual_dom = new_virtual_dom
      else
        @parent.update
      end
    end

    def self.included(base)
      base.extend(ClassMethods)
    end

    module ClassMethods
      def component(name, instance)
        define_method name do
          unless instance_variable_get(:"@#{name}")
            instance_variable_set(:"@#{name}", instance)
            instance_variable_get(:"@#{name}").parent(self)
          end
          instance_variable_get(:"@#{name}")
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
inesita-0.0.6 opal/inesita/component.rb
inesita-0.0.5 opal/inesita/component.rb
inesita-0.0.4 opal/inesita/component.rb
inesita-0.0.3 opal/inesita/component.rb