Файл: public_html/js/draggable-0.1.js
Строк: 152
<?php
/**
 * draggable - Class allows to make any element draggable
 * 
 * Written by
 * Egor Khmelev (hmelyoff@gmail.com)
 *
 * Licensed under the MIT (MIT-LICENSE.txt).
 *
 * @author Egor Khmelev
 * @version 0.1.0-BETA ($Id$)
 * 
 **/
(function( $ ){
  function Draggable(){
      this._init.apply( this, arguments );
  };
    Draggable.prototype.oninit = function(){
      
    };
    
    Draggable.prototype.events = function(){
      
    };
    
    Draggable.prototype.onmousedown = function(){
        this.ptr.css({ position: "absolute" });
    };
    
    Draggable.prototype.onmousemove = function( evt, x, y ){
        this.ptr.css({ left: x, top: y });
    };
    
    Draggable.prototype.onmouseup = function(){
      
    };
    Draggable.prototype.isDefault = {
        drag: false,
        clicked: false,
        toclick: true,
        mouseup: false
    };
    Draggable.prototype._init = function(){
        if( arguments.length > 0 ){
            this.ptr = $(arguments[0]);
            this.outer = $(".draggable-outer");
            this.is = {};
            $.extend( this.is, this.isDefault );
            var _offset = this.ptr.offset();
            this.d = {
                left: _offset.left,
                top: _offset.top,
                width: this.ptr.width(),
                height: this.ptr.height()
            };
            this.oninit.apply( this, arguments );
            this._events();
        }
    };
    
    Draggable.prototype._getPageCoords = function( event ){
      if( event.targetTouches && event.targetTouches[0] ){
        return { x: event.targetTouches[0].pageX, y: event.targetTouches[0].pageY };
      } else
        return { x: event.pageX, y: event.pageY };
    };
    
    Draggable.prototype._bindEvent = function( ptr, eventType, handler ){
      var self = this;
      if( this.supportTouches_ )
      ptr.get(0).addEventListener( this.events_[ eventType ], handler, false );
      
      else
        ptr.bind( this.events_[ eventType ], handler );
    };
    
    Draggable.prototype._events = function(){
        var self = this;
    this.supportTouches_ = 'ontouchend' in document;
    this.events_ = {
      "click": this.supportTouches_ ? "touchstart" : "click",
      "down": this.supportTouches_ ? "touchstart" : "mousedown",
      "move": this.supportTouches_ ? "touchmove" : "mousemove",
      "up"  : this.supportTouches_ ? "touchend" : "mouseup"
    };
    this._bindEvent( $( document ), "move", function( event ){
            if( self.is.drag ){
        event.stopPropagation();
        event.preventDefault();
                self._mousemove( event );
            }
        });
    this._bindEvent( $( document ), "down", function( event ){
            if( self.is.drag ){
        event.stopPropagation();
        event.preventDefault();
            }
        });
    this._bindEvent( $( document ), "up", function( event ){
            self._mouseup( event );
        });
        
    this._bindEvent( this.ptr, "down", function( event ){
            self._mousedown( event );
            return false;
        });
    this._bindEvent( this.ptr, "up", function( event ){
            self._mouseup( event );
        });
        
        this.ptr.find("a")
            .click(function(){
                self.is.clicked = true;
                if( !self.is.toclick ){
                    self.is.toclick = true;
                    return false;
                }
            })
            .mousedown(function( event ){
                self._mousedown( event );
                return false;
            });
        this.events();
    };
    
    Draggable.prototype._mousedown = function( evt ){
        this.is.drag = true;
        this.is.clicked = false;
        this.is.mouseup = false;
        var _offset = this.ptr.offset();
        var coords = this._getPageCoords( evt );
        this.cx = coords.x - _offset.left;
        this.cy = coords.y - _offset.top;
        $.extend(this.d, {
            left: _offset.left,
            top: _offset.top,
            width: this.ptr.width(),
            height: this.ptr.height()
        });
        if( this.outer && this.outer.get(0) ){
            this.outer.css({ height: Math.max(this.outer.height(), $(document.body).height()), overflow: "hidden" });
        }
        this.onmousedown( evt );
    };
    
    Draggable.prototype._mousemove = function( evt ){
        this.is.toclick = false;
        var coords = this._getPageCoords( evt );
        this.onmousemove( evt, coords.x - this.cx, coords.y - this.cy );
    };
    
    Draggable.prototype._mouseup = function( evt ){
        var oThis = this;
        if( this.is.drag ){
            this.is.drag = false;
            if( this.outer && this.outer.get(0) ){
                if( $.browser.mozilla ){
                    this.outer.css({ overflow: "hidden" });
                } else {
                    this.outer.css({ overflow: "visible" });
                }
        if( $.browser.msie && $.browser.version == '6.0' ){
         this.outer.css({ height: "100%" });
        } else {
         this.outer.css({ height: "auto" });
        }  
            }
            this.onmouseup( evt );
        }
    };
    
    window.Draggable = Draggable;
})( jQuery );
?>