Class ::xowiki::TreeRenderer=listdnd

::xowiki::TreeRenderer=listdnd[i] create ...

Class Relations

  • class: ::xowiki::TreeRenderer[i]
  • superclass: ::xowiki::TreeRenderer=list[i]
::xowiki::TreeRenderer create ::xowiki::TreeRenderer=listdnd \
     -superclass ::xowiki::TreeRenderer=list

Methods (to be applied on the object)

  • add_handler (scripted)

    template::add_event_listener  -id $id  -event $event  -preventdefault=false  -script "listdnd_${event}_handler(event);"
  • include_head_entries (scripted)

    ::xo::Page requireJS "/resources/xowiki/listdnd.js"
  • min_level (scripted)

    if {[dict exists ${:context} min_level]} {
      return [dict get ${:context} min_level]
    }
    return ""
  • render (scripted)

    #:log "=== TreeRenderer=listdnd render $tree"
    #
    # Do we allow reorder on the top-level?
    #
    set id [$tree id]-topul
    if {[:min_level] == -1} {
      set css_class "page_order_region"
      foreach event {drop dragover dragleave} {
        :add_handler -id $id -event $event
      }
    } else {
      set css_class "page_order_region_no_target"
    }
    #:log "=== TreeRenderer=listdnd render $tree min_level <[:min_level]>"
    if {[$tree exists owner]} {
      #
      # assume, the "owner" is an includelet.
      set owner [$tree set owner]
      set page [$owner set __including_page]
      set package_url [::[$page package_id] package_url]
      set package_url_data " data-package_url='$package_url' data-folder_id='[$page parent_id]'"
    } else {
      set package_url_data ""
    }
    
    return [subst {<div id='[$tree id]' $package_url_data>
      <ul id='$id' class='$css_class'>[next]
      </ul></div>
    }]

Methods (to be applied on instances)

  • render_node (scripted)

    #:log "=== TreeRenderer=listdnd render_node $cat_content"
    #set open_state [expr {${:open_requests} > 0 ?"class='liOpen'" : "class='liClosed'"}]
    ${:object} instvar page_order
    
    set :li_id [::xowiki::Includelet js_name [${:owner} set id]_$page_order]
    set :ul_id [::xowiki::Includelet js_name [${:owner} set id]__l${:level}_$page_order]
    
    set min_level [[self class] min_level]
    set reorder_child [expr {$min_level ne "" && ${:level} >= $min_level}]
    set reorder_self [expr {$min_level ne "" && ${:level} > $min_level}]
    #:log "=== render_node $page_order min_level $min_level level ${:level} reorder_child $reorder_child reorder_self $reorder_self"
    
    if {$reorder_child} {
      foreach event {drop dragover dragleave} {
        [self class] add_handler -id ${:ul_id} -event $event
      }
      set :ul_class "page_order_region"
    } else {
      set :ul_class "page_order_region_no_target"
    }
    if {$reorder_self} {
      set :li_atts [subst {data-value='$page_order' draggable='true'}]
      [self class] add_handler -id ${:li_id} -event dragstart
    }
    set :ul_id [::xowiki::Includelet js_name [${:owner} set id]__l${:level}_$page_order]
    
    return [next]