Sha256: 50c39a600ea016c0478540a0db25f7cf6feb534aa9d75b860139f816e7d6ff7d

Contents?: true

Size: 1.34 KB

Versions: 5

Compression:

Stored size: 1.34 KB

Contents

class Para.ResourceTree
  constructor: (@$el) ->
    @initializeTree()

  initializeTree: ->
    @orderUrl = @$el.data('url')
    @maxDepth = parseInt @$el.data('max-depth')

    $(".tree")
      .sortable
        handle: ".handle"
        items: ".node"
        connectWith: ".tree"
      .on('sortupdate', $.proxy(@sortUpdate, this))

  sortUpdate: (e, data) ->
    @handlePlaceholder($el) for $el in [data.endparent, data.startparent, data.item.find('.tree')]
    @updateOrder()

  handlePlaceholder: ($el) ->
    $placeholder = $el.find("> .placeholder")
    if $el.parents('.tree').length - 1 >= @maxDepth or $el.find('> .node').length
      $placeholder.hide()
      $el.children("> .tree").each (index, el) => @handlePlaceholder $(el)
    else
      $placeholder.show()

  updateOrder: ->
    Para.ajax(
      url: @orderUrl
      method: 'patch'
      data:
        resources: @buildOrderedData()
      success: $.proxy(@orderUpdated, this)
    )

  buildOrderedData: ->
    data = {}
    $(".node").each (index) ->
      $this = $(this)
      data[index] = { 
        id: $this.data("id"), 
        position: index, 
        parent_id: $this.parent().parent().data("id") 
      }
    data

  orderUpdated: ->
    # TODO: Add flash message to display ordering success

$(document).on 'page:change', ->
  $('.root-tree').each (i, el) ->
    new Para.ResourceTree($(el))

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
para-0.5.4 app/assets/javascripts/para/admin/tree.coffee
para-0.5.3 app/assets/javascripts/para/admin/tree.coffee
para-0.5.1 app/assets/javascripts/para/admin/tree.coffee
para-0.5.0 app/assets/javascripts/para/admin/tree.coffee
para-0.4.0 app/assets/javascripts/para/admin/tree.coffee