• Jump To … +
    beanvalidator-validation.coffee t5-core-dom-jquery.coffee t5-core-dom-prototype.coffee ajax.coffee ajaxformloop.coffee alert.coffee autocomplete.coffee bootstrap.coffee confirm-click.coffee console.coffee datefield.coffee events.coffee exception-display.coffee exception-frame.coffee fields.coffee form-fragment.coffee forms.coffee init.coffee localdate.coffee messages.coffee moment.coffee pageinit.coffee palette.coffee select.coffee time-interval.coffee tree.coffee utils.coffee validation.coffee zone-refresh.coffee zone.coffee
  • tree.coffee

  • ¶

    Copyright 2012, 2013 The Apache Software Foundation

    Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License at

    http:#www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

  • ¶

    t5/core/tree

    Handlers to support to the core/Tree Tapestry component.

    define ["./dom", "./ajax", "./zone"],
      (dom, ajax) ->
        TREE = "[data-component-type='core/Tree']"
        NODE_ID = "data-node-id"
        SELECTOR = "#{TREE} [#{NODE_ID}]"
    
        LOADING = "tree-children-loading"
        LOADED = "tree-children-loaded"
        EXPANDED = "tree-expanded"
        SELECTED = "selected-leaf-node"
    
        send = (node, action, success) ->
          container = node.findParent TREE
          url = container.attr "data-tree-action-url"
    
          ajax url,
            data:
              "t:action": action
              "t:nodeid": node.attr NODE_ID
            success: success
    
        loadChildren = (node) ->
  • ¶

    Ignore duplicate requests to load the children.

          return if node.meta LOADING
    
          node.meta LOADING, true
    
          node.addClass "empty-node"
          node.update "<span class='tree-ajax-wait'/>"
    
          send node, "expand", (response) ->
  • ¶

    Remove the Ajax spinner and mark the node as expanded (it will have a “-“ icon instead of a “+” icon)

            node.update("").addClass(EXPANDED).removeClass("empty-node")
    
            label = node.findParent("li").findFirst(".tree-label")
    
            label.insertAfter response.json.content
    
            node.meta LOADING, false
            node.meta LOADED, true
  • ¶

    toggles a folder in the tree between expanded and collapsed (once data for the folder has been loaded).

        toggle = (node) ->
          sublist = node.findParent("li").findFirst("ul")
    
          if node.hasClass EXPANDED
            node.removeClass EXPANDED
            sublist.hide()
            send node, "markCollapsed"
            return
    
          node.addClass EXPANDED
          sublist.show()
          send node, "markExpanded"
  • ¶

    The handler is triggered on the <span data-node-id=''> directly inside the <li>.

        clickHandler = ->
  • ¶

    Ignore clicks on leaf nodes, and on folders that are known to be empty.

          if (@parent().hasClass "leaf-node") or (@hasClass "empty-node")
            return false
  • ¶

    If not already loaded then fire off the Ajax request to load the content.

          if (@meta LOADED) or (@hasClass EXPANDED)
            toggle this
          else
            loadChildren this
    
          return false
    
        toggleSelection = ->
    
          selected = @hasClass SELECTED
    
          node = @findParent("li").findFirst("[#{NODE_ID}]")
    
          if selected
            @removeClass SELECTED
            send node, "deselect"
          else
            @addClass SELECTED
            send node, "select"
    
          return false
    
        dom.onDocument "click", SELECTOR, clickHandler
    
        dom.onDocument "click",
          "#{TREE}[data-tree-node-selection-enabled] LI.leaf-node > .tree-label",
          toggleSelection
    
    
        return null