static/dragdrop.js
author Tero Marttila <terom@fixme.fi>
Tue, 05 May 2009 19:37:32 +0300
changeset 13 a0cb32f3de3d
permissions -rw-r--r--
add silly crap (FastCGI, tiles.*)
13
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
// script.aculo.us dragdrop.js v1.8.0, Tue Nov 06 15:01:40 +0300 2007
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
//           (c) 2005-2007 Sammi Williams (http://www.oriontransfer.co.nz, sammi@oriontransfer.co.nz)
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
// 
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
// script.aculo.us is freely distributable under the terms of an MIT-style license.
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     7
// For details, see the script.aculo.us web site: http://script.aculo.us/
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     8
//
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     9
// Modified by Tero Marttila to strip unused code
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    10
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    11
var Draggables = {
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    12
  drags: [],
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    13
  observers: [],
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    14
  
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    15
  register: function(draggable) {
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
    if(this.drags.length == 0) {
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    17
      this.eventMouseUp   = this.endDrag.bindAsEventListener(this);
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    18
      this.eventMouseMove = this.updateDrag.bindAsEventListener(this);
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    19
      this.eventKeypress  = this.keyPress.bindAsEventListener(this);
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    20
      
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
      Event.observe(document, "mouseup", this.eventMouseUp);
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
      Event.observe(document, "mousemove", this.eventMouseMove);
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    23
      Event.observe(document, "keypress", this.eventKeypress);
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    24
    }
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    25
    this.drags.push(draggable);
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    26
  },
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
  
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    28
  unregister: function(draggable) {
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
    this.drags = this.drags.reject(function(d) { return d==draggable });
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    30
    if(this.drags.length == 0) {
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    31
      Event.stopObserving(document, "mouseup", this.eventMouseUp);
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
      Event.stopObserving(document, "mousemove", this.eventMouseMove);
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
      Event.stopObserving(document, "keypress", this.eventKeypress);
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
    }
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    35
  },
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    36
  
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    37
  activate: function(draggable) {
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    38
    if(draggable.options.delay) { 
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    39
      this._timeout = setTimeout(function() { 
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    40
        Draggables._timeout = null; 
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    41
        window.focus(); 
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    42
        Draggables.activeDraggable = draggable; 
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    43
      }.bind(this), draggable.options.delay); 
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    44
    } else {
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    45
      window.focus(); // allows keypress events if window isn't currently focused, fails for Safari
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    46
      this.activeDraggable = draggable;
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    47
    }
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    48
  },
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    49
  
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    50
  deactivate: function() {
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    51
    this.activeDraggable = null;
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    52
  },
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    53
  
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    54
  updateDrag: function(event) {
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    55
    if(!this.activeDraggable) return;
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    56
    var pointer = [Event.pointerX(event), Event.pointerY(event)];
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    57
    // Mozilla-based browsers fire successive mousemove events with
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    58
    // the same coordinates, prevent needless redrawing (moz bug?)
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    59
    if(this._lastPointer && (this._lastPointer.inspect() == pointer.inspect())) return;
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    60
    this._lastPointer = pointer;
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    61
    
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    62
    this.activeDraggable.updateDrag(event, pointer);
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    63
  },
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    64
  
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    65
  endDrag: function(event) {
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    66
    if(this._timeout) { 
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    67
      clearTimeout(this._timeout); 
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    68
      this._timeout = null; 
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    69
    }
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    70
    if(!this.activeDraggable) return;
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    71
    this._lastPointer = null;
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    72
    this.activeDraggable.endDrag(event);
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    73
    this.activeDraggable = null;
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    74
  },
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    75
  
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    76
  keyPress: function(event) {
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    77
    if(this.activeDraggable)
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    78
      this.activeDraggable.keyPress(event);
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    79
  },
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    80
  
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    81
  addObserver: function(observer) {
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    82
    this.observers.push(observer);
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    83
    this._cacheObserverCallbacks();
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    84
  },
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    85
  
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    86
  removeObserver: function(element) {  // element instead of observer fixes mem leaks
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    87
    this.observers = this.observers.reject( function(o) { return o.element==element });
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    88
    this._cacheObserverCallbacks();
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    89
  },
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    90
  
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    91
  notify: function(eventName, draggable, event) {  // 'onStart', 'onEnd', 'onDrag'
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    92
    if(this[eventName+'Count'] > 0)
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    93
      this.observers.each( function(o) {
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    94
        if(o[eventName]) o[eventName](eventName, draggable, event);
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    95
      });
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    96
    if(draggable.options[eventName]) draggable.options[eventName](draggable, event);
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    97
  },
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    98
  
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    99
  _cacheObserverCallbacks: function() {
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   100
    ['onStart','onEnd','onDrag'].each( function(eventName) {
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   101
      Draggables[eventName+'Count'] = Draggables.observers.select(
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   102
        function(o) { return o[eventName]; }
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   103
      ).length;
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   104
    });
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   105
  }
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   106
}
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   107
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   108
/*--------------------------------------------------------------------------*/
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   109
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   110
var Draggable = Class.create({
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   111
  initialize: function(element) {
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   112
    var defaults = {
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   113
      handle: false,
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   114
      zindex: 1000,
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   115
      quiet: false,
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   116
      delay: 0
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   117
    };
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   118
    
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   119
    var options = Object.extend(defaults, arguments[1] || { });
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   120
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   121
    this.element = $(element);
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   122
    
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   123
    if(options.handle && Object.isString(options.handle))
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   124
      this.handle = this.element.down('.'+options.handle, 0);
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   125
    
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   126
    if(!this.handle) this.handle = $(options.handle);
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   127
    if(!this.handle) this.handle = this.element;
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   128
    
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   129
    Element.makePositioned(this.element); // fix IE    
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   130
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   131
    this.options  = options;
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   132
    this.dragging = false;   
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   133
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   134
    this.eventMouseDown = this.initDrag.bindAsEventListener(this);
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   135
    Event.observe(this.handle, "mousedown", this.eventMouseDown);
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   136
    
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   137
    Draggables.register(this);
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   138
  },
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   139
  
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   140
  destroy: function() {
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   141
    Event.stopObserving(this.handle, "mousedown", this.eventMouseDown);
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   142
    Draggables.unregister(this);
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   143
  },
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   144
  
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   145
  currentDelta: function() {
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   146
    return([
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   147
      parseInt(Element.getStyle(this.element,'left') || '0'),
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   148
      parseInt(Element.getStyle(this.element,'top') || '0')]);
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   149
  },
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   150
  
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   151
  initDrag: function(event) {
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   152
    if(!Object.isUndefined(Draggable._dragging[this.element]) &&
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   153
      Draggable._dragging[this.element]) return;
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   154
    if(Event.isLeftClick(event)) {    
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   155
      // abort on form elements, fixes a Firefox issue
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   156
      var src = Event.element(event);
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   157
      if((tag_name = src.tagName.toUpperCase()) && (
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   158
        tag_name=='INPUT' ||
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   159
        tag_name=='SELECT' ||
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   160
        tag_name=='OPTION' ||
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   161
        tag_name=='BUTTON' ||
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   162
        tag_name=='TEXTAREA')) return;
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   163
        
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   164
      var pointer = [Event.pointerX(event), Event.pointerY(event)];
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   165
      var pos     = Position.cumulativeOffset(this.element);
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   166
      this.offset = [0,1].map( function(i) { return (pointer[i] - pos[i]) });
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   167
      
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   168
      Draggables.activate(this);
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   169
      Event.stop(event);
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   170
    }
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   171
  },
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   172
  
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   173
  startDrag: function(event) {
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   174
    this.dragging = true;
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   175
    if(!this.delta)
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   176
      this.delta = this.currentDelta();
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   177
    
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   178
    if(this.options.zindex) {
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   179
      this.originalZ = parseInt(Element.getStyle(this.element,'z-index') || 0);
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   180
      this.element.style.zIndex = this.options.zindex;
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   181
    }
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   182
    
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   183
    Draggables.notify('onStart', this, event);
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   184
  },
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   185
  
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   186
  updateDrag: function(event, pointer) {
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   187
    if(!this.dragging) this.startDrag(event);
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   188
    
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   189
    Draggables.notify('onDrag', this, event);
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   190
    
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   191
    this.draw(pointer);
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   192
    if(this.options.change) this.options.change(this);
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   193
    
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   194
    // fix AppleWebKit rendering
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   195
    if(Prototype.Browser.WebKit) window.scrollBy(0,0);
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   196
    
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   197
    Event.stop(event);
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   198
  },
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   199
  
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   200
  finishDrag: function(event, success) {
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   201
    this.dragging = false;
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   202
    
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   203
    Draggables.notify('onEnd', this, event);
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   204
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   205
    var d = this.currentDelta();
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   206
    this.delta = d;
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   207
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   208
    if(this.options.zindex)
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   209
      this.element.style.zIndex = this.originalZ;
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   210
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   211
    Draggables.deactivate(this);
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   212
  },
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   213
  
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   214
  keyPress: function(event) {
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   215
    if(event.keyCode!=Event.KEY_ESC) return;
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   216
    this.finishDrag(event, false);
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   217
    Event.stop(event);
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   218
  },
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   219
  
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   220
  endDrag: function(event) {
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   221
    if(!this.dragging) return;
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   222
    this.finishDrag(event, true);
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   223
    Event.stop(event);
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   224
  },
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   225
  
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   226
  draw: function(point) {
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   227
    var pos = Position.cumulativeOffset(this.element);
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   228
    
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   229
    var d = this.currentDelta();
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   230
    pos[0] -= d[0]; pos[1] -= d[1];
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   231
    
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   232
    var p = [0,1].map(function(i){ 
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   233
      return (point[i]-pos[i]-this.offset[i]) 
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   234
    }.bind(this));
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   235
    
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   236
    var style = this.element.style;
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   237
    if((!this.options.constraint) || (this.options.constraint=='horizontal'))
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   238
      style.left = p[0] + "px";
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   239
    if((!this.options.constraint) || (this.options.constraint=='vertical'))
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   240
      style.top  = p[1] + "px";
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   241
    
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   242
    if(style.visibility=="hidden") style.visibility = ""; // fix gecko rendering
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   243
  },
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   244
   
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   245
});
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   246
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   247
Draggable._dragging = { };
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   248