topical media & game development

talk show tell print

lib-js-tool-man-source-org-tool-man-dragsort.js / js



  /* Copyright (c) 2005 Tim Taylor Consulting (see LICENSE.txt) */
  
  ToolMan._dragsortFactory = {
          makeSortable : function(item) {
                  var group = ToolMan.drag().createSimpleGroup(item)
  
                  group.register('dragstart', this._onDragStart)
                  group.register('dragmove', this._onDragMove)
                  group.register('dragend', this._onDragEnd)
  
                  return group
          },
  
          
Iterates over a list's items, making them sortable, applying optional functions to each item. example: makeListSortable(myList, myFunc1, myFunc2, ... , myFuncN)

  
          makeListSortable : function(list) {
                  var helpers = ToolMan.helpers()
                  var coordinates = ToolMan.coordinates()
                  var items = list.getElementsByTagName("li")
  
                  helpers.map(items, function(item) {
                          var dragGroup = dragsort.makeSortable(item)
                          dragGroup.setThreshold(4)
                          var min, max
                          dragGroup.addTransform(function(coordinate, dragEvent) {
                                  return coordinate.constrainTo(min, max)
                          })
                          dragGroup.register('dragstart', function() {
                                  var items = list.getElementsByTagName("li")
                                  min = max = coordinates.topLeftOffset(items[0])
                                  for (var i = 1, n = items.length; i < n; i++) {
                                          var offset = coordinates.topLeftOffset(items[i])
                                          min = min.min(offset)
                                          max = max.max(offset)
                                  }
                          })
                  })
                  for (var i = 1, n = arguments.length; i < n; i++)
                          helpers.map(items, arguments[i])
          },
  
          _onDragStart : function(dragEvent) {
          },
  
          _onDragMove : function(dragEvent) {
                  var helpers = ToolMan.helpers()
                  var coordinates = ToolMan.coordinates()
  
                  var item = dragEvent.group.element
                  var xmouse = dragEvent.transformedMouseOffset
                  var moveTo = null
  
                  var previous = helpers.previousItem(item, item.nodeName)
                  while (previous != null) {
                          var bottomRight = coordinates.bottomRightOffset(previous)
                          if (xmouse.y <= bottomRight.y && xmouse.x <= bottomRight.x) {
                                  moveTo = previous
                          }
                          previous = helpers.previousItem(previous, item.nodeName)
                  }
                  if (moveTo != null) {
                          helpers.moveBefore(item, moveTo)
                          return
                  }
  
                  var next = helpers.nextItem(item, item.nodeName)
                  while (next != null) {
                          var topLeft = coordinates.topLeftOffset(next)
                          if (topLeft.y <= xmouse.y && topLeft.x <= xmouse.x) {
                                  moveTo = next
                          }
                          next = helpers.nextItem(next, item.nodeName)
                  }
                  if (moveTo != null) {
                          helpers.moveBefore(item, helpers.nextItem(moveTo, item.nodeName))
                          return
                  }
          },
  
          _onDragEnd : function(dragEvent) {
                  ToolMan.coordinates().create(0, 0).reposition(dragEvent.group.element)
          }
  }
  


(C) Æliens 20/2/2008

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.