jquery.ui.core.js
216 lines
| 5.6 KiB
| application/javascript
|
JavascriptLexer
|
r0 | /*! | ||
* jQuery UI 1.8.2 | ||||
* | ||||
* Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) | ||||
* Dual licensed under the MIT (MIT-LICENSE.txt) | ||||
* and GPL (GPL-LICENSE.txt) licenses. | ||||
* | ||||
* http://docs.jquery.com/UI | ||||
*/ | ||||
(function($) { | ||||
// 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; | ||||
} | ||||
//Helper functions and ui object | ||||
$.extend($.ui, { | ||||
version: "1.8.2", | ||||
// $.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); | ||||
} | ||||
} | ||||
} | ||||
}, | ||||
contains: function(a, b) { | ||||
return document.compareDocumentPosition | ||||
? a.compareDocumentPosition(b) & 16 | ||||
: a !== b && a.contains(b); | ||||
}, | ||||
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; | ||||
}, | ||||
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); | ||||
}, | ||||
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 | ||||
} | ||||
}); | ||||
//jQuery plugins | ||||
$.fn.extend({ | ||||
_focus: $.fn.focus, | ||||
focus: function(delay, fn) { | ||||
return typeof delay === 'number' | ||||
? this.each(function() { | ||||
var elem = this; | ||||
setTimeout(function() { | ||||
$(elem).focus(); | ||||
(fn && fn.call(elem)); | ||||
}, delay); | ||||
}) | ||||
: this._focus.apply(this, arguments); | ||||
}, | ||||
enableSelection: function() { | ||||
return this | ||||
.attr('unselectable', 'off') | ||||
.css('MozUserSelect', ''); | ||||
}, | ||||
disableSelection: function() { | ||||
return this | ||||
.attr('unselectable', 'on') | ||||
.css('MozUserSelect', 'none'); | ||||
}, | ||||
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')); | ||||
if (!isNaN(value) && value != 0) { | ||||
return value; | ||||
} | ||||
} | ||||
elem = elem.parent(); | ||||
} | ||||
} | ||||
return 0; | ||||
} | ||||
}); | ||||
//Additional selectors | ||||
$.extend($.expr[':'], { | ||||
data: function(elem, i, match) { | ||||
return !!$.data(elem, match[3]); | ||||
}, | ||||
focusable: function(element) { | ||||
var nodeName = element.nodeName.toLowerCase(), | ||||
tabIndex = $.attr(element, 'tabindex'); | ||||
return (/input|select|textarea|button|object/.test(nodeName) | ||||
? !element.disabled | ||||
: 'a' == nodeName || 'area' == nodeName | ||||
? element.href || !isNaN(tabIndex) | ||||
: !isNaN(tabIndex)) | ||||
// the element and all of its ancestors must be visible | ||||
// the browser may report that the area is hidden | ||||
&& !$(element)['area' == nodeName ? 'parents' : 'closest'](':hidden').length; | ||||
}, | ||||
tabbable: function(element) { | ||||
var tabIndex = $.attr(element, 'tabindex'); | ||||
return (isNaN(tabIndex) || tabIndex >= 0) && $(element).is(':focusable'); | ||||
} | ||||
}); | ||||
})(jQuery); | ||||