Dotclear

source: inc/admin/default-templates/js/tool-man/dragsort.js @ 1056:b67f949a98f8

Revision 1056:b67f949a98f8, 2.4 KB checked in by JcDenis, 13 years ago (diff)
  • Twig know loaded in dcCore
  • Admin context now loaded in admin prepend and avavailable under $_ctx
  • Copy admin theme features in default-templates
  • New URL argument to serve theme file as ?tf=my_theme_file
Line 
1/* Copyright (c) 2005 Tim Taylor Consulting (see LICENSE.txt) */
2
3ToolMan._dragsortFactory = {
4     makeSortable : function(item) {
5          var group = ToolMan.drag().createSimpleGroup(item)
6         
7          group.register('dragstart', this._onDragStart)
8          group.register('dragmove', this._onDragMove)
9          group.register('dragend', this._onDragEnd)
10         
11          return group
12     },
13     
14     /**
15      * Iterates over a list's items, making them sortable, applying
16      * optional functions to each item.
17      *
18      * example: makeListSortable(myList, myFunc1, myFunc2, ... , myFuncN)
19      */
20     makeListSortable : function(list) {
21          var helpers = ToolMan.helpers()
22          var coordinates = ToolMan.coordinates()
23          var items = list.getElementsByTagName("li")
24         
25          helpers.map(items, function(item) {
26               var dragGroup = dragsort.makeSortable(item)
27               dragGroup.setThreshold(4)
28               var min, max
29               dragGroup.addTransform(function(coordinate, dragEvent) {
30                    return coordinate.constrainTo(min, max)
31               })
32               dragGroup.register('dragstart', function() {
33                    var items = list.getElementsByTagName("li")
34                    min = max = coordinates.topLeftOffset(items[0])
35                    for (var i = 1, n = items.length; i < n; i++) {
36                         var offset = coordinates.topLeftOffset(items[i])
37                         min = min.min(offset)
38                         max = max.max(offset)
39                    }
40               })
41          })
42          for (var i = 1, n = arguments.length; i < n; i++)
43               helpers.map(items, arguments[i])
44     },
45     
46     _onDragStart : function(dragEvent) {
47     },
48     
49     _onDragMove : function(dragEvent) {
50          var helpers = ToolMan.helpers()
51          var coordinates = ToolMan.coordinates()
52         
53          var item = dragEvent.group.element
54          var xmouse = dragEvent.transformedMouseOffset
55          var moveTo = null
56         
57          var previous = helpers.previousItem(item, item.nodeName)
58          while (previous != null) {
59               var bottomRight = coordinates.bottomRightOffset(previous)
60               if (xmouse.y <= bottomRight.y && xmouse.x <= bottomRight.x) {
61                    moveTo = previous
62               }
63               previous = helpers.previousItem(previous, item.nodeName)
64          }
65          if (moveTo != null) {
66               helpers.moveBefore(item, moveTo)
67               return
68          }
69         
70          var next = helpers.nextItem(item, item.nodeName)
71          while (next != null) {
72               var topLeft = coordinates.topLeftOffset(next)
73               if (topLeft.y <= xmouse.y && topLeft.x <= xmouse.x) {
74                    moveTo = next
75               }
76               next = helpers.nextItem(next, item.nodeName)
77          }
78          if (moveTo != null) {
79               helpers.moveBefore(item, helpers.nextItem(moveTo, item.nodeName))
80               return
81          }
82     },
83     
84     _onDragEnd : function(dragEvent) {
85          ToolMan.coordinates().create(0, 0).reposition(dragEvent.group.element)
86     }
87}
Note: See TracBrowser for help on using the repository browser.

Sites map