/* | |
* jQuery UI 1.5.3 | |
* | |
* Copyright (c) 2008 Paul Bakaus (ui.jquery.com) | |
* Dual licensed under the MIT (MIT-LICENSE.txt) | |
* and GPL (GPL-LICENSE.txt) licenses. | |
* | |
* http://docs.jquery.com/UI | |
*/ | |
;(function($) { | |
$.ui = { | |
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) { return; } | |
for (var i = 0; i < set.length; i++) { | |
if (instance.options[set[i][0]]) { | |
set[i][1].apply(instance.element, args); | |
} | |
} | |
} | |
}, | |
cssCache: {}, | |
css: function(name) { | |
if ($.ui.cssCache[name]) { return $.ui.cssCache[name]; } | |
var tmp = $('<div class="ui-gen">').addClass(name).css({position:'absolute', top:'-5000px', left:'-5000px', display:'block'}).appendTo('body'); | |
//if (!$.browser.safari) | |
//tmp.appendTo('body'); | |
//Opera and Safari set width and height to 0px instead of auto | |
//Safari returns rgba(0,0,0,0) when bgcolor is not set | |
$.ui.cssCache[name] = !!( | |
(!(/auto|default/).test(tmp.css('cursor')) || (/^[1-9]/).test(tmp.css('height')) || (/^[1-9]/).test(tmp.css('width')) || | |
!(/none/).test(tmp.css('backgroundImage')) || !(/transparent|rgba\(0, 0, 0, 0\)/).test(tmp.css('backgroundColor'))) | |
); | |
try { $('body').get(0).removeChild(tmp.get(0)); } catch(e){} | |
return $.ui.cssCache[name]; | |
}, | |
disableSelection: function(el) { | |
$(el).attr('unselectable', 'on').css('MozUserSelect', 'none'); | |
}, | |
enableSelection: function(el) { | |
$(el).attr('unselectable', 'off').css('MozUserSelect', ''); | |
}, | |
hasScroll: function(e, a) { | |
var scroll = /top/.test(a||"top") ? 'scrollTop' : 'scrollLeft', has = false; | |
if (e[scroll] > 0) return true; e[scroll] = 1; | |
has = e[scroll] > 0 ? true : false; e[scroll] = 0; | |
return has; | |
} | |
}; | |
/** jQuery core modifications and additions **/ | |
var _remove = $.fn.remove; | |
$.fn.remove = function() { | |
$("*", this).add(this).triggerHandler("remove"); | |
return _remove.apply(this, arguments ); | |
}; | |
// $.widget is a factory to create jQuery plugins | |
// taking some boilerplate code out of the plugin code | |
// created by Scott González and Jörn Zaefferer | |
function getter(namespace, plugin, method) { | |
var methods = $[namespace][plugin].getter || []; | |
methods = (typeof methods == "string" ? methods.split(/,?\s+/) : methods); | |
return ($.inArray(method, methods) != -1); | |
} | |
$.widget = function(name, prototype) { | |
var namespace = name.split(".")[0]; | |
name = name.split(".")[1]; | |
// create plugin method | |
$.fn[name] = function(options) { | |
var isMethodCall = (typeof options == 'string'), | |
args = Array.prototype.slice.call(arguments, 1); | |
if (isMethodCall && getter(namespace, name, options)) { | |
var instance = $.data(this[0], name); | |
return (instance ? instance[options].apply(instance, args) | |
: undefined); | |
} | |
return this.each(function() { | |
var instance = $.data(this, name); | |
if (isMethodCall && instance && $.isFunction(instance[options])) { | |
instance[options].apply(instance, args); | |
} else if (!isMethodCall) { | |
$.data(this, name, new $[namespace][name](this, options)); | |
} | |
}); | |
}; | |
// create widget constructor | |
$[namespace][name] = function(element, options) { | |
var self = this; | |
this.widgetName = name; | |
this.widgetBaseClass = namespace + '-' + name; | |
this.options = $.extend({}, $.widget.defaults, $[namespace][name].defaults, options); | |
this.element = $(element) | |
.bind('setData.' + name, function(e, key, value) { | |
return self.setData(key, value); | |
}) | |
.bind('getData.' + name, function(e, key) { | |
return self.getData(key); | |
}) | |
.bind('remove', function() { | |
return self.destroy(); | |
}); | |
this.init(); | |
}; | |
// add widget prototype | |
$[namespace][name].prototype = $.extend({}, $.widget.prototype, prototype); | |
}; | |
$.widget.prototype = { | |
init: function() {}, | |
destroy: function() { | |
this.element.removeData(this.widgetName); | |
}, | |
getData: function(key) { | |
return this.options[key]; | |
}, | |
setData: function(key, value) { | |
this.options[key] = value; | |
if (key == 'disabled') { | |
this.element[value ? 'addClass' : 'removeClass']( | |
this.widgetBaseClass + '-disabled'); | |
} | |
}, | |
enable: function() { | |
this.setData('disabled', false); | |
}, | |
disable: function() { | |
this.setData('disabled', true); | |
} | |
}; | |
$.widget.defaults = { | |
disabled: false | |
}; | |
/** Mouse Interaction Plugin **/ | |
$.ui.mouse = { | |
mouseInit: function() { | |
var self = this; | |
this.element.bind('mousedown.'+this.widgetName, function(e) { | |
return self.mouseDown(e); | |
}); | |
// Prevent text selection in IE | |
if ($.browser.msie) { | |
this._mouseUnselectable = this.element.attr('unselectable'); | |
this.element.attr('unselectable', 'on'); | |
} | |
this.started = false; | |
}, | |
// TODO: make sure destroying one instance of mouse doesn't mess with | |
// other instances of mouse | |
mouseDestroy: function() { | |
this.element.unbind('.'+this.widgetName); | |
// Restore text selection in IE | |
($.browser.msie | |
&& this.element.attr('unselectable', this._mouseUnselectable)); | |
}, | |
mouseDown: function(e) { | |
// we may have missed mouseup (out of window) | |
(this._mouseStarted && this.mouseUp(e)); | |
this._mouseDownEvent = e; | |
var self = this, | |
btnIsLeft = (e.which == 1), | |
elIsCancel = (typeof this.options.cancel == "string" ? $(e.target).parents().add(e.target).filter(this.options.cancel).length : false); | |
if (!btnIsLeft || elIsCancel || !this.mouseCapture(e)) { | |
return true; | |
} | |
this._mouseDelayMet = !this.options.delay; | |
if (!this._mouseDelayMet) { | |
this._mouseDelayTimer = setTimeout(function() { | |
self._mouseDelayMet = true; | |
}, this.options.delay); | |
} | |
if (this.mouseDistanceMet(e) && this.mouseDelayMet(e)) { | |
this._mouseStarted = (this.mouseStart(e) !== false); | |
if (!this._mouseStarted) { | |
e.preventDefault(); | |
return true; | |
} | |
} | |
// these delegates are required to keep context | |
this._mouseMoveDelegate = function(e) { | |
return self.mouseMove(e); | |
}; | |
this._mouseUpDelegate = function(e) { | |
return self.mouseUp(e); | |
}; | |
$(document) | |
.bind('mousemove.'+this.widgetName, this._mouseMoveDelegate) | |
.bind('mouseup.'+this.widgetName, this._mouseUpDelegate); | |
return false; | |
}, | |
mouseMove: function(e) { | |
// IE mouseup check - mouseup happened when mouse was out of window | |
if ($.browser.msie && !e.button) { | |
return this.mouseUp(e); | |
} | |
if (this._mouseStarted) { | |
this.mouseDrag(e); | |
return false; | |
} | |
if (this.mouseDistanceMet(e) && this.mouseDelayMet(e)) { | |
this._mouseStarted = | |
(this.mouseStart(this._mouseDownEvent, e) !== false); | |
(this._mouseStarted ? this.mouseDrag(e) : this.mouseUp(e)); | |
} | |
return !this._mouseStarted; | |
}, | |
mouseUp: function(e) { | |
$(document) | |
.unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate) | |
.unbind('mouseup.'+this.widgetName, this._mouseUpDelegate); | |
if (this._mouseStarted) { | |
this._mouseStarted = false; | |
this.mouseStop(e); | |
} | |
return false; | |
}, | |
mouseDistanceMet: function(e) { | |
return (Math.max( | |
Math.abs(this._mouseDownEvent.pageX - e.pageX), | |
Math.abs(this._mouseDownEvent.pageY - e.pageY) | |
) >= this.options.distance | |
); | |
}, | |
mouseDelayMet: function(e) { | |
return this._mouseDelayMet; | |
}, | |
// These are placeholder methods, to be overriden by extending plugin | |
mouseStart: function(e) {}, | |
mouseDrag: function(e) {}, | |
mouseStop: function(e) {}, | |
mouseCapture: function(e) { return true; } | |
}; | |
$.ui.mouse.defaults = { | |
cancel: null, | |
distance: 1, | |
delay: 0 | |
}; | |
})(jQuery); |