forked from MLstate/opalang
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[feature] plugin: drag n drop plugin
- Loading branch information
Jessica Castejon
committed
Jul 12, 2011
1 parent
0f6ff4a
commit 83d2b93
Showing
8 changed files
with
3,774 additions
and
0 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,312 @@ | ||
/*! | ||
* jQuery UI 1.8.14 | ||
* | ||
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) | ||
* Dual licensed under the MIT or GPL Version 2 licenses. | ||
* http://jquery.org/license | ||
* | ||
* http://docs.jquery.com/UI | ||
*/ | ||
(function( $, undefined ) { | ||
|
||
// prevent duplicate loading | ||
// this is only a problem because we proxy existing functions | ||
// and we don't want to double proxy them | ||
$.ui = $.ui || {}; | ||
if ( $.ui.version ) { | ||
return; | ||
} | ||
|
||
$.extend( $.ui, { | ||
version: "1.8.14", | ||
|
||
keyCode: { | ||
ALT: 18, | ||
BACKSPACE: 8, | ||
CAPS_LOCK: 20, | ||
COMMA: 188, | ||
COMMAND: 91, | ||
COMMAND_LEFT: 91, // COMMAND | ||
COMMAND_RIGHT: 93, | ||
CONTROL: 17, | ||
DELETE: 46, | ||
DOWN: 40, | ||
END: 35, | ||
ENTER: 13, | ||
ESCAPE: 27, | ||
HOME: 36, | ||
INSERT: 45, | ||
LEFT: 37, | ||
MENU: 93, // COMMAND_RIGHT | ||
NUMPAD_ADD: 107, | ||
NUMPAD_DECIMAL: 110, | ||
NUMPAD_DIVIDE: 111, | ||
NUMPAD_ENTER: 108, | ||
NUMPAD_MULTIPLY: 106, | ||
NUMPAD_SUBTRACT: 109, | ||
PAGE_DOWN: 34, | ||
PAGE_UP: 33, | ||
PERIOD: 190, | ||
RIGHT: 39, | ||
SHIFT: 16, | ||
SPACE: 32, | ||
TAB: 9, | ||
UP: 38, | ||
WINDOWS: 91 // COMMAND | ||
} | ||
}); | ||
|
||
// plugins | ||
$.fn.extend({ | ||
_focus: $.fn.focus, | ||
focus: function( delay, fn ) { | ||
return typeof delay === "number" ? | ||
this.each(function() { | ||
var elem = this; | ||
setTimeout(function() { | ||
$( elem ).focus(); | ||
if ( fn ) { | ||
fn.call( elem ); | ||
} | ||
}, delay ); | ||
}) : | ||
this._focus.apply( this, arguments ); | ||
}, | ||
|
||
scrollParent: function() { | ||
var scrollParent; | ||
if (($.browser.msie && (/(static|relative)/).test(this.css('position'))) || (/absolute/).test(this.css('position'))) { | ||
scrollParent = this.parents().filter(function() { | ||
return (/(relative|absolute|fixed)/).test($.curCSS(this,'position',1)) && (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1)); | ||
}).eq(0); | ||
} else { | ||
scrollParent = this.parents().filter(function() { | ||
return (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1)); | ||
}).eq(0); | ||
} | ||
|
||
return (/fixed/).test(this.css('position')) || !scrollParent.length ? $(document) : scrollParent; | ||
}, | ||
|
||
zIndex: function( zIndex ) { | ||
if ( zIndex !== undefined ) { | ||
return this.css( "zIndex", zIndex ); | ||
} | ||
|
||
if ( this.length ) { | ||
var elem = $( this[ 0 ] ), position, value; | ||
while ( elem.length && elem[ 0 ] !== document ) { | ||
// Ignore z-index if position is set to a value where z-index is ignored by the browser | ||
// This makes behavior of this function consistent across browsers | ||
// WebKit always returns auto if the element is positioned | ||
position = elem.css( "position" ); | ||
if ( position === "absolute" || position === "relative" || position === "fixed" ) { | ||
// IE returns 0 when zIndex is not specified | ||
// other browsers return a string | ||
// we ignore the case of nested elements with an explicit value of 0 | ||
// <div style="z-index: -10;"><div style="z-index: 0;"></div></div> | ||
value = parseInt( elem.css( "zIndex" ), 10 ); | ||
if ( !isNaN( value ) && value !== 0 ) { | ||
return value; | ||
} | ||
} | ||
elem = elem.parent(); | ||
} | ||
} | ||
|
||
return 0; | ||
}, | ||
|
||
disableSelection: function() { | ||
return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) + | ||
".ui-disableSelection", function( event ) { | ||
event.preventDefault(); | ||
}); | ||
}, | ||
|
||
enableSelection: function() { | ||
return this.unbind( ".ui-disableSelection" ); | ||
} | ||
}); | ||
|
||
$.each( [ "Width", "Height" ], function( i, name ) { | ||
var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ], | ||
type = name.toLowerCase(), | ||
orig = { | ||
innerWidth: $.fn.innerWidth, | ||
innerHeight: $.fn.innerHeight, | ||
outerWidth: $.fn.outerWidth, | ||
outerHeight: $.fn.outerHeight | ||
}; | ||
|
||
function reduce( elem, size, border, margin ) { | ||
$.each( side, function() { | ||
size -= parseFloat( $.curCSS( elem, "padding" + this, true) ) || 0; | ||
if ( border ) { | ||
size -= parseFloat( $.curCSS( elem, "border" + this + "Width", true) ) || 0; | ||
} | ||
if ( margin ) { | ||
size -= parseFloat( $.curCSS( elem, "margin" + this, true) ) || 0; | ||
} | ||
}); | ||
return size; | ||
} | ||
|
||
$.fn[ "inner" + name ] = function( size ) { | ||
if ( size === undefined ) { | ||
return orig[ "inner" + name ].call( this ); | ||
} | ||
|
||
return this.each(function() { | ||
$( this ).css( type, reduce( this, size ) + "px" ); | ||
}); | ||
}; | ||
|
||
$.fn[ "outer" + name] = function( size, margin ) { | ||
if ( typeof size !== "number" ) { | ||
return orig[ "outer" + name ].call( this, size ); | ||
} | ||
|
||
return this.each(function() { | ||
$( this).css( type, reduce( this, size, true, margin ) + "px" ); | ||
}); | ||
}; | ||
}); | ||
|
||
// selectors | ||
function focusable( element, isTabIndexNotNaN ) { | ||
var nodeName = element.nodeName.toLowerCase(); | ||
if ( "area" === nodeName ) { | ||
var map = element.parentNode, | ||
mapName = map.name, | ||
img; | ||
if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) { | ||
return false; | ||
} | ||
img = $( "img[usemap=#" + mapName + "]" )[0]; | ||
return !!img && visible( img ); | ||
} | ||
return ( /input|select|textarea|button|object/.test( nodeName ) | ||
? !element.disabled | ||
: "a" == nodeName | ||
? element.href || isTabIndexNotNaN | ||
: isTabIndexNotNaN) | ||
// the element and all of its ancestors must be visible | ||
&& visible( element ); | ||
} | ||
|
||
function visible( element ) { | ||
return !$( element ).parents().andSelf().filter(function() { | ||
return $.curCSS( this, "visibility" ) === "hidden" || | ||
$.expr.filters.hidden( this ); | ||
}).length; | ||
} | ||
|
||
$.extend( $.expr[ ":" ], { | ||
data: function( elem, i, match ) { | ||
return !!$.data( elem, match[ 3 ] ); | ||
}, | ||
|
||
focusable: function( element ) { | ||
return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) ); | ||
}, | ||
|
||
tabbable: function( element ) { | ||
var tabIndex = $.attr( element, "tabindex" ), | ||
isTabIndexNaN = isNaN( tabIndex ); | ||
return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN ); | ||
} | ||
}); | ||
|
||
// support | ||
$(function() { | ||
var body = document.body, | ||
div = body.appendChild( div = document.createElement( "div" ) ); | ||
|
||
$.extend( div.style, { | ||
minHeight: "100px", | ||
height: "auto", | ||
padding: 0, | ||
borderWidth: 0 | ||
}); | ||
|
||
$.support.minHeight = div.offsetHeight === 100; | ||
$.support.selectstart = "onselectstart" in div; | ||
|
||
// set display to none to avoid a layout bug in IE | ||
// http://dev.jquery.com/ticket/4014 | ||
body.removeChild( div ).style.display = "none"; | ||
}); | ||
|
||
|
||
|
||
|
||
|
||
// deprecated | ||
$.extend( $.ui, { | ||
// $.ui.plugin is deprecated. Use the proxy pattern instead. | ||
plugin: { | ||
add: function( module, option, set ) { | ||
var proto = $.ui[ module ].prototype; | ||
for ( var i in set ) { | ||
proto.plugins[ i ] = proto.plugins[ i ] || []; | ||
proto.plugins[ i ].push( [ option, set[ i ] ] ); | ||
} | ||
}, | ||
call: function( instance, name, args ) { | ||
var set = instance.plugins[ name ]; | ||
if ( !set || !instance.element[ 0 ].parentNode ) { | ||
return; | ||
} | ||
|
||
for ( var i = 0; i < set.length; i++ ) { | ||
if ( instance.options[ set[ i ][ 0 ] ] ) { | ||
set[ i ][ 1 ].apply( instance.element, args ); | ||
} | ||
} | ||
} | ||
}, | ||
|
||
// will be deprecated when we switch to jQuery 1.4 - use jQuery.contains() | ||
contains: function( a, b ) { | ||
return document.compareDocumentPosition ? | ||
a.compareDocumentPosition( b ) & 16 : | ||
a !== b && a.contains( b ); | ||
}, | ||
|
||
// only used by resizable | ||
hasScroll: function( el, a ) { | ||
|
||
//If overflow is hidden, the element might have extra content, but the user wants to hide it | ||
if ( $( el ).css( "overflow" ) === "hidden") { | ||
return false; | ||
} | ||
|
||
var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop", | ||
has = false; | ||
|
||
if ( el[ scroll ] > 0 ) { | ||
return true; | ||
} | ||
|
||
// TODO: determine which cases actually cause this to happen | ||
// if the element doesn't have the scroll set, see if it's possible to | ||
// set the scroll | ||
el[ scroll ] = 1; | ||
has = ( el[ scroll ] > 0 ); | ||
el[ scroll ] = 0; | ||
return has; | ||
}, | ||
|
||
// these are odd functions, fix the API or move into individual plugins | ||
isOverAxis: function( x, reference, size ) { | ||
//Determines when x coordinate is over "b" element axis | ||
return ( x > reference ) && ( x < ( reference + size ) ); | ||
}, | ||
isOver: function( y, x, top, left, height, width ) { | ||
//Determines when x, y coordinates is over "b" element | ||
return $.ui.isOverAxis( y, top, height ) && $.ui.isOverAxis( x, left, width ); | ||
} | ||
}); | ||
|
||
})( jQuery ); |
Oops, something went wrong.