Sha256: d7b7f1eaa34ec2d358c6ad79a49b8a849bb2250942744c39a0985e3157ab98a1

Contents?: true

Size: 1.6 KB

Versions: 1

Compression:

Stored size: 1.6 KB

Contents

Joosy.Modules.WidgetsManager =
  registerWidget: (container, widget) ->
    if Joosy.Module.hasAncestor widget, Joosy.Widget
      widget = new widget()

    @__activeWidgets ||= []
    @__activeWidgets.push widget.__load(this, $(container))

    widget

  unregisterWidget: (widget) ->
    widget.__unload()

    @__activeWidgets.splice @__activeWidgets.indexOf(widget), 1

  __collectWidgets: ->
    widgets = Object.extended @widgets || {}

    klass = this
    while klass = klass.constructor.__super__
      Joosy.Module.merge widgets, klass.widgets, false

    widgets

  __setupWidgets: ->
    widgets    = @__collectWidgets()
    registered = Object.extended()

    widgets.each (selector, widget) =>
      if selector == '$container'
        activeSelector = @container
      else
        if r = selector.match /\$([A-z_]+)/
          selector = @elements[r[1]]

        activeSelector = $(selector, @container)

      registered[selector] = Object.extended()

      activeSelector.each (index, elem) =>
        if Joosy.Module.hasAncestor widget, Joosy.Widget
          instance = new widget
        else
          instance = widget.call this, index

        registered[selector][Joosy.Module.__className instance] ||= 0
        registered[selector][Joosy.Module.__className instance]  += 1

        @registerWidget $(elem), instance

    registered.each (selector, value) =>
      value.each (widget, count) =>
        Joosy.Modules.Log.debugAs @, "Widget #{widget} registered at '#{selector}'. Elements: #{count}"

  __unloadWidgets: ->
    if @__activeWidgets
      for widget in @__activeWidgets
        widget.__unload()

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
joosy-0.1.0.RC2 app/assets/javascripts/joosy/core/modules/widgets_manager.js.coffee