0byt3m1n1
Path:
/
data
/
applications
/
aps
/
tikiwiki
/
3.2.0-5
/
standard
/
htdocs
/
lib
/
mootools
/
src
/
Drag
/
[
Home
]
File: Drag.Move.js
/* Script: Drag.Move.js Contains <Drag.Move>, <Element.makeDraggable> License: MIT-style license. */ /* Class: Drag.Move Extends <Drag.Base>, has additional functionality for dragging an element, support snapping and droppables. Drag.move supports either position absolute or relative. If no position is found, absolute will be set. Inherits methods, properties, options and events from <Drag.Base>. Note: Drag.Move requires an XHTML doctype. Arguments: el - the $(element) to apply the drag to. options - optional. see Options below. Options: all the drag.Base options, plus: container - an element, will fill automatically limiting options based on the $(element) size and position. defaults to false (no limiting) droppables - an array of elements you can drop your draggable to. overflown - an array of nested scrolling containers, see Element::getPosition */ Drag.Move = Drag.Base.extend({ options: { droppables: [], container: false, overflown: [] }, initialize: function(el, options){ this.setOptions(options); this.element = $(el); this.droppables = $$(this.options.droppables); this.container = $(this.options.container); this.position = {'element': this.element.getStyle('position'), 'container': false}; if (this.container) this.position.container = this.container.getStyle('position'); if (!['relative', 'absolute', 'fixed'].contains(this.position.element)) this.position.element = 'absolute'; var top = this.element.getStyle('top').toInt(); var left = this.element.getStyle('left').toInt(); if (this.position.element == 'absolute' && !['relative', 'absolute', 'fixed'].contains(this.position.container)){ top = $chk(top) ? top : this.element.getTop(this.options.overflown); left = $chk(left) ? left : this.element.getLeft(this.options.overflown); } else { top = $chk(top) ? top : 0; left = $chk(left) ? left : 0; } this.element.setStyles({'top': top, 'left': left, 'position': this.position.element}); this.parent(this.element); }, start: function(event){ this.overed = null; if (this.container){ var cont = this.container.getCoordinates(); var el = this.element.getCoordinates(); if (this.position.element == 'absolute' && !['relative', 'absolute', 'fixed'].contains(this.position.container)){ this.options.limit = { 'x': [cont.left, cont.right - el.width], 'y': [cont.top, cont.bottom - el.height] }; } else { this.options.limit = { 'y': [0, cont.height - el.height], 'x': [0, cont.width - el.width] }; } } this.parent(event); }, drag: function(event){ this.parent(event); var overed = this.out ? false : this.droppables.filter(this.checkAgainst, this).getLast(); if (this.overed != overed){ if (this.overed) this.overed.fireEvent('leave', [this.element, this]); this.overed = overed ? overed.fireEvent('over', [this.element, this]) : null; } else if (overed) overed.fireEvent('drag', [this.element, this]); return this; }, checkAgainst: function(el){ el = el.getCoordinates(this.options.overflown); var now = this.mouse.now; return (now.x > el.left && now.x < el.right && now.y < el.bottom && now.y > el.top); }, stop: function(){ if (this.overed && !this.out) this.overed.fireEvent('drop', [this.element, this]); else this.element.fireEvent('emptydrop', this); this.parent(); return this; } }); /* Class: Element Custom class to allow all of its methods to be used with any DOM element via the dollar function <$>. */ Element.extend({ /* Property: makeDraggable Makes an element draggable with the supplied options. Arguments: options - see <Drag.Move> and <Drag.Base> for acceptable options. */ makeDraggable: function(options){ return new Drag.Move(this, options); } });